aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Gavin <danielgavin5@hotmail.com>2022-10-27 13:33:12 +0200
committerDaniel Gavin <danielgavin5@hotmail.com>2022-10-27 13:33:12 +0200
commitbd25738e319420f126b6c54e21744443ac4bf287 (patch)
tree4d59143e868a861b8c4160ea0bd28e4306ba90ba
parent7415292f695102c94b6d97e8a28ffc99da71ac30 (diff)
show pointer information in signature
-rw-r--r--src/server/analysis.odin21
-rw-r--r--tests/completions_test.odin17
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"})
+}