diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2019-07-19 12:15:55 +0100 |
---|---|---|
committer | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2019-07-19 12:15:55 +0100 |
commit | f209843e31af7f0e0212aa28ffec2efad2a70c6f (patch) | |
tree | 548227da78a3bea644f57714d075410c0bdf7469 /crates/ra_ide_api/src/completion/completion_context.rs | |
parent | 58d4983ba5745975446d60f2886d96f8d2adf0f2 (diff) | |
parent | d4a66166c002f0a49e41d856a49cb5685ac93202 (diff) |
Merge #1545
1545: migrate ra_syntax to the new rowan API r=matklad a=matklad
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ra_ide_api/src/completion/completion_context.rs')
-rw-r--r-- | crates/ra_ide_api/src/completion/completion_context.rs | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/crates/ra_ide_api/src/completion/completion_context.rs b/crates/ra_ide_api/src/completion/completion_context.rs index 4aa84751f..b803271ab 100644 --- a/crates/ra_ide_api/src/completion/completion_context.rs +++ b/crates/ra_ide_api/src/completion/completion_context.rs | |||
@@ -16,11 +16,11 @@ pub(crate) struct CompletionContext<'a> { | |||
16 | pub(super) db: &'a db::RootDatabase, | 16 | pub(super) db: &'a db::RootDatabase, |
17 | pub(super) analyzer: hir::SourceAnalyzer, | 17 | pub(super) analyzer: hir::SourceAnalyzer, |
18 | pub(super) offset: TextUnit, | 18 | pub(super) offset: TextUnit, |
19 | pub(super) token: SyntaxToken<'a>, | 19 | pub(super) token: SyntaxToken, |
20 | pub(super) module: Option<hir::Module>, | 20 | pub(super) module: Option<hir::Module>, |
21 | pub(super) function_syntax: Option<&'a ast::FnDef>, | 21 | pub(super) function_syntax: Option<ast::FnDef>, |
22 | pub(super) use_item_syntax: Option<&'a ast::UseItem>, | 22 | pub(super) use_item_syntax: Option<ast::UseItem>, |
23 | pub(super) struct_lit_syntax: Option<&'a ast::StructLit>, | 23 | pub(super) struct_lit_syntax: Option<ast::StructLit>, |
24 | pub(super) is_param: bool, | 24 | pub(super) is_param: bool, |
25 | /// If a name-binding or reference to a const in a pattern. | 25 | /// If a name-binding or reference to a const in a pattern. |
26 | /// Irrefutable patterns (like let) are excluded. | 26 | /// Irrefutable patterns (like let) are excluded. |
@@ -35,7 +35,7 @@ pub(crate) struct CompletionContext<'a> { | |||
35 | /// Something is typed at the "top" level, in module or impl/trait. | 35 | /// Something is typed at the "top" level, in module or impl/trait. |
36 | pub(super) is_new_item: bool, | 36 | pub(super) is_new_item: bool, |
37 | /// The receiver if this is a field or method access, i.e. writing something.<|> | 37 | /// The receiver if this is a field or method access, i.e. writing something.<|> |
38 | pub(super) dot_receiver: Option<&'a ast::Expr>, | 38 | pub(super) dot_receiver: Option<ast::Expr>, |
39 | /// If this is a call (method or function) in particular, i.e. the () are already there. | 39 | /// If this is a call (method or function) in particular, i.e. the () are already there. |
40 | pub(super) is_call: bool, | 40 | pub(super) is_call: bool, |
41 | } | 41 | } |
@@ -50,7 +50,7 @@ impl<'a> CompletionContext<'a> { | |||
50 | let token = | 50 | let token = |
51 | find_token_at_offset(original_parse.tree().syntax(), position.offset).left_biased()?; | 51 | find_token_at_offset(original_parse.tree().syntax(), position.offset).left_biased()?; |
52 | let analyzer = | 52 | let analyzer = |
53 | hir::SourceAnalyzer::new(db, position.file_id, token.parent(), Some(position.offset)); | 53 | hir::SourceAnalyzer::new(db, position.file_id, &token.parent(), Some(position.offset)); |
54 | let mut ctx = CompletionContext { | 54 | let mut ctx = CompletionContext { |
55 | db, | 55 | db, |
56 | analyzer, | 56 | analyzer, |
@@ -109,7 +109,7 @@ impl<'a> CompletionContext<'a> { | |||
109 | if is_node::<ast::BindPat>(name.syntax()) { | 109 | if is_node::<ast::BindPat>(name.syntax()) { |
110 | let bind_pat = name.syntax().ancestors().find_map(ast::BindPat::cast).unwrap(); | 110 | let bind_pat = name.syntax().ancestors().find_map(ast::BindPat::cast).unwrap(); |
111 | let parent = bind_pat.syntax().parent(); | 111 | let parent = bind_pat.syntax().parent(); |
112 | if parent.and_then(ast::MatchArm::cast).is_some() | 112 | if parent.clone().and_then(ast::MatchArm::cast).is_some() |
113 | || parent.and_then(ast::Condition::cast).is_some() | 113 | || parent.and_then(ast::Condition::cast).is_some() |
114 | { | 114 | { |
115 | self.is_pat_binding = true; | 115 | self.is_pat_binding = true; |
@@ -122,7 +122,7 @@ impl<'a> CompletionContext<'a> { | |||
122 | } | 122 | } |
123 | } | 123 | } |
124 | 124 | ||
125 | fn classify_name_ref(&mut self, original_file: &'a SourceFile, name_ref: &ast::NameRef) { | 125 | fn classify_name_ref(&mut self, original_file: SourceFile, name_ref: ast::NameRef) { |
126 | let name_range = name_ref.syntax().range(); | 126 | let name_range = name_ref.syntax().range(); |
127 | if name_ref.syntax().parent().and_then(ast::NamedField::cast).is_some() { | 127 | if name_ref.syntax().parent().and_then(ast::NamedField::cast).is_some() { |
128 | self.struct_lit_syntax = find_node_at_offset(original_file.syntax(), self.offset); | 128 | self.struct_lit_syntax = find_node_at_offset(original_file.syntax(), self.offset); |
@@ -153,7 +153,7 @@ impl<'a> CompletionContext<'a> { | |||
153 | None => return, | 153 | None => return, |
154 | }; | 154 | }; |
155 | 155 | ||
156 | if let Some(segment) = ast::PathSegment::cast(parent) { | 156 | if let Some(segment) = ast::PathSegment::cast(parent.clone()) { |
157 | let path = segment.parent_path(); | 157 | let path = segment.parent_path(); |
158 | self.is_call = path | 158 | self.is_call = path |
159 | .syntax() | 159 | .syntax() |
@@ -162,7 +162,7 @@ impl<'a> CompletionContext<'a> { | |||
162 | .and_then(|it| it.syntax().parent().and_then(ast::CallExpr::cast)) | 162 | .and_then(|it| it.syntax().parent().and_then(ast::CallExpr::cast)) |
163 | .is_some(); | 163 | .is_some(); |
164 | 164 | ||
165 | if let Some(mut path) = hir::Path::from_ast(path) { | 165 | if let Some(mut path) = hir::Path::from_ast(path.clone()) { |
166 | if !path.is_ident() { | 166 | if !path.is_ident() { |
167 | path.segments.pop().unwrap(); | 167 | path.segments.pop().unwrap(); |
168 | self.path_prefix = Some(path); | 168 | self.path_prefix = Some(path); |
@@ -179,7 +179,7 @@ impl<'a> CompletionContext<'a> { | |||
179 | .syntax() | 179 | .syntax() |
180 | .ancestors() | 180 | .ancestors() |
181 | .find_map(|node| { | 181 | .find_map(|node| { |
182 | if let Some(stmt) = ast::ExprStmt::cast(node) { | 182 | if let Some(stmt) = ast::ExprStmt::cast(node.clone()) { |
183 | return Some(stmt.syntax().range() == name_ref.syntax().range()); | 183 | return Some(stmt.syntax().range() == name_ref.syntax().range()); |
184 | } | 184 | } |
185 | if let Some(block) = ast::Block::cast(node) { | 185 | if let Some(block) = ast::Block::cast(node) { |
@@ -203,7 +203,7 @@ impl<'a> CompletionContext<'a> { | |||
203 | } | 203 | } |
204 | } | 204 | } |
205 | } | 205 | } |
206 | if let Some(field_expr) = ast::FieldExpr::cast(parent) { | 206 | if let Some(field_expr) = ast::FieldExpr::cast(parent.clone()) { |
207 | // The receiver comes before the point of insertion of the fake | 207 | // The receiver comes before the point of insertion of the fake |
208 | // ident, so it should have the same range in the non-modified file | 208 | // ident, so it should have the same range in the non-modified file |
209 | self.dot_receiver = field_expr | 209 | self.dot_receiver = field_expr |
@@ -222,7 +222,7 @@ impl<'a> CompletionContext<'a> { | |||
222 | } | 222 | } |
223 | } | 223 | } |
224 | 224 | ||
225 | fn find_node_with_range<N: AstNode>(syntax: &SyntaxNode, range: TextRange) -> Option<&N> { | 225 | fn find_node_with_range<N: AstNode>(syntax: &SyntaxNode, range: TextRange) -> Option<N> { |
226 | find_covering_element(syntax, range).ancestors().find_map(N::cast) | 226 | find_covering_element(syntax, range).ancestors().find_map(N::cast) |
227 | } | 227 | } |
228 | 228 | ||