summaryrefslogtreecommitdiff
path: root/cli/lsp/language_server.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-03-23 10:23:04 -0400
committerGitHub <noreply@github.com>2023-03-23 14:23:04 +0000
commit6e5a631fe094fa77209d51b65adfcc52d738e197 (patch)
tree75b872b56490af578b28f8a973a438403af80a62 /cli/lsp/language_server.rs
parenta3529d02329e0d2127ad2a5bb78b4c476ddd6984 (diff)
refactor(lsp): add `LspClientUrl` (#18376)
This will make it a bit harder to accidentally use a client url in the wrong place. I don't fully understand why we do this mapping, but this will help prevent bugs like #18373 Closes #18374
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r--cli/lsp/language_server.rs13
1 files changed, 9 insertions, 4 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs
index 519d1c94f..72beb04bb 100644
--- a/cli/lsp/language_server.rs
+++ b/cli/lsp/language_server.rs
@@ -59,6 +59,7 @@ use super::tsc::Assets;
use super::tsc::AssetsSnapshot;
use super::tsc::TsServer;
use super::urls;
+use super::urls::LspClientUrl;
use crate::args::get_root_cert_store;
use crate::args::package_json;
use crate::args::resolve_import_map_from_specifier;
@@ -338,7 +339,10 @@ impl LanguageServer {
match &ls.config.workspace_folders {
Some(entry) => {
for (specifier, folder) in entry {
- specifiers.insert(specifier.clone(), folder.uri.clone());
+ specifiers.insert(
+ specifier.clone(),
+ LspClientUrl::new(folder.uri.clone()),
+ );
}
}
None => {
@@ -2868,9 +2872,10 @@ impl tower_lsp::LanguageServer for LanguageServer {
let (client, client_uri, specifier, had_specifier_settings) = {
let mut inner = self.0.write().await;
let client = inner.client.clone();
- let client_uri = params.text_document.uri.clone();
- let specifier =
- inner.url_map.normalize_url(&client_uri, LspUrlKind::File);
+ let client_uri = LspClientUrl::new(params.text_document.uri.clone());
+ let specifier = inner
+ .url_map
+ .normalize_url(client_uri.as_url(), LspUrlKind::File);
let document = inner.did_open(&specifier, params).await;
let has_specifier_settings =
inner.config.has_specifier_settings(&specifier);