From e28fb70aeecf548d150312c30f7f32b60c4fdece Mon Sep 17 00:00:00 2001 From: Kitson Kelly Date: Thu, 16 Dec 2021 14:53:17 +1100 Subject: fix(lsp): provide diagnostics for import assertions (#13105) Fixes: #13099 --- cli/tests/integration/lsp_tests.rs | 66 ++++++++++++++++++++++ .../lsp/code_action_params_import_assertion.json | 38 +++++++++++++ .../lsp/code_action_response_import_assertion.json | 43 ++++++++++++++ 3 files changed, 147 insertions(+) create mode 100644 cli/tests/testdata/lsp/code_action_params_import_assertion.json create mode 100644 cli/tests/testdata/lsp/code_action_response_import_assertion.json (limited to 'cli/tests') diff --git a/cli/tests/integration/lsp_tests.rs b/cli/tests/integration/lsp_tests.rs index 718f73311..a3e1138b6 100644 --- a/cli/tests/integration/lsp_tests.rs +++ b/cli/tests/integration/lsp_tests.rs @@ -344,6 +344,72 @@ fn lsp_import_map_data_url() { shutdown(&mut client); } +#[test] +fn lsp_import_assertions() { + let mut client = init("initialize_params_import_map.json"); + client + .write_notification( + "textDocument/didOpen", + json!({ + "textDocument": { + "uri": "file:///a/test.json", + "languageId": "json", + "version": 1, + "text": "{\"a\":1}" + } + }), + ) + .unwrap(); + + let mut diagnostics = did_open( + &mut client, + json!({ + "textDocument": { + "uri": "file:///a/a.ts", + "languageId": "typescript", + "version": 1, + "text": "import a from \"./test.json\";\n\nconsole.log(a);\n" + } + }), + ); + + let last = diagnostics.pop().unwrap(); + assert_eq!( + json!(last.diagnostics), + json!([ + { + "range": { + "start": { + "line": 0, + "character": 14 + }, + "end": { + "line": 0, + "character": 27 + } + }, + "severity": 1, + "code": "no-assert-type", + "source": "deno", + "message": "The module is a JSON module and not being imported with an import assertion. Consider adding `assert { type: \"json\" }` to the import statement." + } + ]) + ); + + let (maybe_res, maybe_err) = client + .write_request( + "textDocument/codeAction", + load_fixture("code_action_params_import_assertion.json"), + ) + .unwrap(); + assert!(maybe_err.is_none()); + assert_eq!( + maybe_res, + Some(load_fixture("code_action_response_import_assertion.json")) + ); + shutdown(&mut client); +} + #[test] fn lsp_hover() { let mut client = init("initialize_params.json"); diff --git a/cli/tests/testdata/lsp/code_action_params_import_assertion.json b/cli/tests/testdata/lsp/code_action_params_import_assertion.json new file mode 100644 index 000000000..67b822a42 --- /dev/null +++ b/cli/tests/testdata/lsp/code_action_params_import_assertion.json @@ -0,0 +1,38 @@ +{ + "textDocument": { + "uri": "file:///a/a.ts" + }, + "range": { + "start": { + "line": 0, + "character": 14 + }, + "end": { + "line": 0, + "character": 27 + } + }, + "context": { + "diagnostics": [ + { + "range": { + "start": { + "line": 0, + "character": 14 + }, + "end": { + "line": 0, + "character": 27 + } + }, + "severity": 1, + "code": "no-assert-type", + "source": "deno", + "message": "The module is a JSON module and not being imported with an import assertion. Consider adding `assert { type: \"json\" }` to the import statement." + } + ], + "only": [ + "quickfix" + ] + } +} diff --git a/cli/tests/testdata/lsp/code_action_response_import_assertion.json b/cli/tests/testdata/lsp/code_action_response_import_assertion.json new file mode 100644 index 000000000..bff934b21 --- /dev/null +++ b/cli/tests/testdata/lsp/code_action_response_import_assertion.json @@ -0,0 +1,43 @@ +[ + { + "title": "Insert import assertion.", + "kind": "quickfix", + "diagnostics": [ + { + "range": { + "start": { + "line": 0, + "character": 14 + }, + "end": { + "line": 0, + "character": 27 + } + }, + "severity": 1, + "code": "no-assert-type", + "source": "deno", + "message": "The module is a JSON module and not being imported with an import assertion. Consider adding `assert { type: \"json\" }` to the import statement." + } + ], + "edit": { + "changes": { + "file:///a/a.ts": [ + { + "range": { + "start": { + "line": 0, + "character": 27 + }, + "end": { + "line": 0, + "character": 27 + } + }, + "newText": " assert { type: \"json\" }" + } + ] + } + } + } +] -- cgit v1.2.3