diff options
| author | Daniel Gavin <danielgavin5@hotmail.com> | 2022-03-04 12:17:00 +0100 |
|---|---|---|
| committer | Daniel Gavin <danielgavin5@hotmail.com> | 2022-03-04 12:17:00 +0100 |
| commit | 58287455d64ab16091522bf8a358b079ef05daad (patch) | |
| tree | 7b6655d6d34b5ad6d719523e4938b8002c43d8ab /src/server/document_symbols.odin | |
| parent | 63d0bd412a8817445d6dc18e79d5d54c94caf401 (diff) | |
strip colons and update ast to use unions
Diffstat (limited to 'src/server/document_symbols.odin')
| -rw-r--r-- | src/server/document_symbols.odin | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/src/server/document_symbols.odin b/src/server/document_symbols.odin index 7105465..667b94a 100644 --- a/src/server/document_symbols.odin +++ b/src/server/document_symbols.odin @@ -21,22 +21,22 @@ import "shared:analysis" get_document_symbols :: proc(document: ^common.Document) -> []DocumentSymbol { - using analysis; + using analysis - ast_context := make_ast_context(document.ast, document.imports, document.package_name, document.uri.uri); + ast_context := make_ast_context(document.ast, document.imports, document.package_name, document.uri.uri) - get_globals(document.ast, &ast_context); + get_globals(document.ast, &ast_context) - symbols := make([dynamic]DocumentSymbol, context.temp_allocator); + symbols := make([dynamic]DocumentSymbol, context.temp_allocator) - package_symbol: DocumentSymbol; + package_symbol: DocumentSymbol if len(document.ast.decls) == 0 { - return {}; + return {} } - package_symbol.kind = .Package; - package_symbol.name = path.base(document.package_name, false, context.temp_allocator); + package_symbol.kind = .Package + package_symbol.name = path.base(document.package_name, false, context.temp_allocator) package_symbol.range = { start = { line = document.ast.decls[0].pos.line, @@ -44,35 +44,35 @@ get_document_symbols :: proc(document: ^common.Document) -> []DocumentSymbol { end = { line = document.ast.decls[len(document.ast.decls) - 1].end.line, }, - }; - package_symbol.selectionRange = package_symbol.range; + } + package_symbol.selectionRange = package_symbol.range - children_symbols := make([dynamic]DocumentSymbol, context.temp_allocator); + children_symbols := make([dynamic]DocumentSymbol, context.temp_allocator) for k, global in ast_context.globals { - symbol: DocumentSymbol; - symbol.range = common.get_token_range(global.expr, ast_context.file.src); - symbol.selectionRange = symbol.range; - symbol.name = k; - - switch v in global.expr.derived { - case ast.Struct_Type: - symbol.kind = .Struct; - case ast.Proc_Lit, ast.Proc_Group: - symbol.kind = .Function; - case ast.Enum_Type, ast.Union_Type: - symbol.kind = .Enum; + symbol: DocumentSymbol + symbol.range = common.get_token_range(global.expr, ast_context.file.src) + symbol.selectionRange = symbol.range + symbol.name = k + + #partial switch v in global.expr.derived { + case ^ast.Struct_Type: + symbol.kind = .Struct + case ^ast.Proc_Lit, ^ast.Proc_Group: + symbol.kind = .Function + case ^ast.Enum_Type, ^ast.Union_Type: + symbol.kind = .Enum case: - symbol.kind = .Variable; + symbol.kind = .Variable } - append(&children_symbols, symbol); + append(&children_symbols, symbol) } - package_symbol.children = children_symbols[:]; + package_symbol.children = children_symbols[:] - append(&symbols, package_symbol); + append(&symbols, package_symbol) - return symbols[:]; + return symbols[:] } |