@@ -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