diff options
| author | Daniel Gavin <daga@foa.dk> | 2024-04-25 10:17:42 +0200 |
|---|---|---|
| committer | Daniel Gavin <daga@foa.dk> | 2024-04-25 10:17:42 +0200 |
| commit | 1f33639cb5b96453b83c17a7830e4f7d645a18b9 (patch) | |
| tree | d4496c8a966e8c1e1aff5dcfb1d2f4218afbccdf | |
| parent | d0afaf154d20bbc162403b0ddb2d46b597d95acf (diff) | |
New config to only call check on saved package.
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | misc/ols.schema.json | 4 | ||||
| -rw-r--r-- | src/common/config.odin | 59 | ||||
| -rw-r--r-- | src/server/check.odin | 9 | ||||
| -rw-r--r-- | src/server/requests.odin | 7 | ||||
| -rw-r--r-- | src/server/types.odin | 41 |
6 files changed, 70 insertions, 52 deletions
@@ -78,6 +78,8 @@ Options: `enable_procedure_snippet`: Use snippets when completing procedures—adds parenthesis after the name. _(Enabled by default)_ +`enable_checker_only_saved`: Turns on only calling the checker on the package being saved. + `odin_command`: Allows you to specify your Odin location, instead of just relying on the environment path. `checker_args`: Pass custom arguments to `odin check`. diff --git a/misc/ols.schema.json b/misc/ols.schema.json index 3fbc0d2..04b1006 100644 --- a/misc/ols.schema.json +++ b/misc/ols.schema.json @@ -13,6 +13,10 @@ } }, "thread_pool_count": { "type": "integer" }, + "enable_checker_only_saved": { + "type": "boolean", + "description": "Turns on only calling the checker on the package being saved" + }, "enable_semantic_tokens": { "type": "boolean", "description": "Turns on syntax highlighting." diff --git a/src/common/config.odin b/src/common/config.odin index 162f9d5..6ca8bc9 100644 --- a/src/common/config.odin +++ b/src/common/config.odin @@ -7,35 +7,36 @@ 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_inlay_hints: bool, - enable_procedure_context: bool, - enable_snippets: bool, - enable_references: bool, - enable_rename: bool, - enable_label_details: bool, - enable_std_references: bool, - enable_import_fixer: bool, - enable_fake_method: bool, - enable_procedure_snippet: bool, - disable_parser_errors: bool, - thread_count: int, - file_log: bool, - odin_command: 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_inlay_hints: bool, + enable_procedure_context: bool, + enable_snippets: bool, + enable_references: bool, + enable_rename: 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, + disable_parser_errors: bool, + thread_count: int, + file_log: bool, + odin_command: string, + checker_args: string, + checker_targets: []string, + client_name: string, + profile: ConfigProfile, } config: Config diff --git a/src/server/check.odin b/src/server/check.odin index 895d890..bd04bb1 100644 --- a/src/server/check.odin +++ b/src/server/check.odin @@ -78,13 +78,18 @@ fallback_find_odin_directories :: proc(config: ^common.Config) -> []string { return data[:] } -check :: proc(paths: []string, writer: ^Writer, config: ^common.Config) { +check :: proc(paths: []string, uri: common.Uri, writer: ^Writer, config: ^common.Config) { paths := paths if len(paths) == 0 { - paths = fallback_find_odin_directories(config) + if config.enable_checker_only_saved { + paths = {path.dir(uri.path, context.temp_allocator)} + } else { + paths = fallback_find_odin_directories(config) + } } + data := make([]byte, mem.Kilobyte * 200, context.temp_allocator) buffer: []byte diff --git a/src/server/requests.odin b/src/server/requests.odin index 0a203ec..79a3d34 100644 --- a/src/server/requests.odin +++ b/src/server/requests.odin @@ -429,6 +429,10 @@ read_ols_initialize_options :: proc( config.enable_procedure_snippet = ols_config.enable_procedure_snippet.(bool) or_else config.enable_procedure_snippet + config.enable_checker_only_saved = + ols_config.enable_checker_only_saved.(bool) or_else config.enable_checker_only_saved + + if ols_config.odin_command != "" { config.odin_command = strings.clone( ols_config.odin_command, @@ -701,6 +705,7 @@ request_initialize :: proc( config.enable_inlay_hints = false config.enable_fake_method = false config.enable_procedure_snippet = true + config.enable_checker_only_saved = false read_ols_config :: proc( file: string, @@ -1258,7 +1263,7 @@ notification_did_save :: proc( log.errorf("failed to collect symbols on save %v", ret) } - check(config.profile.checker_path[:], writer, config) + check(config.profile.checker_path[:], corrected_uri, writer, config) return .None } diff --git a/src/server/types.odin b/src/server/types.odin index 1b2bd99..9cc1e01 100644 --- a/src/server/types.odin +++ b/src/server/types.odin @@ -336,26 +336,27 @@ TextDocumentSyncOptions :: struct { } OlsConfig :: struct { - collections: [dynamic]OlsConfigCollection, - thread_pool_count: Maybe(int), - enable_semantic_tokens: Maybe(bool), - enable_document_symbols: Maybe(bool), - enable_format: Maybe(bool), - enable_hover: Maybe(bool), - enable_procedure_context: Maybe(bool), - enable_snippets: Maybe(bool), - enable_inlay_hints: Maybe(bool), - enable_references: Maybe(bool), - enable_fake_methods: Maybe(bool), - enable_procedure_snippet: Maybe(bool), - disable_parser_errors: Maybe(bool), - verbose: Maybe(bool), - file_log: Maybe(bool), - odin_command: string, - checker_args: string, - checker_targets: []string, - profiles: [dynamic]common.ConfigProfile, - profile: string, + collections: [dynamic]OlsConfigCollection, + thread_pool_count: Maybe(int), + enable_semantic_tokens: Maybe(bool), + enable_document_symbols: Maybe(bool), + enable_format: Maybe(bool), + enable_hover: Maybe(bool), + enable_procedure_context: Maybe(bool), + enable_snippets: Maybe(bool), + enable_inlay_hints: Maybe(bool), + enable_references: Maybe(bool), + enable_fake_methods: Maybe(bool), + enable_procedure_snippet: Maybe(bool), + enable_checker_only_saved: Maybe(bool), + disable_parser_errors: Maybe(bool), + verbose: Maybe(bool), + file_log: Maybe(bool), + odin_command: string, + checker_args: string, + checker_targets: []string, + profiles: [dynamic]common.ConfigProfile, + profile: string, } OlsConfigCollection :: struct { |