diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2020-12-18 16:29:12 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2020-12-18 16:29:12 +0000 |
commit | 8be3f25b0bf77b547ba83c3eb9689a40d212a55b (patch) | |
tree | c29c3a31ea9e046d2767dfc189e0ab77b8ffdafe /crates/ide/src/file_structure.rs | |
parent | 03c177af89efcc238053b59069eda2c1c6772622 (diff) | |
parent | 55ba353b39db1e9d850f1df943ab6a16e7c15838 (diff) |
Merge #6930
6930: Don't expose SyntaxKind from IDE API r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'crates/ide/src/file_structure.rs')
-rw-r--r-- | crates/ide/src/file_structure.rs | 80 |
1 files changed, 42 insertions, 38 deletions
diff --git a/crates/ide/src/file_structure.rs b/crates/ide/src/file_structure.rs index c51531391..32556dad3 100644 --- a/crates/ide/src/file_structure.rs +++ b/crates/ide/src/file_structure.rs | |||
@@ -1,15 +1,17 @@ | |||
1 | use syntax::{ | 1 | use syntax::{ |
2 | ast::{self, AttrsOwner, GenericParamsOwner, NameOwner}, | 2 | ast::{self, AttrsOwner, GenericParamsOwner, NameOwner}, |
3 | match_ast, AstNode, SourceFile, SyntaxKind, SyntaxNode, TextRange, WalkEvent, | 3 | match_ast, AstNode, SourceFile, SyntaxNode, TextRange, WalkEvent, |
4 | }; | 4 | }; |
5 | 5 | ||
6 | use crate::SymbolKind; | ||
7 | |||
6 | #[derive(Debug, Clone)] | 8 | #[derive(Debug, Clone)] |
7 | pub struct StructureNode { | 9 | pub struct StructureNode { |
8 | pub parent: Option<usize>, | 10 | pub parent: Option<usize>, |
9 | pub label: String, | 11 | pub label: String, |
10 | pub navigation_range: TextRange, | 12 | pub navigation_range: TextRange, |
11 | pub node_range: TextRange, | 13 | pub node_range: TextRange, |
12 | pub kind: SyntaxKind, | 14 | pub kind: SymbolKind, |
13 | pub detail: Option<String>, | 15 | pub detail: Option<String>, |
14 | pub deprecated: bool, | 16 | pub deprecated: bool, |
15 | } | 17 | } |
@@ -51,25 +53,27 @@ pub(crate) fn file_structure(file: &SourceFile) -> Vec<StructureNode> { | |||
51 | } | 53 | } |
52 | 54 | ||
53 | fn structure_node(node: &SyntaxNode) -> Option<StructureNode> { | 55 | fn structure_node(node: &SyntaxNode) -> Option<StructureNode> { |
54 | fn decl<N: NameOwner + AttrsOwner>(node: N) -> Option<StructureNode> { | 56 | fn decl<N: NameOwner + AttrsOwner>(node: N, kind: SymbolKind) -> Option<StructureNode> { |
55 | decl_with_detail(&node, None) | 57 | decl_with_detail(&node, None, kind) |
56 | } | 58 | } |
57 | 59 | ||
58 | fn decl_with_type_ref<N: NameOwner + AttrsOwner>( | 60 | fn decl_with_type_ref<N: NameOwner + AttrsOwner>( |
59 | node: &N, | 61 | node: &N, |
60 | type_ref: Option<ast::Type>, | 62 | type_ref: Option<ast::Type>, |
63 | kind: SymbolKind, | ||
61 | ) -> Option<StructureNode> { | 64 | ) -> Option<StructureNode> { |
62 | let detail = type_ref.map(|type_ref| { | 65 | let detail = type_ref.map(|type_ref| { |
63 | let mut detail = String::new(); | 66 | let mut detail = String::new(); |
64 | collapse_ws(type_ref.syntax(), &mut detail); | 67 | collapse_ws(type_ref.syntax(), &mut detail); |
65 | detail | 68 | detail |
66 | }); | 69 | }); |
67 | decl_with_detail(node, detail) | 70 | decl_with_detail(node, detail, kind) |
68 | } | 71 | } |
69 | 72 | ||
70 | fn decl_with_detail<N: NameOwner + AttrsOwner>( | 73 | fn decl_with_detail<N: NameOwner + AttrsOwner>( |
71 | node: &N, | 74 | node: &N, |
72 | detail: Option<String>, | 75 | detail: Option<String>, |
76 | kind: SymbolKind, | ||
73 | ) -> Option<StructureNode> { | 77 | ) -> Option<StructureNode> { |
74 | let name = node.name()?; | 78 | let name = node.name()?; |
75 | 79 | ||
@@ -78,7 +82,7 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> { | |||
78 | label: name.text().to_string(), | 82 | label: name.text().to_string(), |
79 | navigation_range: name.syntax().text_range(), | 83 | navigation_range: name.syntax().text_range(), |
80 | node_range: node.syntax().text_range(), | 84 | node_range: node.syntax().text_range(), |
81 | kind: node.syntax().kind(), | 85 | kind, |
82 | detail, | 86 | detail, |
83 | deprecated: node.attrs().filter_map(|x| x.simple_name()).any(|x| x == "deprecated"), | 87 | deprecated: node.attrs().filter_map(|x| x.simple_name()).any(|x| x == "deprecated"), |
84 | }) | 88 | }) |
@@ -117,18 +121,18 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> { | |||
117 | collapse_ws(ret_type.syntax(), &mut detail); | 121 | collapse_ws(ret_type.syntax(), &mut detail); |
118 | } | 122 | } |
119 | 123 | ||
120 | decl_with_detail(&it, Some(detail)) | 124 | decl_with_detail(&it, Some(detail), SymbolKind::Function) |
121 | }, | 125 | }, |
122 | ast::Struct(it) => decl(it), | 126 | ast::Struct(it) => decl(it, SymbolKind::Struct), |
123 | ast::Union(it) => decl(it), | 127 | ast::Union(it) => decl(it, SymbolKind::Union), |
124 | ast::Enum(it) => decl(it), | 128 | ast::Enum(it) => decl(it, SymbolKind::Enum), |
125 | ast::Variant(it) => decl(it), | 129 | ast::Variant(it) => decl(it, SymbolKind::Variant), |
126 | ast::Trait(it) => decl(it), | 130 | ast::Trait(it) => decl(it, SymbolKind::Trait), |
127 | ast::Module(it) => decl(it), | 131 | ast::Module(it) => decl(it, SymbolKind::Module), |
128 | ast::TypeAlias(it) => decl_with_type_ref(&it, it.ty()), | 132 | ast::TypeAlias(it) => decl_with_type_ref(&it, it.ty(), SymbolKind::TypeAlias), |
129 | ast::RecordField(it) => decl_with_type_ref(&it, it.ty()), | 133 | ast::RecordField(it) => decl_with_type_ref(&it, it.ty(), SymbolKind::Field), |
130 | ast::Const(it) => decl_with_type_ref(&it, it.ty()), | 134 | ast::Const(it) => decl_with_type_ref(&it, it.ty(), SymbolKind::Const), |
131 | ast::Static(it) => decl_with_type_ref(&it, it.ty()), | 135 | ast::Static(it) => decl_with_type_ref(&it, it.ty(), SymbolKind::Static), |
132 | ast::Impl(it) => { | 136 | ast::Impl(it) => { |
133 | let target_type = it.self_ty()?; | 137 | let target_type = it.self_ty()?; |
134 | let target_trait = it.trait_(); | 138 | let target_trait = it.trait_(); |
@@ -144,13 +148,13 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> { | |||
144 | label, | 148 | label, |
145 | navigation_range: target_type.syntax().text_range(), | 149 | navigation_range: target_type.syntax().text_range(), |
146 | node_range: it.syntax().text_range(), | 150 | node_range: it.syntax().text_range(), |
147 | kind: it.syntax().kind(), | 151 | kind: SymbolKind::Impl, |
148 | detail: None, | 152 | detail: None, |
149 | deprecated: false, | 153 | deprecated: false, |
150 | }; | 154 | }; |
151 | Some(node) | 155 | Some(node) |
152 | }, | 156 | }, |
153 | ast::MacroRules(it) => decl(it), | 157 | ast::MacroRules(it) => decl(it, SymbolKind::Macro), |
154 | _ => None, | 158 | _ => None, |
155 | } | 159 | } |
156 | } | 160 | } |
@@ -222,7 +226,7 @@ fn very_obsolete() {} | |||
222 | label: "Foo", | 226 | label: "Foo", |
223 | navigation_range: 8..11, | 227 | navigation_range: 8..11, |
224 | node_range: 1..26, | 228 | node_range: 1..26, |
225 | kind: STRUCT, | 229 | kind: Struct, |
226 | detail: None, | 230 | detail: None, |
227 | deprecated: false, | 231 | deprecated: false, |
228 | }, | 232 | }, |
@@ -233,7 +237,7 @@ fn very_obsolete() {} | |||
233 | label: "x", | 237 | label: "x", |
234 | navigation_range: 18..19, | 238 | navigation_range: 18..19, |
235 | node_range: 18..24, | 239 | node_range: 18..24, |
236 | kind: RECORD_FIELD, | 240 | kind: Field, |
237 | detail: Some( | 241 | detail: Some( |
238 | "i32", | 242 | "i32", |
239 | ), | 243 | ), |
@@ -244,7 +248,7 @@ fn very_obsolete() {} | |||
244 | label: "m", | 248 | label: "m", |
245 | navigation_range: 32..33, | 249 | navigation_range: 32..33, |
246 | node_range: 28..158, | 250 | node_range: 28..158, |
247 | kind: MODULE, | 251 | kind: Module, |
248 | detail: None, | 252 | detail: None, |
249 | deprecated: false, | 253 | deprecated: false, |
250 | }, | 254 | }, |
@@ -255,7 +259,7 @@ fn very_obsolete() {} | |||
255 | label: "bar1", | 259 | label: "bar1", |
256 | navigation_range: 43..47, | 260 | navigation_range: 43..47, |
257 | node_range: 40..52, | 261 | node_range: 40..52, |
258 | kind: FN, | 262 | kind: Function, |
259 | detail: Some( | 263 | detail: Some( |
260 | "fn()", | 264 | "fn()", |
261 | ), | 265 | ), |
@@ -268,7 +272,7 @@ fn very_obsolete() {} | |||
268 | label: "bar2", | 272 | label: "bar2", |
269 | navigation_range: 60..64, | 273 | navigation_range: 60..64, |
270 | node_range: 57..81, | 274 | node_range: 57..81, |
271 | kind: FN, | 275 | kind: Function, |
272 | detail: Some( | 276 | detail: Some( |
273 | "fn<T>(t: T) -> T", | 277 | "fn<T>(t: T) -> T", |
274 | ), | 278 | ), |
@@ -281,7 +285,7 @@ fn very_obsolete() {} | |||
281 | label: "bar3", | 285 | label: "bar3", |
282 | navigation_range: 89..93, | 286 | navigation_range: 89..93, |
283 | node_range: 86..156, | 287 | node_range: 86..156, |
284 | kind: FN, | 288 | kind: Function, |
285 | detail: Some( | 289 | detail: Some( |
286 | "fn<A, B>(a: A, b: B) -> Vec< u32 >", | 290 | "fn<A, B>(a: A, b: B) -> Vec< u32 >", |
287 | ), | 291 | ), |
@@ -292,7 +296,7 @@ fn very_obsolete() {} | |||
292 | label: "E", | 296 | label: "E", |
293 | navigation_range: 165..166, | 297 | navigation_range: 165..166, |
294 | node_range: 160..180, | 298 | node_range: 160..180, |
295 | kind: ENUM, | 299 | kind: Enum, |
296 | detail: None, | 300 | detail: None, |
297 | deprecated: false, | 301 | deprecated: false, |
298 | }, | 302 | }, |
@@ -303,7 +307,7 @@ fn very_obsolete() {} | |||
303 | label: "X", | 307 | label: "X", |
304 | navigation_range: 169..170, | 308 | navigation_range: 169..170, |
305 | node_range: 169..170, | 309 | node_range: 169..170, |
306 | kind: VARIANT, | 310 | kind: Variant, |
307 | detail: None, | 311 | detail: None, |
308 | deprecated: false, | 312 | deprecated: false, |
309 | }, | 313 | }, |
@@ -314,7 +318,7 @@ fn very_obsolete() {} | |||
314 | label: "Y", | 318 | label: "Y", |
315 | navigation_range: 172..173, | 319 | navigation_range: 172..173, |
316 | node_range: 172..178, | 320 | node_range: 172..178, |
317 | kind: VARIANT, | 321 | kind: Variant, |
318 | detail: None, | 322 | detail: None, |
319 | deprecated: false, | 323 | deprecated: false, |
320 | }, | 324 | }, |
@@ -323,7 +327,7 @@ fn very_obsolete() {} | |||
323 | label: "T", | 327 | label: "T", |
324 | navigation_range: 186..187, | 328 | navigation_range: 186..187, |
325 | node_range: 181..193, | 329 | node_range: 181..193, |
326 | kind: TYPE_ALIAS, | 330 | kind: TypeAlias, |
327 | detail: Some( | 331 | detail: Some( |
328 | "()", | 332 | "()", |
329 | ), | 333 | ), |
@@ -334,7 +338,7 @@ fn very_obsolete() {} | |||
334 | label: "S", | 338 | label: "S", |
335 | navigation_range: 201..202, | 339 | navigation_range: 201..202, |
336 | node_range: 194..213, | 340 | node_range: 194..213, |
337 | kind: STATIC, | 341 | kind: Static, |
338 | detail: Some( | 342 | detail: Some( |
339 | "i32", | 343 | "i32", |
340 | ), | 344 | ), |
@@ -345,7 +349,7 @@ fn very_obsolete() {} | |||
345 | label: "C", | 349 | label: "C", |
346 | navigation_range: 220..221, | 350 | navigation_range: 220..221, |
347 | node_range: 214..232, | 351 | node_range: 214..232, |
348 | kind: CONST, | 352 | kind: Const, |
349 | detail: Some( | 353 | detail: Some( |
350 | "i32", | 354 | "i32", |
351 | ), | 355 | ), |
@@ -356,7 +360,7 @@ fn very_obsolete() {} | |||
356 | label: "impl E", | 360 | label: "impl E", |
357 | navigation_range: 239..240, | 361 | navigation_range: 239..240, |
358 | node_range: 234..243, | 362 | node_range: 234..243, |
359 | kind: IMPL, | 363 | kind: Impl, |
360 | detail: None, | 364 | detail: None, |
361 | deprecated: false, | 365 | deprecated: false, |
362 | }, | 366 | }, |
@@ -365,7 +369,7 @@ fn very_obsolete() {} | |||
365 | label: "impl fmt::Debug for E", | 369 | label: "impl fmt::Debug for E", |
366 | navigation_range: 265..266, | 370 | navigation_range: 265..266, |
367 | node_range: 245..269, | 371 | node_range: 245..269, |
368 | kind: IMPL, | 372 | kind: Impl, |
369 | detail: None, | 373 | detail: None, |
370 | deprecated: false, | 374 | deprecated: false, |
371 | }, | 375 | }, |
@@ -374,7 +378,7 @@ fn very_obsolete() {} | |||
374 | label: "mc", | 378 | label: "mc", |
375 | navigation_range: 284..286, | 379 | navigation_range: 284..286, |
376 | node_range: 271..303, | 380 | node_range: 271..303, |
377 | kind: MACRO_RULES, | 381 | kind: Macro, |
378 | detail: None, | 382 | detail: None, |
379 | deprecated: false, | 383 | deprecated: false, |
380 | }, | 384 | }, |
@@ -383,7 +387,7 @@ fn very_obsolete() {} | |||
383 | label: "mcexp", | 387 | label: "mcexp", |
384 | navigation_range: 334..339, | 388 | navigation_range: 334..339, |
385 | node_range: 305..356, | 389 | node_range: 305..356, |
386 | kind: MACRO_RULES, | 390 | kind: Macro, |
387 | detail: None, | 391 | detail: None, |
388 | deprecated: false, | 392 | deprecated: false, |
389 | }, | 393 | }, |
@@ -392,7 +396,7 @@ fn very_obsolete() {} | |||
392 | label: "mcexp", | 396 | label: "mcexp", |
393 | navigation_range: 387..392, | 397 | navigation_range: 387..392, |
394 | node_range: 358..409, | 398 | node_range: 358..409, |
395 | kind: MACRO_RULES, | 399 | kind: Macro, |
396 | detail: None, | 400 | detail: None, |
397 | deprecated: false, | 401 | deprecated: false, |
398 | }, | 402 | }, |
@@ -401,7 +405,7 @@ fn very_obsolete() {} | |||
401 | label: "obsolete", | 405 | label: "obsolete", |
402 | navigation_range: 428..436, | 406 | navigation_range: 428..436, |
403 | node_range: 411..441, | 407 | node_range: 411..441, |
404 | kind: FN, | 408 | kind: Function, |
405 | detail: Some( | 409 | detail: Some( |
406 | "fn()", | 410 | "fn()", |
407 | ), | 411 | ), |
@@ -412,7 +416,7 @@ fn very_obsolete() {} | |||
412 | label: "very_obsolete", | 416 | label: "very_obsolete", |
413 | navigation_range: 481..494, | 417 | navigation_range: 481..494, |
414 | node_range: 443..499, | 418 | node_range: 443..499, |
415 | kind: FN, | 419 | kind: Function, |
416 | detail: Some( | 420 | detail: Some( |
417 | "fn()", | 421 | "fn()", |
418 | ), | 422 | ), |