diff options
author | Jonas Schievink <[email protected]> | 2020-06-22 18:15:54 +0100 |
---|---|---|
committer | Jonas Schievink <[email protected]> | 2020-06-24 15:53:16 +0100 |
commit | ffa0435050ae57c5171c19224ca6e9f8a4e3435d (patch) | |
tree | 02173f630fafb0804bb6009da7216fcab8a814d2 /crates/ra_hir_def/src/item_tree | |
parent | 19586bc5c62541db5253986c84ce3ba5c6392656 (diff) |
Make generics and attr queries use ItemTree
Now it's fast
Diffstat (limited to 'crates/ra_hir_def/src/item_tree')
-rw-r--r-- | crates/ra_hir_def/src/item_tree/lower.rs | 7 | ||||
-rw-r--r-- | crates/ra_hir_def/src/item_tree/tests.rs | 2 |
2 files changed, 7 insertions, 2 deletions
diff --git a/crates/ra_hir_def/src/item_tree/lower.rs b/crates/ra_hir_def/src/item_tree/lower.rs index 42af8bb5e..841c7a852 100644 --- a/crates/ra_hir_def/src/item_tree/lower.rs +++ b/crates/ra_hir_def/src/item_tree/lower.rs | |||
@@ -553,7 +553,12 @@ impl Ctx { | |||
553 | 553 | ||
554 | generics.fill(&self.body_ctx, &mut sm, node); | 554 | generics.fill(&self.body_ctx, &mut sm, node); |
555 | } | 555 | } |
556 | GenericsOwner::Impl => {} | 556 | GenericsOwner::Impl => { |
557 | // Note that we don't add `Self` here: in `impl`s, `Self` is not a | ||
558 | // type-parameter, but rather is a type-alias for impl's target | ||
559 | // type, so this is handled by the resolver. | ||
560 | generics.fill(&self.body_ctx, &mut sm, node); | ||
561 | } | ||
557 | } | 562 | } |
558 | generics | 563 | generics |
559 | } | 564 | } |
diff --git a/crates/ra_hir_def/src/item_tree/tests.rs b/crates/ra_hir_def/src/item_tree/tests.rs index 1db1ce7a9..7b8523b9f 100644 --- a/crates/ra_hir_def/src/item_tree/tests.rs +++ b/crates/ra_hir_def/src/item_tree/tests.rs | |||
@@ -200,7 +200,7 @@ fn simple_inner_items() { | |||
200 | inner attrs: Attrs { entries: None } | 200 | inner attrs: Attrs { entries: None } |
201 | 201 | ||
202 | top-level items: | 202 | top-level items: |
203 | Impl { generic_params: GenericParams { types: Arena { len: 0, data: [] }, where_predicates: [] }, target_trait: Some(Path(Path { type_anchor: None, mod_path: ModPath { kind: Plain, segments: [Name(Text("D"))] }, generic_args: [None] })), target_type: Path(Path { type_anchor: None, mod_path: ModPath { kind: Plain, segments: [Name(Text("Response"))] }, generic_args: [Some(GenericArgs { args: [Type(Path(Path { type_anchor: None, mod_path: ModPath { kind: Plain, segments: [Name(Text("T"))] }, generic_args: [None] }))], has_self_type: false, bindings: [] })] }), is_negative: false, items: [Function(Idx::<Function>(1))], ast_id: FileAstId::<ra_syntax::ast::generated::nodes::ImplDef>(0) } | 203 | Impl { generic_params: GenericParams { types: Arena { len: 1, data: [TypeParamData { name: Some(Name(Text("T"))), default: None, provenance: TypeParamList }] }, where_predicates: [WherePredicate { target: TypeRef(Path(Path { type_anchor: None, mod_path: ModPath { kind: Plain, segments: [Name(Text("T"))] }, generic_args: [None] })), bound: Path(Path { type_anchor: None, mod_path: ModPath { kind: Plain, segments: [Name(Text("A"))] }, generic_args: [None] }) }] }, target_trait: Some(Path(Path { type_anchor: None, mod_path: ModPath { kind: Plain, segments: [Name(Text("D"))] }, generic_args: [None] })), target_type: Path(Path { type_anchor: None, mod_path: ModPath { kind: Plain, segments: [Name(Text("Response"))] }, generic_args: [Some(GenericArgs { args: [Type(Path(Path { type_anchor: None, mod_path: ModPath { kind: Plain, segments: [Name(Text("T"))] }, generic_args: [None] }))], has_self_type: false, bindings: [] })] }), is_negative: false, items: [Function(Idx::<Function>(1))], ast_id: FileAstId::<ra_syntax::ast::generated::nodes::ImplDef>(0) } |
204 | 204 | ||
205 | inner items: | 205 | inner items: |
206 | FileAstId::<ra_syntax::ast::generated::nodes::ModuleItem>(2): | 206 | FileAstId::<ra_syntax::ast::generated::nodes::ModuleItem>(2): |