@@ -19,6 +19,7 @@ pub struct StructureNode {
1919#[ derive( Debug , Clone , Copy , PartialEq , Eq , Hash , PartialOrd , Ord ) ]
2020pub enum StructureNodeKind {
2121 SymbolKind ( SymbolKind ) ,
22+ ExternBlock ,
2223 Region ,
2324}
2425
@@ -158,6 +159,7 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> {
158159 ast:: Trait ( it) => decl( it, StructureNodeKind :: SymbolKind ( SymbolKind :: Trait ) ) ,
159160 ast:: TraitAlias ( it) => decl( it, StructureNodeKind :: SymbolKind ( SymbolKind :: TraitAlias ) ) ,
160161 ast:: Module ( it) => decl( it, StructureNodeKind :: SymbolKind ( SymbolKind :: Module ) ) ,
162+ ast:: Macro ( it) => decl( it, StructureNodeKind :: SymbolKind ( SymbolKind :: Macro ) ) ,
161163 ast:: TypeAlias ( it) => decl_with_type_ref( & it, it. ty( ) , StructureNodeKind :: SymbolKind ( SymbolKind :: TypeAlias ) ) ,
162164 ast:: RecordField ( it) => decl_with_type_ref( & it, it. ty( ) , StructureNodeKind :: SymbolKind ( SymbolKind :: Field ) ) ,
163165 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> {
205207
206208 Some ( node)
207209 } ,
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+ } ,
209227 _ => None ,
210228 }
211229 }
@@ -327,6 +345,8 @@ fn f() {}
327345fn g() {}
328346}
329347
348+ extern "C" {}
349+
330350fn let_statements() {
331351 let x = 42;
332352 let mut y = x;
@@ -662,11 +682,20 @@ fn let_statements() {
662682 ),
663683 deprecated: false,
664684 },
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+ },
665694 StructureNode {
666695 parent: None,
667696 label: "let_statements",
668- navigation_range: 641..655 ,
669- node_range: 638..798 ,
697+ navigation_range: 656..670 ,
698+ node_range: 653..813 ,
670699 kind: SymbolKind(
671700 Function,
672701 ),
@@ -677,11 +706,11 @@ fn let_statements() {
677706 },
678707 StructureNode {
679708 parent: Some(
680- 26 ,
709+ 27 ,
681710 ),
682711 label: "x",
683- navigation_range: 668..669 ,
684- node_range: 664..675 ,
712+ navigation_range: 683..684 ,
713+ node_range: 679..690 ,
685714 kind: SymbolKind(
686715 Local,
687716 ),
@@ -690,11 +719,11 @@ fn let_statements() {
690719 },
691720 StructureNode {
692721 parent: Some(
693- 26 ,
722+ 27 ,
694723 ),
695724 label: "mut y",
696- navigation_range: 684..689 ,
697- node_range: 680..694 ,
725+ navigation_range: 699..704 ,
726+ node_range: 695..709 ,
698727 kind: SymbolKind(
699728 Local,
700729 ),
@@ -703,11 +732,11 @@ fn let_statements() {
703732 },
704733 StructureNode {
705734 parent: Some(
706- 26 ,
735+ 27 ,
707736 ),
708737 label: "Foo { .. }",
709- navigation_range: 703..725 ,
710- node_range: 699..738 ,
738+ navigation_range: 718..740 ,
739+ node_range: 714..753 ,
711740 kind: SymbolKind(
712741 Local,
713742 ),
@@ -716,11 +745,11 @@ fn let_statements() {
716745 },
717746 StructureNode {
718747 parent: Some(
719- 26 ,
748+ 27 ,
720749 ),
721750 label: "_",
722- navigation_range: 788..789 ,
723- node_range: 784..796 ,
751+ navigation_range: 803..804 ,
752+ node_range: 799..811 ,
724753 kind: SymbolKind(
725754 Local,
726755 ),
0 commit comments