@@ -19,6 +19,7 @@ pub struct StructureNode {
19
19
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
20
20
pub enum StructureNodeKind {
21
21
SymbolKind(SymbolKind),
22
+ ExternBlock,
22
23
Region,
23
24
}
24
25
@@ -158,6 +159,7 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> {
158
159
ast::Trait(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Trait)),
159
160
ast::TraitAlias(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::TraitAlias)),
160
161
ast::Module(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Module)),
162
+ ast::Macro(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Macro)),
161
163
ast::TypeAlias(it) => decl_with_type_ref(&it, it.ty(), StructureNodeKind::SymbolKind(SymbolKind::TypeAlias)),
162
164
ast::RecordField(it) => decl_with_type_ref(&it, it.ty(), StructureNodeKind::SymbolKind(SymbolKind::Field)),
163
165
ast::Const(it) => decl_with_type_ref(&it, it.ty(), StructureNodeKind::SymbolKind(SymbolKind::Const)),
@@ -205,7 +207,23 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> {
205
207
206
208
Some(node)
207
209
},
208
- ast::Macro(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Macro)),
210
+ ast::ExternBlock(it) => {
211
+ let mut label = "extern".to_owned();
212
+ let abi = it.abi()?;
213
+ if let Some(abi) = abi.string_token() {
214
+ label.push(' ');
215
+ label.push_str(abi.text());
216
+ }
217
+ Some(StructureNode {
218
+ parent: None,
219
+ label,
220
+ navigation_range: abi.syntax().text_range(),
221
+ node_range: it.syntax().text_range(),
222
+ kind: StructureNodeKind::ExternBlock,
223
+ detail: None,
224
+ deprecated: false,
225
+ })
226
+ },
209
227
_ => None,
210
228
}
211
229
}
@@ -327,6 +345,8 @@ fn f() {}
327
345
fn g() {}
328
346
}
329
347
348
+ extern "C" {}
349
+
330
350
fn let_statements() {
331
351
let x = 42;
332
352
let mut y = x;
@@ -662,11 +682,20 @@ fn let_statements() {
662
682
),
663
683
deprecated: false,
664
684
},
685
+ StructureNode {
686
+ parent: None,
687
+ label: "extern \"C\"",
688
+ navigation_range: 638..648,
689
+ node_range: 638..651,
690
+ kind: ExternBlock,
691
+ detail: None,
692
+ deprecated: false,
693
+ },
665
694
StructureNode {
666
695
parent: None,
667
696
label: "let_statements",
668
- navigation_range: 641..655 ,
669
- node_range: 638..798 ,
697
+ navigation_range: 656..670 ,
698
+ node_range: 653..813 ,
670
699
kind: SymbolKind(
671
700
Function,
672
701
),
@@ -677,11 +706,11 @@ fn let_statements() {
677
706
},
678
707
StructureNode {
679
708
parent: Some(
680
- 26 ,
709
+ 27 ,
681
710
),
682
711
label: "x",
683
- navigation_range: 668..669 ,
684
- node_range: 664..675 ,
712
+ navigation_range: 683..684 ,
713
+ node_range: 679..690 ,
685
714
kind: SymbolKind(
686
715
Local,
687
716
),
@@ -690,11 +719,11 @@ fn let_statements() {
690
719
},
691
720
StructureNode {
692
721
parent: Some(
693
- 26 ,
722
+ 27 ,
694
723
),
695
724
label: "mut y",
696
- navigation_range: 684..689 ,
697
- node_range: 680..694 ,
725
+ navigation_range: 699..704 ,
726
+ node_range: 695..709 ,
698
727
kind: SymbolKind(
699
728
Local,
700
729
),
@@ -703,11 +732,11 @@ fn let_statements() {
703
732
},
704
733
StructureNode {
705
734
parent: Some(
706
- 26 ,
735
+ 27 ,
707
736
),
708
737
label: "Foo { .. }",
709
- navigation_range: 703..725 ,
710
- node_range: 699..738 ,
738
+ navigation_range: 718..740 ,
739
+ node_range: 714..753 ,
711
740
kind: SymbolKind(
712
741
Local,
713
742
),
@@ -716,11 +745,11 @@ fn let_statements() {
716
745
},
717
746
StructureNode {
718
747
parent: Some(
719
- 26 ,
748
+ 27 ,
720
749
),
721
750
label: "_",
722
- navigation_range: 788..789 ,
723
- node_range: 784..796 ,
751
+ navigation_range: 803..804 ,
752
+ node_range: 799..811 ,
724
753
kind: SymbolKind(
725
754
Local,
726
755
),
0 commit comments