Skip to content

Commit 4d333eb

Browse files
committed
Get rid of do-er antipattern
1 parent caf0fa2 commit 4d333eb

File tree

7 files changed

+100
-45
lines changed

7 files changed

+100
-45
lines changed

crates/completion/src/completions.rs

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,12 @@ impl Completions {
5252
}
5353

5454
pub(crate) fn add_field(&mut self, ctx: &CompletionContext, field: hir::Field, ty: &Type) {
55-
let item = Render::new(RenderContext::new(ctx)).add_field(field, ty);
55+
let item = render_field(RenderContext::new(ctx), field, ty);
5656
self.add(item);
5757
}
5858

5959
pub(crate) fn add_tuple_field(&mut self, ctx: &CompletionContext, field: usize, ty: &Type) {
60-
let item = Render::new(RenderContext::new(ctx)).add_tuple_field(field, ty);
60+
let item = render_tuple_field(RenderContext::new(ctx), field, ty);
6161
self.add(item);
6262
}
6363

@@ -67,9 +67,7 @@ impl Completions {
6767
local_name: String,
6868
resolution: &ScopeDef,
6969
) {
70-
if let Some(item) =
71-
Render::new(RenderContext::new(ctx)).render_resolution(local_name, resolution)
72-
{
70+
if let Some(item) = render_resolution(RenderContext::new(ctx), local_name, resolution) {
7371
self.add(item);
7472
}
7573
}
@@ -84,7 +82,7 @@ impl Completions {
8482
Some(it) => it,
8583
None => return,
8684
};
87-
if let Some(item) = MacroRender::new(RenderContext::new(ctx), name, macro_).render() {
85+
if let Some(item) = render_macro(RenderContext::new(ctx), name, macro_) {
8886
self.add(item);
8987
}
9088
}
@@ -95,18 +93,18 @@ impl Completions {
9593
func: hir::Function,
9694
local_name: Option<String>,
9795
) {
98-
let item = FunctionRender::new(RenderContext::new(ctx), local_name, func).render();
96+
let item = render_fn(RenderContext::new(ctx), local_name, func);
9997
self.add(item)
10098
}
10199

102100
pub(crate) fn add_const(&mut self, ctx: &CompletionContext, constant: hir::Const) {
103-
if let Some(item) = ConstRender::new(RenderContext::new(ctx), constant).render() {
101+
if let Some(item) = render_const(RenderContext::new(ctx), constant) {
104102
self.add(item);
105103
}
106104
}
107105

108106
pub(crate) fn add_type_alias(&mut self, ctx: &CompletionContext, type_alias: hir::TypeAlias) {
109-
if let Some(item) = TypeAliasRender::new(RenderContext::new(ctx), type_alias).render() {
107+
if let Some(item) = render_type_alias(RenderContext::new(ctx), type_alias) {
110108
self.add(item)
111109
}
112110
}
@@ -117,8 +115,7 @@ impl Completions {
117115
variant: hir::EnumVariant,
118116
path: ModPath,
119117
) {
120-
let item =
121-
EnumVariantRender::new(RenderContext::new(ctx), None, variant, Some(path)).render();
118+
let item = render_enum_variant(RenderContext::new(ctx), None, variant, Some(path));
122119
self.add(item);
123120
}
124121

@@ -128,8 +125,7 @@ impl Completions {
128125
variant: hir::EnumVariant,
129126
local_name: Option<String>,
130127
) {
131-
let item =
132-
EnumVariantRender::new(RenderContext::new(ctx), local_name, variant, None).render();
128+
let item = render_enum_variant(RenderContext::new(ctx), local_name, variant, None);
133129
self.add(item);
134130
}
135131
}

crates/completion/src/render.rs

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,32 @@ use crate::{
1919
};
2020

2121
pub(crate) use crate::render::{
22-
const_::ConstRender, enum_variant::EnumVariantRender, function::FunctionRender,
23-
macro_::MacroRender, type_alias::TypeAliasRender,
22+
const_::render_const, enum_variant::render_enum_variant, function::render_fn,
23+
macro_::render_macro, type_alias::render_type_alias,
2424
};
2525

26-
/// Generic renderer for completion items.
27-
#[derive(Debug)]
28-
pub(crate) struct Render<'a> {
26+
pub(crate) fn render_field<'a>(
27+
ctx: RenderContext<'a>,
28+
field: hir::Field,
29+
ty: &Type,
30+
) -> CompletionItem {
31+
Render::new(ctx).add_field(field, ty)
32+
}
33+
34+
pub(crate) fn render_tuple_field<'a>(
2935
ctx: RenderContext<'a>,
36+
field: usize,
37+
ty: &Type,
38+
) -> CompletionItem {
39+
Render::new(ctx).add_tuple_field(field, ty)
40+
}
41+
42+
pub(crate) fn render_resolution<'a>(
43+
ctx: RenderContext<'a>,
44+
local_name: String,
45+
resolution: &ScopeDef,
46+
) -> Option<CompletionItem> {
47+
Render::new(ctx).render_resolution(local_name, resolution)
3048
}
3149

