aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Gavin <daga@foa.dk>2024-04-25 10:17:42 +0200
committerDaniel Gavin <daga@foa.dk>2024-04-25 10:17:42 +0200
commit1f33639cb5b96453b83c17a7830e4f7d645a18b9 (patch)
treed4496c8a966e8c1e1aff5dcfb1d2f4218afbccdf
parentd0afaf154d20bbc162403b0ddb2d46b597d95acf (diff)
New config to only call check on saved package.
-rw-r--r--README.md2
-rw-r--r--misc/ols.schema.json4
-rw-r--r--src/common/config.odin59
-rw-r--r--src/server/check.odin9
-rw-r--r--src/server/requests.odin7
-rw-r--r--src/server/types.odin41
6 files changed, 70 insertions, 52 deletions
diff --git a/README.md b/README.md
index 385dbd4..fda3e28 100644
--- a/README.md
+++ b/README.md
@@ -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 {