aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorDaniel Gavin <danielgavin5@hotmail.com>2021-04-22 22:10:19 +0200
committerDaniel Gavin <danielgavin5@hotmail.com>2021-04-22 22:10:19 +0200
commit387574a93dfda1e9f66253eb1d0bdca1d63cb3a1 (patch)
tree8b1479197bc3d95b376ec33bdd96fc502392f409 /src/server
parent500322e6866bb46ffa405ef031f908594a23f643 (diff)
a bit work on semenatic tokens
Diffstat (limited to 'src/server')
-rw-r--r--src/server/requests.odin8
-rw-r--r--src/server/semantic_tokens.odin17
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);
}
}