mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
Merge pull request #18473 from Veykril/push-xnlzukoqttvz
Render extern blocks in `file_structure`
This commit is contained in:
commit
9ad98df61d
@ -19,6 +19,7 @@ pub struct StructureNode {
|
|||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
|
||||||
pub enum StructureNodeKind {
|
pub enum StructureNodeKind {
|
||||||
SymbolKind(SymbolKind),
|
SymbolKind(SymbolKind),
|
||||||
|
ExternBlock,
|
||||||
Region,
|
Region,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,6 +159,7 @@ fn structure_node(node: &SyntaxNode) -> Option<StructureNode> {
|
|||||||
ast::Trait(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Trait)),
|
ast::Trait(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Trait)),
|
||||||
ast::TraitAlias(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::TraitAlias)),
|
ast::TraitAlias(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::TraitAlias)),
|
||||||
ast::Module(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Module)),
|
ast::Module(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Module)),
|
||||||
|
ast::Macro(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Macro)),
|
||||||
ast::TypeAlias(it) => decl_with_type_ref(&it, it.ty(), StructureNodeKind::SymbolKind(SymbolKind::TypeAlias)),
|
ast::TypeAlias(it) => decl_with_type_ref(&it, it.ty(), StructureNodeKind::SymbolKind(SymbolKind::TypeAlias)),
|
||||||
ast::RecordField(it) => decl_with_type_ref(&it, it.ty(), StructureNodeKind::SymbolKind(SymbolKind::Field)),
|
ast::RecordField(it) => decl_with_type_ref(&it, it.ty(), StructureNodeKind::SymbolKind(SymbolKind::Field)),
|
||||||
ast::Const(it) => decl_with_type_ref(&it, it.ty(), StructureNodeKind::SymbolKind(SymbolKind::Const)),
|
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> {
|
|||||||
|
|
||||||
Some(node)
|
Some(node)
|
||||||
},
|
},
|
||||||
ast::Macro(it) => decl(it, StructureNodeKind::SymbolKind(SymbolKind::Macro)),
|
ast::ExternBlock(it) => {
|
||||||
|
let mut label = "extern".to_owned();
|
||||||
|
let abi = it.abi()?;
|
||||||
|
if let Some(abi) = abi.string_token() {
|
||||||
|
label.push(' ');
|
||||||
|
label.push_str(abi.text());
|
||||||
|
}
|
||||||
|
Some(StructureNode {
|
||||||
|
parent: None,
|
||||||
|
label,
|
||||||
|
navigation_range: abi.syntax().text_range(),
|
||||||
|
node_range: it.syntax().text_range(),
|
||||||
|
kind: StructureNodeKind::ExternBlock,
|
||||||
|
detail: None,
|
||||||
|
deprecated: false,
|
||||||
|
})
|
||||||
|
},
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -327,6 +345,8 @@ fn f() {}
|
|||||||
fn g() {}
|
fn g() {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" {}
|
||||||
|
|
||||||
fn let_statements() {
|
fn let_statements() {
|
||||||
let x = 42;
|
let x = 42;
|
||||||
let mut y = x;
|
let mut y = x;
|
||||||
@ -662,11 +682,20 @@ fn let_statements() {
|
|||||||
),
|
),
|
||||||
deprecated: false,
|
deprecated: false,
|
||||||
},
|
},
|
||||||
|
StructureNode {
|
||||||
|
parent: None,
|
||||||
|
label: "extern \"C\"",
|
||||||
|
navigation_range: 638..648,
|
||||||
|
node_range: 638..651,
|
||||||
|
kind: ExternBlock,
|
||||||
|
detail: None,
|
||||||
|
deprecated: false,
|
||||||
|
},
|
||||||
StructureNode {
|
StructureNode {
|
||||||
parent: None,
|
parent: None,
|
||||||
label: "let_statements",
|
label: "let_statements",
|
||||||
navigation_range: 641..655,
|
navigation_range: 656..670,
|
||||||
node_range: 638..798,
|
node_range: 653..813,
|
||||||
kind: SymbolKind(
|
kind: SymbolKind(
|
||||||
Function,
|
Function,
|
||||||
),
|
),
|
||||||
@ -677,11 +706,11 @@ fn let_statements() {
|
|||||||
},
|
},
|
||||||
StructureNode {
|
StructureNode {
|
||||||
parent: Some(
|
parent: Some(
|
||||||
26,
|
27,
|
||||||
),
|
),
|
||||||
label: "x",
|
label: "x",
|
||||||
navigation_range: 668..669,
|
navigation_range: 683..684,
|
||||||
node_range: 664..675,
|
node_range: 679..690,
|
||||||
kind: SymbolKind(
|
kind: SymbolKind(
|
||||||
Local,
|
Local,
|
||||||
),
|
),
|
||||||
@ -690,11 +719,11 @@ fn let_statements() {
|
|||||||
},
|
},
|
||||||
StructureNode {
|
StructureNode {
|
||||||
parent: Some(
|
parent: Some(
|
||||||
26,
|
27,
|
||||||
),
|
),
|
||||||
label: "mut y",
|
label: "mut y",
|
||||||
navigation_range: 684..689,
|
navigation_range: 699..704,
|
||||||
node_range: 680..694,
|
node_range: 695..709,
|
||||||
kind: SymbolKind(
|
kind: SymbolKind(
|
||||||
Local,
|
Local,
|
||||||
),
|
),
|
||||||
@ -703,11 +732,11 @@ fn let_statements() {
|
|||||||
},
|
},
|
||||||
StructureNode {
|
StructureNode {
|
||||||
parent: Some(
|
parent: Some(
|
||||||
26,
|
27,
|
||||||
),
|
),
|
||||||
label: "Foo { .. }",
|
label: "Foo { .. }",
|
||||||
navigation_range: 703..725,
|
navigation_range: 718..740,
|
||||||
node_range: 699..738,
|
node_range: 714..753,
|
||||||
kind: SymbolKind(
|
kind: SymbolKind(
|
||||||
Local,
|
Local,
|
||||||
),
|
),
|
||||||
@ -716,11 +745,11 @@ fn let_statements() {
|
|||||||
},
|
},
|
||||||
StructureNode {
|
StructureNode {
|
||||||
parent: Some(
|
parent: Some(
|
||||||
26,
|
27,
|
||||||
),
|
),
|
||||||
label: "_",
|
label: "_",
|
||||||
navigation_range: 788..789,
|
navigation_range: 803..804,
|
||||||
node_range: 784..796,
|
node_range: 799..811,
|
||||||
kind: SymbolKind(
|
kind: SymbolKind(
|
||||||
Local,
|
Local,
|
||||||
),
|
),
|
||||||
|
@ -88,6 +88,7 @@ pub(crate) fn structure_node_kind(kind: StructureNodeKind) -> lsp_types::SymbolK
|
|||||||
match kind {
|
match kind {
|
||||||
StructureNodeKind::SymbolKind(symbol) => symbol_kind(symbol),
|
StructureNodeKind::SymbolKind(symbol) => symbol_kind(symbol),
|
||||||
StructureNodeKind::Region => lsp_types::SymbolKind::NAMESPACE,
|
StructureNodeKind::Region => lsp_types::SymbolKind::NAMESPACE,
|
||||||
|
StructureNodeKind::ExternBlock => lsp_types::SymbolKind::NAMESPACE,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user