diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-07-20 14:05:52 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-20 14:05:52 -0400 |
commit | 235fdc243faa6d0fc008dc7fa482c29e511c2fa0 (patch) | |
tree | c01444f783abe922b98da1b416e15fba8409732d /cli/lsp/language_server.rs | |
parent | bf775e3306faeb2a18525ba38f9c3e60e1e5ed16 (diff) |
fix(lsp): auto-discover deno.json in more cases (#19894)
We weren't auto-discovering the deno.json in two cases:
1. A project that didn't have a deno.json and just added one.
2. After a syntax error in the deno.json.
This now rediscovers it in both these cases.
Closes https://github.com/denoland/vscode_deno/issues/867
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r-- | cli/lsp/language_server.rs | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index 6dead0fcf..5a4c3aeae 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -1493,22 +1493,30 @@ impl Inner { .collect(); // if the current deno.json has changed, we need to reload it - if let Some(config_file) = self.config.maybe_config_file() { - if changes.contains(&config_file.specifier) - || self - .config - .maybe_lockfile() - .map(|l| has_lockfile_changed(&l.lock(), &changes)) - .unwrap_or(false) - { - if let Err(err) = self.update_config_file().await { - self.client.show_message(MessageType::WARNING, err); - } - if let Err(err) = self.update_tsconfig().await { - self.client.show_message(MessageType::WARNING, err); - } - touched = true; + let has_config_changed = match self.config.maybe_config_file() { + Some(config_file) => changes.contains(&config_file.specifier), + None => { + // check for auto-discovery + changes.iter().any(|url| { + url.path().ends_with("/deno.json") + || url.path().ends_with("/deno.jsonc") + }) } + } || match self.config.maybe_lockfile() { + Some(lockfile) => has_lockfile_changed(&lockfile.lock(), &changes), + None => { + // check for auto-discovery + changes.iter().any(|url| url.path().ends_with("/deno.lock")) + } + }; + if has_config_changed { + if let Err(err) = self.update_config_file().await { + self.client.show_message(MessageType::WARNING, err); + } + if let Err(err) = self.update_tsconfig().await { + self.client.show_message(MessageType::WARNING, err); + } + touched = true; } if let Some(package_json) = &self.maybe_package_json { @@ -2940,7 +2948,7 @@ impl tower_lsp::LanguageServer for LanguageServer { let watch_registration_options = DidChangeWatchedFilesRegistrationOptions { watchers: vec![FileSystemWatcher { - glob_pattern: "**/*.{json,jsonc}".to_string(), + glob_pattern: "**/*.{json,jsonc,lock}".to_string(), kind: Some(WatchKind::Change), }], }; |