diff --git a/kclvm/tools/src/LSP/src/completion.rs b/kclvm/tools/src/LSP/src/completion.rs index 9d68060b9..813fb8085 100644 --- a/kclvm/tools/src/LSP/src/completion.rs +++ b/kclvm/tools/src/LSP/src/completion.rs @@ -453,13 +453,55 @@ fn completion_import_builtin_pkg(program: &Program, pos: &KCLPos) -> IndexSet = IndexSet::new(); // test completion for builtin packages @@ -1780,6 +1824,37 @@ mod tests { } } + #[macro_export] + macro_rules! completion_label_test_snapshot { + ($name:ident, $file:expr, $line:expr, $column: expr, $trigger: expr) => { + #[test] + fn $name() { + insta::assert_snapshot!(format!("{:?}", { + let (file, program, _, gs) = compile_test_file($file); + + let pos = KCLPos { + filename: file.clone(), + line: $line, + column: Some($column), + }; + let tool = toolchain::default(); + + let mut got = completion($trigger, &program, &pos, &gs, &tool).unwrap(); + + match &mut got { + CompletionResponse::Array(arr) => { + let mut labels: Vec = + arr.iter().map(|item| item.label.clone()).collect(); + labels.sort(); + labels + } + CompletionResponse::List(_) => panic!("test failed"), + } + })); + } + }; + } + #[macro_export] macro_rules! completion_label_without_builtin_func_test_snapshot { ($name:ident, $file:expr, $line:expr, $column: expr, $trigger: expr) => { @@ -1823,6 +1898,43 @@ mod tests { }; } + #[macro_export] + macro_rules! completion_label_without_system_pkg_test_snapshot { + ($name:ident, $file:expr, $line:expr, $column: expr, $trigger: expr) => { + #[test] + fn $name() { + insta::assert_snapshot!(format!("{:?}", { + let (file, program, _, gs) = compile_test_file($file); + + let pos = KCLPos { + filename: file.clone(), + line: $line, + column: Some($column), + }; + let tool = toolchain::default(); + + let mut got = completion($trigger, &program, &pos, &gs, &tool).unwrap(); + + match &mut got { + CompletionResponse::Array(arr) => { + let mut labels: Vec = + arr.iter().map(|item| item.label.clone()).collect(); + labels.sort(); + let labels: Vec = labels + .iter() + .filter(|label| !STANDARD_SYSTEM_MODULES.contains(&label.as_str())) + .cloned() + .collect(); + + labels + } + CompletionResponse::List(_) => panic!("test failed"), + } + })); + } + }; + } + completion_label_without_builtin_func_test_snapshot!( lambda_1, "src/test_data/completion_test/lambda/lambda_1/lambda_1.k", @@ -1854,4 +1966,12 @@ mod tests { 4, Some('\n') ); + + completion_label_without_system_pkg_test_snapshot!( + import_internal_pkg_test, + "src/test_data/completion_test/import/internal/main.k", + 1, + 8, + 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 new file mode 100644 index 000000000..fa8c125c1 --- /dev/null +++ b/kclvm/tools/src/LSP/src/snapshots/kcl_language_server__completion__tests__import_internal_pkg_test.snap @@ -0,0 +1,5 @@ +--- +source: tools/src/LSP/src/completion.rs +expression: "format!(\"{:?}\",\n {\n let(file, program, _, gs) =\n compile_test_file(\"src/test_data/completion_test/import/internal/main.k\")\n ; let pos = KCLPos\n { filename : file.clone(), line : 1, column : Some(8), } ; let tool =\n toolchain :: default() ; let mut got =\n completion(None, & program, & pos, & gs, & tool).unwrap() ; match &\n mut got\n {\n CompletionResponse :: Array(arr) =>\n {\n let mut labels : Vec < String > =\n arr.iter().map(| item | item.label.clone()).collect() ;\n labels.sort() ; let labels : Vec < String > =\n labels.iter().filter(| label |!\n STANDARD_SYSTEM_MODULES.contains(&\n label.as_str())).cloned().collect() ; labels\n } CompletionResponse :: List(_) => panic! (\"test failed\"),\n }\n })" +--- +["tt"] diff --git a/kclvm/tools/src/LSP/src/test_data/completion_test/import/builtin_pkg.k b/kclvm/tools/src/LSP/src/test_data/completion_test/import/builtin/builtin_pkg.k similarity index 100% rename from kclvm/tools/src/LSP/src/test_data/completion_test/import/builtin_pkg.k rename to kclvm/tools/src/LSP/src/test_data/completion_test/import/builtin/builtin_pkg.k diff --git a/kclvm/tools/src/LSP/src/test_data/completion_test/import/internal/kcl.mod b/kclvm/tools/src/LSP/src/test_data/completion_test/import/internal/kcl.mod new file mode 100644 index 000000000..e69de29bb diff --git a/kclvm/tools/src/LSP/src/test_data/completion_test/import/internal/main.k b/kclvm/tools/src/LSP/src/test_data/completion_test/import/internal/main.k new file mode 100644 index 000000000..e49b15106 --- /dev/null +++ b/kclvm/tools/src/LSP/src/test_data/completion_test/import/internal/main.k @@ -0,0 +1 @@ +import \ No newline at end of file diff --git a/kclvm/tools/src/LSP/src/test_data/completion_test/import/internal/tt/tt.k b/kclvm/tools/src/LSP/src/test_data/completion_test/import/internal/tt/tt.k new file mode 100644 index 000000000..e69de29bb