aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-09-10 13:40:04 -0400
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-09-10 13:44:11 -0400
commita60d0daad2ff3e57eb9942c58c532007794bbd63 (patch)
tree8d888b9551b1b2a66886d1b09451fe8f79287d70
parent8f44d4c36c2712b9d230238b58042e79df67cefd (diff)
Add parentheses around named proc returns
-rw-r--r--src/server/documentation.odin9
-rw-r--r--tests/hover_test.odin12
2 files changed, 20 insertions, 1 deletions
diff --git a/src/server/documentation.odin b/src/server/documentation.odin
index 49674ad..6f591a4 100644
--- a/src/server/documentation.odin
+++ b/src/server/documentation.odin
@@ -486,7 +486,14 @@ write_proc_param_list_and_return :: proc(sb: ^strings.Builder, value: SymbolProc
if len(value.orig_return_types) != 0 {
strings.write_string(sb, " -> ")
+ add_parens := false
if len(value.orig_return_types) > 1 {
+ add_parens = true
+ } else if field, ok := value.orig_return_types[0].derived.(^ast.Field); ok && len(field.names) > 0{
+ add_parens = true
+ }
+
+ if add_parens {
strings.write_string(sb, "(")
}
@@ -497,7 +504,7 @@ write_proc_param_list_and_return :: proc(sb: ^strings.Builder, value: SymbolProc
}
}
- if len(value.orig_return_types) > 1 {
+ if add_parens {
strings.write_string(sb, ")")
}
} else if value.diverging {
diff --git a/tests/hover_test.odin b/tests/hover_test.odin
index 8879cc9..5370804 100644
--- a/tests/hover_test.odin
+++ b/tests/hover_test.odin
@@ -4533,6 +4533,18 @@ ast_hover_parapoly_union_with_where_clause :: proc(t: ^testing.T) {
}
test.expect_hover(t, &source, "test.Foo: union($T: typeid) #no_nil where type_is_integer(T) {\n\tT,\n\tstring,\n}")
}
+
+@(test)
+ast_hover_proc_named_return_parens :: proc(t: ^testing.T) {
+ source := test.Source {
+ main = `package test
+ f{*}oo :: proc() -> (a: int) {
+ return
+ }
+ `,
+ }
+ test.expect_hover(t, &source, "test.foo: proc() -> (a: int)")
+}
/*
Waiting for odin fix