aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorDaniel Gavin <danielgavin5@hotmail.com>2022-03-14 01:02:43 +0100
committerDaniel Gavin <danielgavin5@hotmail.com>2022-03-14 01:02:43 +0100
commit06562b8ff7d3d4ad3bb22b66eef8c8111fe243da (patch)
treec292c2437a7afba8defef0da57019642e376ab28 /src/server
parente2780708f9a590a62882d1316997dc2248b3e9b1 (diff)
Fix comp_lit error and start work on magic completion
Diffstat (limited to 'src/server')
-rw-r--r--src/server/completion.odin57
-rw-r--r--src/server/requests.odin2
-rw-r--r--src/server/semantic_tokens.odin2
3 files changed, 42 insertions, 19 deletions
diff --git a/src/server/completion.odin b/src/server/completion.odin
index f7ce075..8d6d93a 100644
--- a/src/server/completion.odin
+++ b/src/server/completion.odin
@@ -350,7 +350,7 @@ get_selector_completion :: proc(ast_context: ^analysis.AstContext, position_cont
case index.SymbolUnionValue:
list.isIncomplete = false
- //append_magic_union_completion(position_context, selector, &items)
+ append_magic_union_completion(position_context, selector, &items)
for type in v.types {
if symbol, ok := resolve_type_expression(ast_context, type); ok {
@@ -459,7 +459,7 @@ get_selector_completion :: proc(ast_context: ^analysis.AstContext, position_cont
}
case index.SymbolDynamicArrayValue:
list.isIncomplete = false
- //append_magic_dynamic_array_completion(position_context, selector, &items)
+ append_magic_dynamic_array_completion(position_context, selector, &items)
}
list.items = items[:]
@@ -1233,13 +1233,24 @@ get_range_from_selection_start_to_dot :: proc(position_context: ^analysis.Docume
}
append_magic_dynamic_array_completion :: proc(position_context: ^analysis.DocumentPositionContext, symbol: index.Symbol, items: ^[dynamic]CompletionItem) {
-
range, ok := get_range_from_selection_start_to_dot(position_context)
if !ok {
return
}
-
+
+ remove_range := common.Range {
+ start = range.start,
+ end = range.end,
+ }
+
+ remove_edit := TextEdit {
+ range = remove_range,
+ newText = "",
+ }
+
+ additionalTextEdits := make([]TextEdit, 1, context.temp_allocator)
+ additionalTextEdits[0] = remove_edit
//len
{
@@ -1252,23 +1263,13 @@ append_magic_dynamic_array_completion :: proc(position_context: ^analysis.Docume
textEdit = TextEdit {
newText = text,
range = {
- start = range.start,
+ start = range.end,
end = range.end,
},
},
+ additionalTextEdits = additionalTextEdits,
}
- log.error(item)
- append(items, item)
- }
- //append
- {
- item := CompletionItem {
- label = "append",
- kind = .Function,
- detail = "append",
- insertText = fmt.tprintf("append(%v)$0", symbol.name),
- }
append(items, item)
}
@@ -1281,15 +1282,37 @@ append_magic_union_completion :: proc(position_context: ^analysis.DocumentPositi
return
}
+ remove_range := common.Range {
+ start = range.start,
+ end = range.end,
+ }
+
+ remove_edit := TextEdit {
+ range = remove_range,
+ newText = "",
+ }
+
+ additionalTextEdits := make([]TextEdit, 1, context.temp_allocator)
+ additionalTextEdits[0] = remove_edit
+
//switch
{
item := CompletionItem {
label = "switch",
kind = .Snippet,
detail = "switch",
- insertText = fmt.tprintf("len(%v)$0", symbol.name),
+ additionalTextEdits = additionalTextEdits,
+ textEdit = TextEdit {
+ newText = fmt.tprintf("switch v in %v {{\n\t$0 \n}}", symbol.name),
+ range = {
+ start = range.end,
+ end = range.end,
+ },
+ },
insertTextFormat = .Snippet,
+ InsertTextMode = .adjustIndentation,
}
+
append(items, item)
}
diff --git a/src/server/requests.odin b/src/server/requests.odin
index 49636dc..0c63e46 100644
--- a/src/server/requests.odin
+++ b/src/server/requests.odin
@@ -624,7 +624,7 @@ request_completion :: proc (params: json.Value, id: RequestId, config: ^common.C
if document == nil {
return .InternalError
}
- log.error(completition_params.position)
+
list: CompletionList
list, ok = get_completion_list(document, completition_params.position, completition_params.context_)
diff --git a/src/server/semantic_tokens.odin b/src/server/semantic_tokens.odin
index bd89bb3..98f534b 100644
--- a/src/server/semantic_tokens.odin
+++ b/src/server/semantic_tokens.odin
@@ -218,7 +218,7 @@ visit_node :: proc(node: ^ast.Node, builder: ^SemanticTokenBuilder, ast_context:
case ^Expr_Stmt:
visit(n.expr, builder, ast_context)
case ^Branch_Stmt:
- write_semantic_token(builder, n.tok, ast_context.file.src, .Type, .None)
+ write_semantic_token(builder, n.tok, ast_context.file.src, .Keyword, .None)
case ^Poly_Type:
write_semantic_string(builder, n.dollar, "$", ast_context.file.src, .Operator, .None)
visit(n.type, builder, ast_context)