diff --git a/kclvm/tools/src/LSP/src/completion.rs b/kclvm/tools/src/LSP/src/completion.rs index e44bbf4ee..c6b383046 100644 --- a/kclvm/tools/src/LSP/src/completion.rs +++ b/kclvm/tools/src/LSP/src/completion.rs @@ -23,6 +23,7 @@ use indexmap::IndexSet; use kclvm_ast::ast::{self, ImportStmt, Program, Stmt}; use kclvm_ast::MAIN_PKG; use kclvm_config::modfile::KCL_FILE_EXTENSION; +use kclvm_driver::get_kcl_files; use kclvm_driver::toolchain::{get_real_path_from_external, Metadata, Toolchain}; use kclvm_sema::core::global_state::GlobalState; @@ -490,6 +491,14 @@ fn completion_import_internal_pkg( if let Ok(file_type) = entry.file_type() { // internal pkgs if file_type.is_dir() { + if let Ok(files) = get_kcl_files(entry.path(), true) { + // skip folder if without kcl file + if files.is_empty() { + continue; + } + } else { + continue; + } if let Some(name) = entry.file_name().to_str() { completions.insert(KCLCompletionItem { label: name.to_string(), @@ -507,14 +516,16 @@ fn completion_import_internal_pkg( } if let Some(extension) = path.extension() { if extension == KCL_FILE_EXTENSION { - if let Some(name) = entry.file_name().to_str() { - completions.insert(KCLCompletionItem { - label: name.to_string(), - detail: None, - documentation: None, - kind: Some(KCLCompletionItemKind::Module), - insert_text: None, - }); + if let Some(name) = path.file_stem() { + if let Some(name) = name.to_str() { + completions.insert(KCLCompletionItem { + label: name.to_string(), + detail: None, + documentation: None, + kind: Some(KCLCompletionItemKind::Module), + insert_text: None, + }); + } } } } diff --git a/kclvm/tools/src/LSP/src/snapshots/kcl_language_server__completion__tests__import_internal_pkg_test.snap b/kclvm/tools/src/LSP/src/snapshots/kcl_language_server__completion__tests__import_internal_pkg_test.snap index 14214c6f0..5adaa214a 100644 --- a/kclvm/tools/src/LSP/src/snapshots/kcl_language_server__completion__tests__import_internal_pkg_test.snap +++ b/kclvm/tools/src/LSP/src/snapshots/kcl_language_server__completion__tests__import_internal_pkg_test.snap @@ -2,4 +2,4 @@ source: tools/src/LSP/src/completion.rs expression: "format!(\"{:?}\", got_labels)" --- -["tt"] +["foo", "tt"] diff --git a/kclvm/tools/src/LSP/src/test_data/completion_test/import/internal/foo.k b/kclvm/tools/src/LSP/src/test_data/completion_test/import/internal/foo.k new file mode 100644 index 000000000..e69de29bb diff --git a/kclvm/tools/src/LSP/src/test_data/completion_test/import/internal/without_k_file/.gitkeep b/kclvm/tools/src/LSP/src/test_data/completion_test/import/internal/without_k_file/.gitkeep new file mode 100644 index 000000000..e69de29bb