summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2023-09-24 18:00:15 +0100
committerGitHub <noreply@github.com>2023-09-24 18:00:15 +0100
commit98ef7bd8183f7fa534c3bfea8376d4c452b5d8d7 (patch)
treee06f0e1936cef303d69fca4a105878ca1929450f
parent33f84321b29f97c5757f019a72228c1c9631852e (diff)
fix(lsp): resolve remote import maps (#20651)
-rw-r--r--cli/lsp/language_server.rs7
-rw-r--r--cli/tests/integration/lsp_tests.rs48
-rw-r--r--cli/tests/testdata/import_maps/import_map.json1
-rw-r--r--cli/tests/testdata/import_maps/print_hello.ts3
-rw-r--r--test_util/src/lsp.rs1
5 files changed, 54 insertions, 6 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs
index 1750b23c5..2a17b2e59 100644
--- a/cli/lsp/language_server.rs
+++ b/cli/lsp/language_server.rs
@@ -1052,13 +1052,8 @@ impl Inner {
lsp_log!("Warning: Import map \"{}\" configured in \"{}\" being ignored due to an import map being explicitly configured in workspace settings.", import_map_path, config_file.specifier);
}
}
- if let Ok(url) = Url::from_file_path(&import_map_str) {
+ if let Ok(url) = Url::parse(&import_map_str) {
Some(url)
- } else if import_map_str.starts_with("data:") {
- let import_map_url = Url::parse(&import_map_str).map_err(|_| {
- anyhow!("Bad data url for import map: {}", import_map_str)
- })?;
- Some(import_map_url)
} else if let Some(root_uri) = self.config.root_uri() {
let root_path = specifier_to_file_path(root_uri)?;
let import_map_path = root_path.join(&import_map_str);
diff --git a/cli/tests/integration/lsp_tests.rs b/cli/tests/integration/lsp_tests.rs
index 44a5df700..9e9b3f8cd 100644
--- a/cli/tests/integration/lsp_tests.rs
+++ b/cli/tests/integration/lsp_tests.rs
@@ -207,6 +207,54 @@ fn lsp_import_map() {
}
#[test]
+fn lsp_import_map_remote() {
+ let context = TestContextBuilder::new()
+ .use_http_server()
+ .use_temp_cwd()
+ .build();
+ let temp_dir = context.temp_dir();
+ temp_dir.write(
+ "deno.json",
+ json!({
+ "importMap": "http://localhost:4545/import_maps/import_map.json",
+ })
+ .to_string(),
+ );
+ temp_dir.write(
+ "file.ts",
+ r#"
+ import { printHello } from "print_hello";
+ printHello();
+ "#,
+ );
+ let mut client = context.new_lsp_command().build();
+ client.initialize(|builder| {
+ builder.set_import_map("http://localhost:4545/import_maps/import_map.json");
+ });
+ client.write_request(
+ "workspace/executeCommand",
+ json!({
+ "command": "deno.cache",
+ "arguments": [
+ [],
+ temp_dir.uri().join("file.ts").unwrap(),
+ ],
+ }),
+ );
+
+ let diagnostics = client.did_open(json!({
+ "textDocument": {
+ "uri": temp_dir.uri().join("file.ts").unwrap(),
+ "languageId": "typescript",
+ "version": 1,
+ "text": temp_dir.read_to_string("file.ts"),
+ }
+ }));
+ assert_eq!(diagnostics.all(), vec![]);
+ client.shutdown();
+}
+
+#[test]
fn lsp_import_map_data_url() {
let context = TestContextBuilder::new().use_temp_cwd().build();
let mut client = context.new_lsp_command().build();
diff --git a/cli/tests/testdata/import_maps/import_map.json b/cli/tests/testdata/import_maps/import_map.json
index 601874aab..40d1d4ec2 100644
--- a/cli/tests/testdata/import_maps/import_map.json
+++ b/cli/tests/testdata/import_maps/import_map.json
@@ -1,5 +1,6 @@
{
"imports": {
+ "print_hello": "./print_hello.ts",
"moment": "./moment/moment.ts",
"moment/": "./moment/",
"lodash": "./lodash/lodash.ts",
diff --git a/cli/tests/testdata/import_maps/print_hello.ts b/cli/tests/testdata/import_maps/print_hello.ts
new file mode 100644
index 000000000..794257390
--- /dev/null
+++ b/cli/tests/testdata/import_maps/print_hello.ts
@@ -0,0 +1,3 @@
+export function printHello() {
+ console.log("Hello, world!");
+}
diff --git a/test_util/src/lsp.rs b/test_util/src/lsp.rs
index d953c86e7..4e87503f2 100644
--- a/test_util/src/lsp.rs
+++ b/test_util/src/lsp.rs
@@ -220,6 +220,7 @@ impl InitializeParamsBuilder {
}),
root_uri: None,
initialization_options: Some(json!({
+ "enableBuiltinCommands": true,
"enable": true,
"cache": null,
"certificateStores": null,