3250
/// Interface for data and methods required for items rendering.
@@ -74,12 +92,18 @@ impl<'a> RenderContext<'a> {
7492
}
7593
}
7694

95+
/// Generic renderer for completion items.
96+
#[derive(Debug)]
97+
struct Render<'a> {
98+
ctx: RenderContext<'a>,
99+
}
100+
77101
impl<'a> Render<'a> {
78-
pub(crate) fn new(ctx: RenderContext<'a>) -> Render<'a> {
102+
fn new(ctx: RenderContext<'a>) -> Render<'a> {
79103
Render { ctx }
80104
}
81105

82-
pub(crate) fn add_field(&mut self, field: hir::Field, ty: &Type) -> CompletionItem {
106+
fn add_field(&mut self, field: hir::Field, ty: &Type) -> CompletionItem {
83107
let is_deprecated = self.ctx.is_deprecated(field);
84108
let name = field.name(self.ctx.db());
85109
let mut item = CompletionItem::new(
@@ -96,17 +120,17 @@ impl<'a> Render<'a> {
96120
item = item.set_score(score);
97121
}
98122

99-
return item.build();
123+
item.build()
100124
}
101125

102-
pub(crate) fn add_tuple_field(&mut self, field: usize, ty: &Type) -> CompletionItem {
126+
fn add_tuple_field(&mut self, field: usize, ty: &Type) -> CompletionItem {
103127
CompletionItem::new(CompletionKind::Reference, self.ctx.source_range(), field.to_string())
104128
.kind(CompletionItemKind::Field)
105129
.detail(ty.display(self.ctx.db()).to_string())
106130
.build()
107131
}
108132

109-
pub(crate) fn render_resolution(
133+
fn render_resolution(
110134
self,
111135
local_name: String,
112136
resolution: &ScopeDef,
@@ -120,15 +144,15 @@ impl<'a> Render<'a> {
120144

121145
let kind = match resolution {
122146
ScopeDef::ModuleDef(Function(func)) => {
123-
let item = FunctionRender::new(self.ctx, Some(local_name), *func).render();
147+
let item = render_fn(self.ctx, Some(local_name), *func);
124148
return Some(item);
125149
}
126150
ScopeDef::ModuleDef(EnumVariant(var)) => {
127-
let item = EnumVariantRender::new(self.ctx, Some(local_name), *var, None).render();
151+
let item = render_enum_variant(self.ctx, Some(local_name), *var, None);
128152
return Some(item);
129153
}
130154
ScopeDef::MacroDef(mac) => {
131-
let item = MacroRender::new(self.ctx, local_name, *mac).render();
155+
let item = render_macro(self.ctx, local_name, *mac);
132156
return item;
133157
}
134158

crates/completion/src/render/const_.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,27 @@ use crate::{
1111
render::RenderContext,
1212
};
1313

14+
pub(crate) fn render_const<'a>(
15+
ctx: RenderContext<'a>,
16+
const_: hir::Const,
17+
) -> Option<CompletionItem> {
18+
ConstRender::new(ctx, const_).render()
19+
}
20+
1421
#[derive(Debug)]
15-
pub(crate) struct ConstRender<'a> {
22+
struct ConstRender<'a> {
1623
ctx: RenderContext<'a>,
1724
const_: hir::Const,
1825
ast_node: Const,
1926
}
2027

2128
impl<'a> ConstRender<'a> {
22-
pub(crate) fn new(ctx: RenderContext<'a>, const_: hir::Const) -> ConstRender<'a> {
29+
fn new(ctx: RenderContext<'a>, const_: hir::Const) -> ConstRender<'a> {
2330
let ast_node = const_.source(ctx.db()).value;
2431
ConstRender { ctx, const_, ast_node }
2532
}
2633

27-
pub(crate) fn render(self) -> Option<CompletionItem> {
34+
fn render(self) -> Option<CompletionItem> {
2835
let name = self.name()?;
2936
let detail = self.detail();
3037

crates/completion/src/render/enum_variant.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,17 @@ use crate::{
99
render::{builder_ext::Params, RenderContext},
1010
};
1111

12+
pub(crate) fn render_enum_variant<'a>(
13+
ctx: RenderContext<'a>,
14+
local_name: Option<String>,
15+
variant: hir::EnumVariant,
16+
path: Option<ModPath>,
17+
) -> CompletionItem {
18+
EnumVariantRender::new(ctx, local_name, variant, path).render()
19+
}
20+
1221
#[derive(Debug)]
13-
pub(crate) struct EnumVariantRender<'a> {
22+
struct EnumVariantRender<'a> {
1423
ctx: RenderContext<'a>,
1524
name: String,
1625
variant: hir::EnumVariant,
@@ -21,7 +30,7 @@ pub(crate) struct EnumVariantRender<'a> {
2130
}
2231

2332
impl<'a> EnumVariantRender<'a> {
24-
pub(crate) fn new(
33+
fn new(
2534
ctx: RenderContext<'a>,
2635
local_name: Option<String>,
2736
variant: hir::EnumVariant,
@@ -51,7 +60,7 @@ impl<'a> EnumVariantRender<'a> {
5160
}
5261
}
5362

54-
pub(crate) fn render(self) -> CompletionItem {
63+
fn render(self) -> CompletionItem {
5564
let mut builder = CompletionItem::new(
5665
CompletionKind::Reference,
5766
self.ctx.source_range(),

crates/completion/src/render/function.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,24 @@ use crate::{
88
render::{builder_ext::Params, RenderContext},
99
};
1010

11+
pub(crate) fn render_fn<'a>(
12+
ctx: RenderContext<'a>,
13+
local_name: Option<String>,
14+
fn_: hir::Function,
15+
) -> CompletionItem {
16+
FunctionRender::new(ctx, local_name, fn_).render()
17+
}
18+
1119
#[derive(Debug)]
12-
pub(crate) struct FunctionRender<'a> {
20+
struct FunctionRender<'a> {
1321
ctx: RenderContext<'a>,
1422
name: String,
1523
fn_: hir::Function,
1624
ast_node: Fn,
1725
}
1826

1927
impl<'a> FunctionRender<'a> {
20-
pub(crate) fn new(
28+
fn new(
2129
ctx: RenderContext<'a>,
2230
local_name: Option<String>,
2331
fn_: hir::Function,
@@ -28,7 +36,7 @@ impl<'a> FunctionRender<'a> {
2836
FunctionRender { ctx, name, fn_, ast_node }
2937
}
3038

31-
pub(crate) fn render(self) -> CompletionItem {
39+
fn render(self) -> CompletionItem {
3240
let params = self.params();
3341
CompletionItem::new(CompletionKind::Reference, self.ctx.source_range(), self.name.clone())
3442
.kind(self.kind())

crates/completion/src/render/macro_.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,16 @@ use crate::{
99
render::RenderContext,
1010
};
1111

12+
pub(crate) fn render_macro<'a>(
13+
ctx: RenderContext<'a>,
14+
name: String,
15+
macro_: hir::MacroDef,
16+
) -> Option<CompletionItem> {
17+
MacroRender::new(ctx, name, macro_).render()
18+
}
19+
1220
#[derive(Debug)]
13-
pub(crate) struct MacroRender<'a> {
21+
struct MacroRender<'a> {
1422
ctx: RenderContext<'a>,
1523
name: String,
1624
macro_: hir::MacroDef,
@@ -20,19 +28,15 @@ pub(crate) struct MacroRender<'a> {
2028
}
2129

2230
impl<'a> MacroRender<'a> {
23-
pub(crate) fn new(
24-
ctx: RenderContext<'a>,
25-
name: String,
26-
macro_: hir::MacroDef,
27-
) -> MacroRender<'a> {
31+
fn new(ctx: RenderContext<'a>, name: String, macro_: hir::MacroDef) -> MacroRender<'a> {
2832
let docs = ctx.docs(macro_);
2933
let docs_str = docs.as_ref().map_or("", |s| s.as_str());
3034
let (bra, ket) = guess_macro_braces(&name, docs_str);
3135

3236
MacroRender { ctx, name, macro_, docs, bra, ket }
3337
}
3438

35-
pub(crate) fn render(&self) -> Option<CompletionItem> {
39+
fn render(&self) -> Option<CompletionItem> {
3640
// FIXME: Currently proc-macro do not have ast-node,
3741
// such that it does not have source
3842
if self.macro_.is_proc_macro() {

crates/completion/src/render/type_alias.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,27 @@ use crate::{
1111
render::RenderContext,
1212
};
1313

14+
pub(crate) fn render_type_alias<'a>(
15+
ctx: RenderContext<'a>,
16+
type_alias: hir::TypeAlias,
17+
) -> Option<CompletionItem> {
18+
TypeAliasRender::new(ctx, type_alias).render()
19+
}
20+
1421
#[derive(Debug)]
15-
pub(crate) struct TypeAliasRender<'a> {
22+
struct TypeAliasRender<'a> {
1623
ctx: RenderContext<'a>,
1724
type_alias: hir::TypeAlias,
1825
ast_node: TypeAlias,
1926
}
2027

2128
impl<'a> TypeAliasRender<'a> {
22-
pub(crate) fn new(ctx: RenderContext<'a>, type_alias: hir::TypeAlias) -> TypeAliasRender<'a> {
29+
fn new(ctx: RenderContext<'a>, type_alias: hir::TypeAlias) -> TypeAliasRender<'a> {
2330
let ast_node = type_alias.source(ctx.db()).value;
2431
TypeAliasRender { ctx, type_alias, ast_node }
2532
}
2633

27-
pub(crate) fn render(self) -> Option<CompletionItem> {
34+
fn render(self) -> Option<CompletionItem> {
2835
let name = self.name()?;
2936
let detail = self.detail();
3037

0 commit comments

Comments
 (0)