diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/config.odin | 1 | ||||
| -rw-r--r-- | src/server/caches.odin | 3 | ||||
| -rw-r--r-- | src/server/completion.odin | 46 | ||||
| -rw-r--r-- | src/server/requests.odin | 3 | ||||
| -rw-r--r-- | src/server/types.odin | 3 |
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), |