diff options
-rw-r--r-- | crates/ra_ide/src/completion/complete_fn_param.rs | 30 | ||||
-rw-r--r-- | crates/ra_syntax/src/ast/generated/nodes.rs | 4 | ||||
-rw-r--r-- | crates/ra_syntax/src/ast/traits.rs | 6 | ||||
-rw-r--r-- | xtask/src/ast_src.rs | 8 |
4 files changed, 20 insertions, 28 deletions
diff --git a/crates/ra_ide/src/completion/complete_fn_param.rs b/crates/ra_ide/src/completion/complete_fn_param.rs index 62ae5ccb4..f84b559fc 100644 --- a/crates/ra_ide/src/completion/complete_fn_param.rs +++ b/crates/ra_ide/src/completion/complete_fn_param.rs | |||
@@ -1,6 +1,9 @@ | |||
1 | //! FIXME: write short doc here | 1 | //! FIXME: write short doc here |
2 | 2 | ||
3 | use ra_syntax::{ast, match_ast, AstNode}; | 3 | use ra_syntax::{ |
4 | ast::{self, ModuleItemOwner}, | ||
5 | match_ast, AstNode, | ||
6 | }; | ||
4 | use rustc_hash::FxHashMap; | 7 | use rustc_hash::FxHashMap; |
5 | 8 | ||
6 | use crate::completion::{CompletionContext, CompletionItem, CompletionKind, Completions}; | 9 | use crate::completion::{CompletionContext, CompletionItem, CompletionKind, Completions}; |
@@ -16,11 +19,19 @@ pub(super) fn complete_fn_param(acc: &mut Completions, ctx: &CompletionContext) | |||
16 | 19 | ||
17 | let mut params = FxHashMap::default(); | 20 | let mut params = FxHashMap::default(); |
18 | for node in ctx.token.parent().ancestors() { | 21 | for node in ctx.token.parent().ancestors() { |
19 | match_ast! { | 22 | let items = match_ast! { |
20 | match node { | 23 | match node { |
21 | ast::SourceFile(it) => process(it, &mut params), | 24 | ast::SourceFile(it) => it.items(), |
22 | ast::ItemList(it) => process(it, &mut params), | 25 | ast::ItemList(it) => it.items(), |
23 | _ => (), | 26 | _ => continue, |
27 | } | ||
28 | }; | ||
29 | for item in items { | ||
30 | if let ast::ModuleItem::FnDef(func) = item { | ||
31 | func.param_list().into_iter().flat_map(|it| it.params()).for_each(|param| { | ||
32 | let text = param.syntax().text().to_string(); | ||
33 | params.entry(text).or_insert((0, param)).0 += 1; | ||
34 | }) | ||
24 | } | 35 | } |
25 | } | 36 | } |
26 | } | 37 | } |
@@ -39,15 +50,6 @@ pub(super) fn complete_fn_param(acc: &mut Completions, ctx: &CompletionContext) | |||
39 | .lookup_by(lookup) | 50 | .lookup_by(lookup) |
40 | .add_to(acc) | 51 | .add_to(acc) |
41 | }); | 52 | }); |
42 | |||
43 | fn process<N: ast::FnDefOwner>(node: N, params: &mut FxHashMap<String, (u32, ast::Param)>) { | ||
44 | node.functions().filter_map(|it| it.param_list()).flat_map(|it| it.params()).for_each( | ||
45 | |param| { | ||
46 | let text = param.syntax().text().to_string(); | ||
47 | params.entry(text).or_insert((0, param)).0 += 1; | ||
48 | }, | ||
49 | ) | ||
50 | } | ||
51 | } | 53 | } |
52 | 54 | ||
53 | #[cfg(test)] | 55 | #[cfg(test)] |
diff --git a/crates/ra_syntax/src/ast/generated/nodes.rs b/crates/ra_syntax/src/ast/generated/nodes.rs index bcbfd1129..3b820507d 100644 --- a/crates/ra_syntax/src/ast/generated/nodes.rs +++ b/crates/ra_syntax/src/ast/generated/nodes.rs | |||
@@ -22,7 +22,6 @@ impl AstNode for SourceFile { | |||
22 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 22 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
23 | } | 23 | } |
24 | impl ast::ModuleItemOwner for SourceFile {} | 24 | impl ast::ModuleItemOwner for SourceFile {} |
25 | impl ast::FnDefOwner for SourceFile {} | ||
26 | impl ast::AttrsOwner for SourceFile {} | 25 | impl ast::AttrsOwner for SourceFile {} |
27 | impl SourceFile { | 26 | impl SourceFile { |
28 | pub fn modules(&self) -> AstChildren<Module> { support::children(&self.syntax) } | 27 | pub fn modules(&self) -> AstChildren<Module> { support::children(&self.syntax) } |
@@ -344,7 +343,6 @@ impl AstNode for ItemList { | |||
344 | } | 343 | } |
345 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 344 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
346 | } | 345 | } |
347 | impl ast::FnDefOwner for ItemList {} | ||
348 | impl ast::ModuleItemOwner for ItemList {} | 346 | impl ast::ModuleItemOwner for ItemList {} |
349 | impl ItemList { | 347 | impl ItemList { |
350 | pub fn l_curly_token(&self) -> Option<LCurly> { support::token(&self.syntax) } | 348 | pub fn l_curly_token(&self) -> Option<LCurly> { support::token(&self.syntax) } |
@@ -2512,7 +2510,6 @@ impl AstNode for MacroItems { | |||
2512 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2510 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
2513 | } | 2511 | } |
2514 | impl ast::ModuleItemOwner for MacroItems {} | 2512 | impl ast::ModuleItemOwner for MacroItems {} |
2515 | impl ast::FnDefOwner for MacroItems {} | ||
2516 | impl MacroItems {} | 2513 | impl MacroItems {} |
2517 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] | 2514 | #[derive(Debug, Clone, PartialEq, Eq, Hash)] |
2518 | pub struct MacroStmts { | 2515 | pub struct MacroStmts { |
@@ -2548,7 +2545,6 @@ impl AstNode for ExternItemList { | |||
2548 | } | 2545 | } |
2549 | fn syntax(&self) -> &SyntaxNode { &self.syntax } | 2546 | fn syntax(&self) -> &SyntaxNode { &self.syntax } |
2550 | } | 2547 | } |
2551 | impl ast::FnDefOwner for ExternItemList {} | ||
2552 | impl ast::ModuleItemOwner for ExternItemList {} | 2548 | impl ast::ModuleItemOwner for ExternItemList {} |
2553 | impl ExternItemList { | 2549 | impl ExternItemList { |
2554 | pub fn l_curly_token(&self) -> Option<LCurly> { support::token(&self.syntax) } | 2550 | pub fn l_curly_token(&self) -> Option<LCurly> { support::token(&self.syntax) } |
diff --git a/crates/ra_syntax/src/ast/traits.rs b/crates/ra_syntax/src/ast/traits.rs index f6c786e44..f0b54cf29 100644 --- a/crates/ra_syntax/src/ast/traits.rs +++ b/crates/ra_syntax/src/ast/traits.rs | |||
@@ -43,12 +43,6 @@ pub trait ArgListOwner: AstNode { | |||
43 | } | 43 | } |
44 | } | 44 | } |
45 | 45 | ||
46 | pub trait FnDefOwner: AstNode { | ||
47 | fn functions(&self) -> AstChildren<ast::FnDef> { | ||
48 | support::children(self.syntax()) | ||
49 | } | ||
50 | } | ||
51 | |||
52 | pub trait ModuleItemOwner: AstNode { | 46 | pub trait ModuleItemOwner: AstNode { |
53 | fn items(&self) -> AstChildren<ast::ModuleItem> { | 47 | fn items(&self) -> AstChildren<ast::ModuleItem> { |
54 | support::children(self.syntax()) | 48 | support::children(self.syntax()) |
diff --git a/xtask/src/ast_src.rs b/xtask/src/ast_src.rs index 74a87e900..ac4cc9717 100644 --- a/xtask/src/ast_src.rs +++ b/xtask/src/ast_src.rs | |||
@@ -298,7 +298,7 @@ macro_rules! ast_enums { | |||
298 | 298 | ||
299 | pub(crate) const AST_SRC: AstSrc = AstSrc { | 299 | pub(crate) const AST_SRC: AstSrc = AstSrc { |
300 | nodes: &ast_nodes! { | 300 | nodes: &ast_nodes! { |
301 | struct SourceFile: ModuleItemOwner, FnDefOwner, AttrsOwner { | 301 | struct SourceFile: ModuleItemOwner, AttrsOwner { |
302 | modules: [Module], | 302 | modules: [Module], |
303 | } | 303 | } |
304 | 304 | ||
@@ -364,7 +364,7 @@ pub(crate) const AST_SRC: AstSrc = AstSrc { | |||
364 | Semi | 364 | Semi |
365 | } | 365 | } |
366 | 366 | ||
367 | struct ItemList: FnDefOwner, ModuleItemOwner { | 367 | struct ItemList: ModuleItemOwner { |
368 | LCurly, | 368 | LCurly, |
369 | impl_items: [ImplItem], | 369 | impl_items: [ImplItem], |
370 | RCurly | 370 | RCurly |
@@ -604,14 +604,14 @@ pub(crate) const AST_SRC: AstSrc = AstSrc { | |||
604 | struct LifetimeArg { Lifetime } | 604 | struct LifetimeArg { Lifetime } |
605 | struct ConstArg { Literal, Eq, BlockExpr } | 605 | struct ConstArg { Literal, Eq, BlockExpr } |
606 | 606 | ||
607 | struct MacroItems: ModuleItemOwner, FnDefOwner { } | 607 | struct MacroItems: ModuleItemOwner{ } |
608 | 608 | ||
609 | struct MacroStmts { | 609 | struct MacroStmts { |
610 | statements: [Stmt], | 610 | statements: [Stmt], |
611 | Expr, | 611 | Expr, |
612 | } | 612 | } |
613 | 613 | ||
614 | struct ExternItemList: FnDefOwner, ModuleItemOwner { | 614 | struct ExternItemList: ModuleItemOwner { |
615 | LCurly, | 615 | LCurly, |
616 | extern_items: [ExternItem], | 616 | extern_items: [ExternItem], |
617 | RCurly | 617 | RCurly |