Skip to content

Commit

Permalink
refactor(lsp): remove Send + Sync requirement (#28035)
Browse files Browse the repository at this point in the history
  • Loading branch information
dsherret authored Feb 12, 2025
1 parent d29f9f9 commit 7a11264
Show file tree
Hide file tree
Showing 19 changed files with 316 additions and 604 deletions.
10 changes: 5 additions & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ tokio-socks = "0.5.1"
tokio-util = "0.7.4"
tower = { version = "0.5.2", default-features = false, features = ["retry", "util"] }
tower-http = { version = "0.6.1", features = ["decompression-br", "decompression-gzip"] }
tower-lsp = { package = "deno_tower_lsp", version = "0.1.0", features = ["proposed"] }
tower-lsp = { package = "deno_tower_lsp", version = "=0.3.0", features = ["proposed"] }
tower-service = "0.3.2"
twox-hash = "=1.6.3"
url = { version = "2.5", features = ["serde", "expose_internals"] }
Expand Down
2 changes: 1 addition & 1 deletion cli/bench/lsp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ fn patch_uris<'a>(
};

if let Some(new_req) = new_req {
*req = new_req;
*req = new_req.request;
}
}
}
Expand Down
22 changes: 9 additions & 13 deletions cli/jsr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,11 @@ impl JsrFetchResolver {
}
let fetch_package_info = || async {
let meta_url = jsr_url().join(&format!("{}/meta.json", name)).ok()?;
let file_fetcher = self.file_fetcher.clone();
// spawn due to the lsp's `Send` requirement
let file = deno_core::unsync::spawn(async move {
file_fetcher.fetch_bypass_permissions(&meta_url).await.ok()
})
.await
.ok()??;
let file = self
.file_fetcher
.fetch_bypass_permissions(&meta_url)
.await
.ok()?;
serde_json::from_slice::<JsrPackageInfo>(&file.source).ok()
};
let info = fetch_package_info().await.map(Arc::new);
Expand All @@ -92,12 +90,10 @@ impl JsrFetchResolver {
.join(&format!("{}/{}_meta.json", &nv.name, &nv.version))
.ok()?;
let file_fetcher = self.file_fetcher.clone();
// spawn due to the lsp's `Send` requirement
let file = deno_core::unsync::spawn(async move {
file_fetcher.fetch_bypass_permissions(&meta_url).await.ok()
})
.await
.ok()??;
let file = file_fetcher
.fetch_bypass_permissions(&meta_url)
.await
.ok()?;
partial_jsr_package_version_info_from_slice(&file.source).ok()
};
let info = fetch_package_version_info().await.map(Arc::new);
Expand Down
16 changes: 5 additions & 11 deletions cli/lsp/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1534,17 +1534,11 @@ impl ConfigData {
import_map_url.clone(),
ConfigWatchedFileType::ImportMap,
);
// spawn due to the lsp's `Send` requirement
let fetch_result =
deno_core::unsync::spawn({
let file_fetcher = file_fetcher.cloned().unwrap();
let import_map_url = import_map_url.clone();
async move {
file_fetcher.fetch_bypass_permissions(&import_map_url).await
}
})
.await
.unwrap();
let fetch_result = file_fetcher
.as_ref()
.unwrap()
.fetch_bypass_permissions(import_map_url)
.await;

let value_result = fetch_result.and_then(|f| {
serde_json::from_slice::<Value>(&f.source).map_err(|e| e.into())
Expand Down
10 changes: 4 additions & 6 deletions cli/lsp/jsr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ impl CliJsrSearchApi {
}
}

#[async_trait::async_trait]
#[async_trait::async_trait(?Send)]
impl PackageSearchApi for CliJsrSearchApi {
async fn search(&self, query: &str) -> Result<Arc<Vec<String>>, AnyError> {
if let Some(names) = self.search_cache.get(query) {
Expand All @@ -316,12 +316,10 @@ impl PackageSearchApi for CliJsrSearchApi {
let mut search_url = jsr_api_url().join("packages")?;
search_url.query_pairs_mut().append_pair("query", query);
let file_fetcher = self.file_fetcher.clone();
// spawn due to the lsp's `Send` requirement
let file = deno_core::unsync::spawn(async move {
let file = {
let file = file_fetcher.fetch_bypass_permissions(&search_url).await?;
TextDecodedFile::decode(file)
})
.await??;
TextDecodedFile::decode(file)?
};
let names = Arc::new(parse_jsr_search_response(&file.source)?);
self.search_cache.insert(query.to_string(), names.clone());
Ok(names)
Expand Down
Loading

0 comments on commit 7a11264

Please sign in to comment.