mirror of
https://github.com/denoland/deno.git
synced 2025-01-11 16:42:21 -05:00
fix(lsp): update import map config when deno.json changes (#19476)
Half of #19468
This commit is contained in:
parent
0d2eba4b3e
commit
b78a91d3ba
3 changed files with 90 additions and 6 deletions
|
@ -1577,6 +1577,7 @@ impl Inner {
|
||||||
touched = true;
|
touched = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(config_info) = self.maybe_config_file_info.as_mut() {
|
if let Some(config_info) = self.maybe_config_file_info.as_mut() {
|
||||||
if let Some(lockfile) = config_info.maybe_lockfile.as_ref() {
|
if let Some(lockfile) = config_info.maybe_lockfile.as_ref() {
|
||||||
let lockfile_path = lockfile.lock().filename.clone();
|
let lockfile_path = lockfile.lock().filename.clone();
|
||||||
|
@ -1595,6 +1596,7 @@ impl Inner {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(package_json) = &self.maybe_package_json {
|
if let Some(package_json) = &self.maybe_package_json {
|
||||||
// always update the package json if the deno config changes
|
// always update the package json if the deno config changes
|
||||||
if touched || changes.contains(&package_json.specifier()) {
|
if touched || changes.contains(&package_json.specifier()) {
|
||||||
|
@ -1604,16 +1606,21 @@ impl Inner {
|
||||||
touched = true;
|
touched = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the current import map, or config file has changed, we need to
|
// if the current import map, or config file has changed, we need to
|
||||||
// reload the import map
|
// reload the import map
|
||||||
if let Some(import_map_uri) = &self.maybe_import_map_uri {
|
let import_map_changed = self
|
||||||
if touched || changes.contains(import_map_uri) {
|
.maybe_import_map_uri
|
||||||
|
.as_ref()
|
||||||
|
.map(|uri| changes.contains(uri))
|
||||||
|
.unwrap_or(false);
|
||||||
|
if touched || import_map_changed {
|
||||||
if let Err(err) = self.update_import_map().await {
|
if let Err(err) = self.update_import_map().await {
|
||||||
self.client.show_message(MessageType::WARNING, err);
|
self.client.show_message(MessageType::WARNING, err);
|
||||||
}
|
}
|
||||||
touched = true;
|
touched = true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if touched {
|
if touched {
|
||||||
self.recreate_npm_services_if_necessary().await;
|
self.recreate_npm_services_if_necessary().await;
|
||||||
self.refresh_documents_config();
|
self.refresh_documents_config();
|
||||||
|
|
|
@ -359,6 +359,79 @@ fn lsp_import_map_embedded_in_config_file() {
|
||||||
client.shutdown();
|
client.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn lsp_import_map_embedded_in_config_file_after_initialize() {
|
||||||
|
let context = TestContextBuilder::new().use_temp_cwd().build();
|
||||||
|
let temp_dir = context.temp_dir();
|
||||||
|
temp_dir.write("deno.embedded_import_map.jsonc", "{}");
|
||||||
|
temp_dir.create_dir_all("lib");
|
||||||
|
temp_dir.write("lib/b.ts", r#"export const b = "b";"#);
|
||||||
|
|
||||||
|
let mut client = context.new_lsp_command().build();
|
||||||
|
client.initialize(|builder| {
|
||||||
|
builder.set_config("./deno.embedded_import_map.jsonc");
|
||||||
|
});
|
||||||
|
|
||||||
|
let uri = temp_dir.uri().join("a.ts").unwrap();
|
||||||
|
|
||||||
|
let diagnostics = client.did_open(json!({
|
||||||
|
"textDocument": {
|
||||||
|
"uri": uri,
|
||||||
|
"languageId": "typescript",
|
||||||
|
"version": 1,
|
||||||
|
"text": "import { b } from \"/~/b.ts\";\n\nconsole.log(b);\n"
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
assert_eq!(diagnostics.all().len(), 1);
|
||||||
|
|
||||||
|
// update the import map
|
||||||
|
temp_dir.write(
|
||||||
|
"deno.embedded_import_map.jsonc",
|
||||||
|
r#"{
|
||||||
|
"imports": {
|
||||||
|
"/~/": "./lib/"
|
||||||
|
}
|
||||||
|
}"#,
|
||||||
|
);
|
||||||
|
|
||||||
|
client.did_change_watched_files(json!({
|
||||||
|
"changes": [{
|
||||||
|
"uri": temp_dir.uri().join("deno.embedded_import_map.jsonc").unwrap(),
|
||||||
|
"type": 2
|
||||||
|
}]
|
||||||
|
}));
|
||||||
|
|
||||||
|
assert_eq!(client.read_diagnostics().all().len(), 0);
|
||||||
|
|
||||||
|
let res = client.write_request(
|
||||||
|
"textDocument/hover",
|
||||||
|
json!({
|
||||||
|
"textDocument": {
|
||||||
|
"uri": uri
|
||||||
|
},
|
||||||
|
"position": { "line": 2, "character": 12 }
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
res,
|
||||||
|
json!({
|
||||||
|
"contents": [
|
||||||
|
{
|
||||||
|
"language": "typescript",
|
||||||
|
"value":"(alias) const b: \"b\"\nimport b"
|
||||||
|
},
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"range": {
|
||||||
|
"start": { "line": 2, "character": 12 },
|
||||||
|
"end": { "line": 2, "character": 13 }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
client.shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn lsp_deno_task() {
|
fn lsp_deno_task() {
|
||||||
let context = TestContextBuilder::new().use_temp_cwd().build();
|
let context = TestContextBuilder::new().use_temp_cwd().build();
|
||||||
|
|
|
@ -655,6 +655,10 @@ impl LspClient {
|
||||||
self.write_response(id, result);
|
self.write_response(id, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn did_change_watched_files(&mut self, params: Value) {
|
||||||
|
self.write_notification("workspace/didChangeWatchedFiles", params);
|
||||||
|
}
|
||||||
|
|
||||||
fn get_latest_diagnostic_batch_index(&mut self) -> usize {
|
fn get_latest_diagnostic_batch_index(&mut self) -> usize {
|
||||||
let result = self
|
let result = self
|
||||||
.write_request("deno/internalLatestDiagnosticBatchIndex", json!(null));
|
.write_request("deno/internalLatestDiagnosticBatchIndex", json!(null));
|
||||||
|
|
Loading…
Reference in a new issue