summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2026-01-27 14:57:34 +1100
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2026-01-27 14:57:45 +1100
commit35fd3cef3b94c0495508b229db9ff6da647a6c46 (patch)
tree1951cde48c36cc6b0f6f098241ee3bfd534d697f
parent7349330c3ff8dba777ff01dfcf284588c3b01471 (diff)
Add option to put the signature help for comp lits in the docs to improve rendering with certain editors
-rw-r--r--README.md2
-rw-r--r--misc/ols.schema.json5
-rw-r--r--src/common/config.odin77
-rw-r--r--src/server/requests.odin2
-rw-r--r--src/server/signature.odin36
-rw-r--r--src/server/types.odin65
6 files changed, 106 insertions, 81 deletions
diff --git a/README.md b/README.md
index bc8dfef..75b51ff 100644
--- a/README.md
+++ b/README.md
@@ -103,6 +103,8 @@ Options:
- `enable_comp_lit_signature_help`: Provide signature help for comp lits such as when instantiating structs. Will not display correctly on some editors such as vscode.
+- `enable_comp_lit_signature_help_use_docs`: Put signature help for comp lits in the documentation. This will allow it to be rendered nicely using markdown in editors that render the label without colour on one line.
+
- `odin_command`: Specify the location to your Odin executable, rather than relying on the environment path.
- `odin_root_override`: Allows you to specify a custom `ODIN_ROOT` that `ols` will use to look for `odin` core libraries when implementing custom runtimes.
diff --git a/misc/ols.schema.json b/misc/ols.schema.json
index d9fee4e..c95d8e6 100644
--- a/misc/ols.schema.json
+++ b/misc/ols.schema.json
@@ -97,6 +97,11 @@
"description": "Provide signature help for comp lits such as when instantiating structs. Will not display correctly on some editors such as vscode.",
"default": false
},
+ "enable_comp_lit_signature_help_use_docs": {
+ "type": "boolean",
+ "description": "Put signature help for comp lits in the documentation. This will allow it to be rendered nicely using markdown in editors that render the label without colour on one line.",
+ "default": false
+ },
"disable_parser_errors": { "type": "boolean" },
"verbose": {
"type": "boolean",
diff --git a/src/common/config.odin b/src/common/config.odin
index 6890685..441e8a9 100644
--- a/src/common/config.odin
+++ b/src/common/config.odin
@@ -10,44 +10,45 @@ ConfigProfile :: struct {
}
Config :: struct {
- workspace_folders: [dynamic]WorkspaceFolder,
- completion_support_md: bool,
- hover_support_md: bool,
- signature_offset_support: bool,
- collections: map[string]string,
- running: bool,
- verbose: bool,
- enable_format: bool,
- enable_hover: bool,
- enable_document_symbols: bool,
- enable_semantic_tokens: bool,
- enable_unused_imports_reporting: bool,
- enable_inlay_hints_params: bool,
- enable_inlay_hints_default_params: bool,
- enable_inlay_hints_implicit_return: bool,
- enable_procedure_context: bool,
- enable_snippets: bool,
- enable_references: bool,
- enable_document_highlights: bool,
- enable_label_details: bool,
- enable_std_references: bool,
- enable_import_fixer: bool,
- enable_fake_method: bool,
- enable_procedure_snippet: bool,
- enable_checker_only_saved: bool,
- enable_auto_import: bool,
- enable_completion_matching: bool,
- enable_document_links: bool,
- enable_comp_lit_signature_help: bool,
- disable_parser_errors: bool,
- thread_count: int,
- file_log: bool,
- odin_command: string,
- odin_root_override: string,
- checker_args: string,
- checker_targets: []string,
- client_name: string,
- profile: ConfigProfile,
+ workspace_folders: [dynamic]WorkspaceFolder,
+ completion_support_md: bool,
+ hover_support_md: bool,
+ signature_offset_support: bool,
+ collections: map[string]string,
+ running: bool,
+ verbose: bool,
+ enable_format: bool,
+ enable_hover: bool,
+ enable_document_symbols: bool,
+ enable_semantic_tokens: bool,
+ enable_unused_imports_reporting: bool,
+ enable_inlay_hints_params: bool,
+ enable_inlay_hints_default_params: bool,
+ enable_inlay_hints_implicit_return: bool,
+ enable_procedure_context: bool,
+ enable_snippets: bool,
+ enable_references: bool,
+ enable_document_highlights: bool,
+ enable_label_details: bool,
+ enable_std_references: bool,
+ enable_import_fixer: bool,
+ enable_fake_method: bool,
+ enable_procedure_snippet: bool,
+ enable_checker_only_saved: bool,
+ enable_auto_import: bool,
+ enable_completion_matching: bool,
+ enable_document_links: bool,
+ enable_comp_lit_signature_help: bool,
+ enable_comp_lit_signature_help_use_docs: bool,
+ disable_parser_errors: bool,
+ thread_count: int,
+ file_log: bool,
+ odin_command: string,
+ odin_root_override: string,
+ checker_args: string,
+ checker_targets: []string,
+ client_name: string,
+ profile: ConfigProfile,
}
config: Config
diff --git a/src/server/requests.odin b/src/server/requests.odin
index 351c384..0d6e025 100644
--- a/src/server/requests.odin
+++ b/src/server/requests.odin
@@ -376,6 +376,8 @@ read_ols_initialize_options :: proc(config: ^common.Config, ols_config: OlsConfi
config.enable_document_links = ols_config.enable_document_links.(bool) or_else config.enable_document_links
config.enable_comp_lit_signature_help =
ols_config.enable_comp_lit_signature_help.(bool) or_else config.enable_comp_lit_signature_help
+ config.enable_comp_lit_signature_help_use_docs =
+ ols_config.enable_comp_lit_signature_help_use_docs.(bool) or_else config.enable_comp_lit_signature_help_use_docs
config.verbose = ols_config.verbose.(bool) or_else config.verbose
config.file_log = ols_config.file_log.(bool) or_else config.file_log
diff --git a/src/server/signature.odin b/src/server/signature.odin
index f6c79fc..a53c084 100644
--- a/src/server/signature.odin
+++ b/src/server/signature.odin
@@ -1,5 +1,6 @@
package server
+import "core:fmt"
import "core:log"
import "core:odin/ast"
import "core:odin/tokenizer"
@@ -30,7 +31,7 @@ SignatureHelp :: struct {
SignatureInformation :: struct {
label: string,
- documentation: string,
+ documentation: MarkupContent,
parameters: []ParameterInformation,
}
@@ -105,14 +106,21 @@ get_signature_information :: proc(
if config.enable_comp_lit_signature_help {
if symbol, ok := resolve_comp_literal(&ast_context, &position_context); ok {
- build_documentation(&ast_context, &symbol, short_signature = false)
- append(
- &signature_information,
- SignatureInformation {
- label = get_signature(symbol),
- documentation = construct_symbol_docs(symbol),
- },
- )
+ if config.enable_comp_lit_signature_help_use_docs {
+ build_documentation(&ast_context, &symbol, short_signature = true)
+ signature := get_signature(symbol)
+ build_documentation(&ast_context, &symbol, short_signature = false)
+ append(
+ &signature_information,
+ SignatureInformation{label = signature, documentation = write_hover_content(&ast_context, symbol)},
+ )
+ } else {
+ build_documentation(&ast_context, &symbol, short_signature = false)
+ append(
+ &signature_information,
+ SignatureInformation{label = get_signature(symbol), documentation = write_markdown_doc(symbol)},
+ )
+ }
}
}
@@ -176,7 +184,7 @@ add_proc_signature :: proc(
info := SignatureInformation {
label = get_signature(call),
- documentation = construct_symbol_docs(call),
+ documentation = write_markdown_doc(call),
parameters = parameters,
}
append(signature_information, info)
@@ -204,7 +212,7 @@ add_proc_signature :: proc(
info := SignatureInformation {
label = get_signature(symbol),
- documentation = construct_symbol_docs(symbol),
+ documentation = write_markdown_doc(symbol),
parameters = parameters,
}
@@ -214,3 +222,9 @@ add_proc_signature :: proc(
}
return active_parameter
}
+
+@(private = "file")
+write_markdown_doc :: proc(symbol: Symbol) -> MarkupContent {
+ doc := construct_symbol_docs(symbol)
+ return MarkupContent{kind = "markdown", value = fmt.tprintf(DOC_FMT_ODIN, doc)}
+}
diff --git a/src/server/types.odin b/src/server/types.odin
index 0377e62..c0bcf9e 100644
--- a/src/server/types.odin
+++ b/src/server/types.odin
@@ -277,10 +277,10 @@ DiagnosticSeverity :: enum {
Hint = 4,
}
- DiagnosticTag :: enum int {
+DiagnosticTag :: enum int {
Unnecessary = 1,
Deprecated = 2,
- }
+}
Diagnostic :: struct {
range: common.Range,
@@ -413,36 +413,37 @@ FileSystemWatcher :: struct {
}
OlsConfig :: struct {
- collections: [dynamic]OlsConfigCollection,
- thread_pool_count: Maybe(int),
- enable_format: Maybe(bool),
- enable_hover: Maybe(bool),
- enable_document_symbols: Maybe(bool),
- enable_fake_methods: Maybe(bool),
- enable_references: Maybe(bool),
- enable_document_highlights: Maybe(bool),
- enable_document_links: Maybe(bool),
- enable_comp_lit_signature_help: Maybe(bool),
- enable_completion_matching: Maybe(bool),
- enable_inlay_hints_params: Maybe(bool),
- enable_inlay_hints_default_params: Maybe(bool),
- enable_inlay_hints_implicit_return: Maybe(bool),
- enable_semantic_tokens: Maybe(bool),
- enable_unused_imports_reporting: Maybe(bool),
- enable_procedure_context: Maybe(bool),
- enable_snippets: Maybe(bool),
- enable_procedure_snippet: Maybe(bool),
- enable_checker_only_saved: Maybe(bool),
- enable_auto_import: Maybe(bool),
- disable_parser_errors: Maybe(bool),
- verbose: Maybe(bool),
- file_log: Maybe(bool),
- odin_command: string,
- odin_root_override: string,
- checker_args: string,
- checker_targets: []string,
- profiles: [dynamic]common.ConfigProfile,
- profile: string,
+ collections: [dynamic]OlsConfigCollection,
+ thread_pool_count: Maybe(int),
+ enable_format: Maybe(bool),
+ enable_hover: Maybe(bool),
+ enable_document_symbols: Maybe(bool),
+ enable_fake_methods: Maybe(bool),
+ enable_references: Maybe(bool),
+ enable_document_highlights: Maybe(bool),
+ enable_document_links: Maybe(bool),
+ enable_comp_lit_signature_help: Maybe(bool),
+ enable_comp_lit_signature_help_use_docs: Maybe(bool),
+ enable_completion_matching: Maybe(bool),
+ enable_inlay_hints_params: Maybe(bool),
+ enable_inlay_hints_default_params: Maybe(bool),
+ enable_inlay_hints_implicit_return: Maybe(bool),
+ enable_semantic_tokens: Maybe(bool),
+ enable_unused_imports_reporting: Maybe(bool),
+ enable_procedure_context: Maybe(bool),
+ enable_snippets: Maybe(bool),
+ enable_procedure_snippet: Maybe(bool),
+ enable_checker_only_saved: Maybe(bool),
+ enable_auto_import: Maybe(bool),
+ disable_parser_errors: Maybe(bool),
+ verbose: Maybe(bool),
+ file_log: Maybe(bool),
+ odin_command: string,
+ odin_root_override: string,
+ checker_args: string,
+ checker_targets: []string,
+ profiles: [dynamic]common.ConfigProfile,
+ profile: string,
}
OlsConfigCollection :: struct {