aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2025-06-22 23:40:24 +0200
committerDanielGavin <danielgavin5@hotmail.com>2025-06-22 23:40:24 +0200
commitf0efd3728e8d6408b5b13b71c49b03b2eb062bd9 (patch)
tree5e65cdf008364492f6541f824e91a8663a864b4f /src
parent3d1b2a5d7849c16dac4acea8b205af15be3351f4 (diff)
Auto import packages from core on completion.
Diffstat (limited to 'src')
-rw-r--r--src/common/config.odin1
-rw-r--r--src/server/caches.odin3
-rw-r--r--src/server/completion.odin46
-rw-r--r--src/server/requests.odin3
-rw-r--r--src/server/types.odin3
5 files changed, 43 insertions, 13 deletions
diff --git a/src/common/config.odin b/src/common/config.odin
index 65f4280..d550d81 100644
--- a/src/common/config.odin
+++ b/src/common/config.odin
@@ -34,6 +34,7 @@ Config :: struct {
enable_fake_method: bool,
enable_procedure_snippet: bool,
enable_checker_only_saved: bool,
+ enable_auto_import: bool,
disable_parser_errors: bool,
thread_count: int,
file_log: bool,
diff --git a/src/server/caches.odin b/src/server/caches.odin
index 3d26e22..7e87762 100644
--- a/src/server/caches.odin
+++ b/src/server/caches.odin
@@ -79,9 +79,6 @@ find_all_package_aliases :: proc() {
for pkg in pkgs {
if pkg, err := filepath.rel(v, pkg, context.temp_allocator); err == .None {
forward_pkg, _ := filepath.to_slash(pkg, context.temp_allocator)
- if !strings.contains(forward_pkg, "/") {
- continue
- }
if k not_in build_cache.pkg_aliases {
build_cache.pkg_aliases[k] = make([dynamic]string)
}
diff --git a/src/server/completion.odin b/src/server/completion.odin
index 04d580a..cc9975e 100644
--- a/src/server/completion.odin
+++ b/src/server/completion.odin
@@ -1700,23 +1700,51 @@ append_non_imported_packages :: proc(
position_context: ^DocumentPositionContext,
items: ^[dynamic]CompletionItem,
) {
-
-
for collection, pkgs in build_cache.pkg_aliases {
-
+ //Right now only do it for core
+ if collection != "core" {
+ continue
+ }
for pkg in pkgs {
+ fullpath := path.join({common.config.collections[collection], pkg})
+ found := false
- //filepath.is_separator()
+ for doc_pkg in ast_context.imports {
+ if fullpath == doc_pkg.name {
+ found = true
+ }
+ }
- }
+ if !found {
+ pkg_decl := ast_context.file.pkg_decl
- }
+ import_edit := TextEdit {
+ range = {
+ start = {line = pkg_decl.end.line + 1, character = 0},
+ end = {line = pkg_decl.end.line + 1, character = 0},
+ },
+ newText = fmt.tprintf("import \"%v:%v\"\n", collection, pkg),
+ }
- for pkg in ast_context.imports {
- //log.error(pkg)
- }
+ additionalTextEdits := make([]TextEdit, 1, context.temp_allocator)
+ additionalTextEdits[0] = import_edit
+
+ item := CompletionItem {
+ label = pkg,
+ kind = .Module,
+ detail = pkg,
+ insertText = path.base(pkg),
+ additionalTextEdits = additionalTextEdits,
+ insertTextFormat = .PlainText,
+ InsertTextMode = .adjustIndentation,
+ }
+ log.error(item)
+ append(items, item)
+ }
+ }
+ }
}
append_magic_map_completion :: proc(
diff --git a/src/server/requests.odin b/src/server/requests.odin
index 52df45c..aef44f6 100644
--- a/src/server/requests.odin
+++ b/src/server/requests.odin
@@ -374,6 +374,8 @@ read_ols_initialize_options :: proc(config: ^common.Config, ols_config: OlsConfi
config.enable_procedure_snippet =
ols_config.enable_procedure_snippet.(bool) or_else config.enable_procedure_snippet
+ config.enable_auto_import = ols_config.enable_auto_import.(bool) or_else config.enable_auto_import
+
config.enable_checker_only_saved =
ols_config.enable_checker_only_saved.(bool) or_else config.enable_checker_only_saved
@@ -607,6 +609,7 @@ request_initialize :: proc(
config.enable_fake_method = false
config.enable_procedure_snippet = true
config.enable_checker_only_saved = true
+ config.enable_auto_import = true
read_ols_config :: proc(file: string, config: ^common.Config, uri: common.Uri) {
if data, ok := os.read_entire_file(file, context.temp_allocator); ok {
diff --git a/src/server/types.odin b/src/server/types.odin
index 24dc2e8..1da5f3c 100644
--- a/src/server/types.odin
+++ b/src/server/types.odin
@@ -132,7 +132,7 @@ MarkupContent :: struct {
ServerCapabilities :: struct {
textDocumentSync: TextDocumentSyncOptions,
definitionProvider: bool,
- typeDefinitionProvider: bool,
+ typeDefinitionProvider: bool,
completionProvider: CompletionOptions,
signatureHelpProvider: SignatureHelpOptions,
semanticTokensProvider: SemanticTokensOptions,
@@ -412,6 +412,7 @@ OlsConfig :: struct {
enable_fake_methods: 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),