From bd25738e319420f126b6c54e21744443ac4bf287 Mon Sep 17 00:00:00 2001 From: Daniel Gavin Date: Thu, 27 Oct 2022 13:33:12 +0200 Subject: show pointer information in signature --- src/server/analysis.odin | 21 +++++++++++++++++---- tests/completions_test.odin | 17 +++++++++++++++-- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/server/analysis.odin b/src/server/analysis.odin index 7050471..52a05f0 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -3828,9 +3828,20 @@ get_signature :: proc( is_variable := symbol.type == .Variable + + pointer_prefix := common.repeat( + "^", + symbol.pointers, + context.temp_allocator, + ) + + #partial switch v in symbol.value { case SymbolBasicValue: - return common.node_to_string(v.ident) + return strings.concatenate( + {pointer_prefix, common.node_to_string(v.ident)}, + ast_context.allocator, + ) case SymbolBitSetValue: return common.node_to_string(v.expr) case SymbolEnumValue: @@ -3842,6 +3853,7 @@ get_signature :: proc( case SymbolMapValue: return strings.concatenate( a = { + pointer_prefix, "map[", common.node_to_string(v.key), "]", @@ -3865,22 +3877,23 @@ get_signature :: proc( } case SymbolMultiPointer: return strings.concatenate( - a = {"[^]", common.node_to_string(v.expr)}, + a = {pointer_prefix, "[^]", common.node_to_string(v.expr)}, allocator = ast_context.allocator, ) case SymbolDynamicArrayValue: return strings.concatenate( - a = {"[dynamic]", common.node_to_string(v.expr)}, + a = {pointer_prefix, "[dynamic]", common.node_to_string(v.expr)}, allocator = ast_context.allocator, ) case SymbolSliceValue: return strings.concatenate( - a = {"[]", common.node_to_string(v.expr)}, + a = {pointer_prefix, "[]", common.node_to_string(v.expr)}, allocator = ast_context.allocator, ) case SymbolFixedArrayValue: return strings.concatenate( a = { + pointer_prefix, "[", common.node_to_string(v.len), "]", diff --git a/tests/completions_test.odin b/tests/completions_test.odin index 46364ff..ef05a9f 100644 --- a/tests/completions_test.odin +++ b/tests/completions_test.odin @@ -1934,8 +1934,6 @@ ast_union_with_type_from_different_package :: proc(t: ^testing.T) { ast_completion_union_with_typeid :: proc(t: ^testing.T) { source := test.Source { main = `package main - import "my_package" - Maybe :: union($T: typeid) {T} main :: proc() { @@ -1947,3 +1945,18 @@ ast_completion_union_with_typeid :: proc(t: ^testing.T) { test.expect_completion_labels(t, &source, ".", {"(typeid)"}) } + +@(test) +ast_completion_with_pointer :: proc(t: ^testing.T) { + source := test.Source { + main = `package main + + main :: proc() { + my_pointer: ^int + my_p* + } + `, + } + + test.expect_completion_details(&t, &source, "", {"test.my_pointer: ^int"}) +} -- cgit v1.2.3