diff options
| author | Daniel Gavin <danielgavin5@hotmail.com> | 2021-04-22 22:10:19 +0200 |
|---|---|---|
| committer | Daniel Gavin <danielgavin5@hotmail.com> | 2021-04-22 22:10:19 +0200 |
| commit | 387574a93dfda1e9f66253eb1d0bdca1d63cb3a1 (patch) | |
| tree | 8b1479197bc3d95b376ec33bdd96fc502392f409 /src/server | |
| parent | 500322e6866bb46ffa405ef031f908594a23f643 (diff) | |
a bit work on semenatic tokens
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/requests.odin | 8 | ||||
| -rw-r--r-- | src/server/semantic_tokens.odin | 17 |
2 files changed, 21 insertions, 4 deletions
diff --git a/src/server/requests.odin b/src/server/requests.odin index c37173b..0b4f7a1 100644 --- a/src/server/requests.odin +++ b/src/server/requests.odin @@ -465,8 +465,9 @@ request_initialize :: proc (task: ^common.Task) { config.signature_offset_support = initialize_params.capabilities.textDocument.signatureHelp.signatureInformation.parameterInformation.labelOffsetSupport; - completionTriggerCharacters := []string {".", ">", "#", "\"", "/", ":"}; - signatureTriggerCharacters := []string {"("}; + completionTriggerCharacters := []string {".", ">", "#", "\"", "/", ":"}; + signatureTriggerCharacters := []string {"("}; + signatureRetriggerCharacters := []string {","}; token_type := type_info_of(SemanticTokenTypes).variant.(runtime.Type_Info_Named).base.variant.(runtime.Type_Info_Enum); token_modifier := type_info_of(SemanticTokenModifiers).variant.(runtime.Type_Info_Named).base.variant.(runtime.Type_Info_Enum); @@ -498,7 +499,8 @@ request_initialize :: proc (task: ^common.Task) { triggerCharacters = completionTriggerCharacters, }, signatureHelpProvider = SignatureHelpOptions { - triggerCharacters = signatureTriggerCharacters + triggerCharacters = signatureTriggerCharacters, + retriggerCharacters = signatureRetriggerCharacters, }, semanticTokensProvider = SemanticTokensOptions { range = false, diff --git a/src/server/semantic_tokens.odin b/src/server/semantic_tokens.odin index 6e71c35..318ef5b 100644 --- a/src/server/semantic_tokens.odin +++ b/src/server/semantic_tokens.odin @@ -101,6 +101,10 @@ get_semantic_tokens :: proc(document: ^Document, range: common.Range) -> Semanti get_globals(document.ast, &ast_context); + if document.ast.pkg_decl != nil { + write_semantic_token(&builder, document.ast.pkg_token, document.ast.src, .Keyword, .None); + } + for decl in document.ast.decls { if range.start.line <= decl.pos.line && decl.end.line <= range.end.line { write_semantic_tokens(decl, &builder, &ast_context); @@ -354,8 +358,19 @@ write_semantic_tokens_node :: proc(node: ^ast.Node, builder: ^SemanticTokenBuild write_semantic_token_pos(builder, n.tok_pos, "map", ast_context.file.src, .Keyword, .None); write_semantic_tokens(n.key, builder, ast_context); write_semantic_tokens(n.value, builder, ast_context); + case Defer_Stmt: + write_semantic_token_pos(builder, n.pos, "defer", ast_context.file.src, .Keyword, .None); + write_semantic_tokens(n.stmt, builder, ast_context); + case Import_Decl: + write_semantic_token(builder, n.import_tok, ast_context.file.src, .Keyword, .None); + + if n.name.text != "" { + write_semantic_token(builder, n.name, ast_context.file.src, .Namespace, .None); + } + + write_semantic_token(builder, n.relpath, ast_context.file.src, .String, .None); case: - log.infof("unhandled write node %v", n); + log.errorf("unhandled write node %v", n); } } |