diff options
| author | Daniel Gavin <danielgavin5@hotmail.com> | 2022-03-14 01:02:43 +0100 |
|---|---|---|
| committer | Daniel Gavin <danielgavin5@hotmail.com> | 2022-03-14 01:02:43 +0100 |
| commit | 06562b8ff7d3d4ad3bb22b66eef8c8111fe243da (patch) | |
| tree | c292c2437a7afba8defef0da57019642e376ab28 /src/server | |
| parent | e2780708f9a590a62882d1316997dc2248b3e9b1 (diff) | |
Fix comp_lit error and start work on magic completion
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/completion.odin | 57 | ||||
| -rw-r--r-- | src/server/requests.odin | 2 | ||||
| -rw-r--r-- | src/server/semantic_tokens.odin | 2 |
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) |