More symbols

This commit is contained in:
Aleksey Kladov 2018-08-11 16:20:37 +03:00
parent fe1fe866f3
commit 56aa6e20e0
7 changed files with 42 additions and 22 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
**/*.rs.bk
Cargo.lock
.vscode/*
*.log

View File

@ -63,5 +63,8 @@ fn to_symbol(node: SyntaxNodeRef) -> Option<FileSymbol> {
.visit(decl::<ast::Enum<_>>)
.visit(decl::<ast::Trait<_>>)
.visit(decl::<ast::Module<_>>)
.visit(decl::<ast::TypeItem<_>>)
.visit(decl::<ast::ConstItem<_>>)
.visit(decl::<ast::StaticItem<_>>)
.accept(node)?
}

View File

@ -70,6 +70,9 @@ mod m {
}
enum E { X, Y(i32) }
type T = ();
static S: i32 = 92;
const C: i32 = 92;
"#);
let symbols = file_symbols(&file);
dbg_eq(
@ -77,7 +80,10 @@ enum E { X, Y(i32) }
r#"[FileSymbol { parent: None, name: "Foo", name_range: [8; 11), node_range: [1; 26), kind: STRUCT },
FileSymbol { parent: None, name: "m", name_range: [32; 33), node_range: [28; 53), kind: MODULE },
FileSymbol { parent: Some(1), name: "bar", name_range: [43; 46), node_range: [40; 51), kind: FUNCTION },
FileSymbol { parent: None, name: "E", name_range: [60; 61), node_range: [55; 75), kind: ENUM }]"#,
FileSymbol { parent: None, name: "E", name_range: [60; 61), node_range: [55; 75), kind: ENUM },
FileSymbol { parent: None, name: "T", name_range: [81; 82), node_range: [76; 88), kind: TYPE_ITEM },
FileSymbol { parent: None, name: "S", name_range: [96; 97), node_range: [89; 108), kind: STATIC_ITEM },
FileSymbol { parent: None, name: "C", name_range: [115; 116), node_range: [109; 127), kind: CONST_ITEM }]"#,
)
}

View File

@ -180,3 +180,22 @@ impl<R: TreeRoot> AstNode<R> for Trait<R> {
impl<R: TreeRoot> ast::NameOwner<R> for Trait<R> {}
impl<R: TreeRoot> Trait<R> {}
// TypeItem
#[derive(Debug, Clone, Copy)]
pub struct TypeItem<R: TreeRoot = Arc<SyntaxRoot>> {
syntax: SyntaxNode<R>,
}
impl<R: TreeRoot> AstNode<R> for TypeItem<R> {
fn cast(syntax: SyntaxNode<R>) -> Option<Self> {
match syntax.kind() {
TYPE_ITEM => Some(TypeItem { syntax }),
_ => None,
}
}
fn syntax(&self) -> &SyntaxNode<R> { &self.syntax }
}
impl<R: TreeRoot> ast::NameOwner<R> for TypeItem<R> {}
impl<R: TreeRoot> TypeItem<R> {}

View File

@ -219,27 +219,14 @@ Grammar(
["functions", "Function"]
]
),
"Function": (
traits: ["NameOwner"]
),
"Struct": (
traits: ["NameOwner"]
),
"Enum": (
traits: ["NameOwner"]
),
"Trait": (
traits: ["NameOwner"]
),
"Module": (
traits: ["NameOwner"]
),
"ConstItem": (
traits: ["NameOwner"]
),
"StaticItem": (
traits: ["NameOwner"]
),
"Function": ( traits: ["NameOwner"] ),
"Struct": ( traits: ["NameOwner"] ),
"Enum": ( traits: ["NameOwner"] ),
"Trait": ( traits: ["NameOwner"] ),
"Module": ( traits: ["NameOwner"] ),
"ConstItem": ( traits: ["NameOwner"] ),
"StaticItem": ( traits: ["NameOwner"] ),
"TypeItem": ( traits: ["NameOwner"] ),
"Name": (),
},
)

View File

@ -74,6 +74,9 @@ fn to_symbol_kind(kind: SyntaxKind) -> SymbolKind {
SyntaxKind::ENUM => SymbolKind::Enum,
SyntaxKind::TRAIT => SymbolKind::Interface,
SyntaxKind::MODULE => SymbolKind::Module,
SyntaxKind::TYPE_ITEM => SymbolKind::TypeParameter,
SyntaxKind::STATIC_ITEM => SymbolKind::Constant,
SyntaxKind::CONST_ITEM => SymbolKind::Constant,
_ => SymbolKind::Variable,
}
}

View File

@ -188,6 +188,7 @@ fn existing_tests(dir: &Path) -> Result<HashMap<String, (PathBuf, Test)>> {
}
fn install_code_extension() -> Result<()> {
execute!(r"cargo install --path crates/server --force")?;
execute!(
r"
cd code