diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2023-01-25 21:13:40 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-25 21:13:40 +0100 |
commit | c6c8c91a6e4b7a2b6eed02d3e2f5db25c124d9a0 (patch) | |
tree | 1fe8e9ab2175154d44e78d153dd760e56dc1c860 /cli/tests/integration/lsp_tests.rs | |
parent | b5b4887c4a5fefdeb5592ebaadcc941281d0c4d5 (diff) |
feat: embed import map in the config file (#17478)
This commit changes handling of config file to enable
specifying "imports" and "scopes" objects effectively making
the configuration file an import map.
"imports" and "scopes" take precedence over "importMap" configuration,
but have lower priority than "--importmap" CLI flag.
Co-authored-by: David Sherret <dsherret@users.noreply.github.com>
Co-authored-by: David Sherret <dsherret@gmail.com>
Diffstat (limited to 'cli/tests/integration/lsp_tests.rs')
-rw-r--r-- | cli/tests/integration/lsp_tests.rs | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/cli/tests/integration/lsp_tests.rs b/cli/tests/integration/lsp_tests.rs index f7c0e6137..be280bfa7 100644 --- a/cli/tests/integration/lsp_tests.rs +++ b/cli/tests/integration/lsp_tests.rs @@ -583,6 +583,93 @@ fn lsp_import_map_config_file() { } #[test] +fn lsp_import_map_embedded_in_config_file() { + let temp_dir = TempDir::new(); + let mut params: lsp::InitializeParams = + serde_json::from_value(load_fixture("initialize_params.json")).unwrap(); + + let deno_import_map_jsonc = serde_json::to_string_pretty(&load_fixture( + "deno.embedded_import_map.jsonc", + )) + .unwrap(); + temp_dir.write("deno.embedded_import_map.jsonc", deno_import_map_jsonc); + + params.root_uri = Some(Url::from_file_path(temp_dir.path()).unwrap()); + if let Some(Value::Object(mut map)) = params.initialization_options { + map.insert( + "config".to_string(), + json!("./deno.embedded_import_map.jsonc"), + ); + params.initialization_options = Some(Value::Object(map)); + } + fs::create_dir(temp_dir.path().join("lib")).unwrap(); + temp_dir.write("lib/b.ts", r#"export const b = "b";"#); + + let deno_exe = deno_exe_path(); + let mut client = LspClient::new(&deno_exe, false).unwrap(); + client + .write_request::<_, _, Value>("initialize", params) + .unwrap(); + + client.write_notification("initialized", json!({})).unwrap(); + let uri = Url::from_file_path(temp_dir.path().join("a.ts")).unwrap(); + + let diagnostics = did_open( + &mut client, + json!({ + "textDocument": { + "uri": uri, + "languageId": "typescript", + "version": 1, + "text": "import { b } from \"/~/b.ts\";\n\nconsole.log(b);\n" + } + }), + ); + + let diagnostics = diagnostics.into_iter().flat_map(|x| x.diagnostics); + assert_eq!(diagnostics.count(), 0); + + let (maybe_res, maybe_err) = client + .write_request::<_, _, Value>( + "textDocument/hover", + json!({ + "textDocument": { + "uri": uri + }, + "position": { + "line": 2, + "character": 12 + } + }), + ) + .unwrap(); + assert!(maybe_err.is_none()); + assert_eq!( + maybe_res, + Some(json!({ + "contents": [ + { + "language": "typescript", + "value":"(alias) const b: \"b\"\nimport b" + }, + "" + ], + "range": { + "start": { + "line": 2, + "character": 12 + }, + "end": { + "line": 2, + "character": 13 + } + } + })) + ); + shutdown(&mut client); +} + +#[test] fn lsp_deno_task() { let temp_dir = TempDir::new(); let workspace_root = temp_dir.path().canonicalize().unwrap(); |