summaryrefslogtreecommitdiff
path: root/cli/lsp
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp')
-rw-r--r--cli/lsp/documents.rs33
-rw-r--r--cli/lsp/language_server.rs48
2 files changed, 45 insertions, 36 deletions
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs
index 80c3bc742..c003a61c7 100644
--- a/cli/lsp/documents.rs
+++ b/cli/lsp/documents.rs
@@ -828,7 +828,7 @@ pub struct Documents {
imports: Arc<IndexMap<ModuleSpecifier, GraphImport>>,
/// A resolver that takes into account currently loaded import map and JSX
/// settings.
- resolver: CliGraphResolver,
+ resolver: Arc<CliGraphResolver>,
/// The npm package requirements found in npm specifiers.
npm_specifier_reqs: Arc<Vec<NpmPackageReq>>,
/// Gets if any document had a node: specifier such that a @types/node package
@@ -849,7 +849,7 @@ impl Documents {
lsp_client_kind,
resolver_config_hash: 0,
imports: Default::default(),
- resolver: CliGraphResolver::default(),
+ resolver: Default::default(),
npm_specifier_reqs: Default::default(),
has_injected_types_node_package: false,
specifier_resolver: Arc::new(SpecifierResolver::new(location)),
@@ -1057,7 +1057,7 @@ impl Documents {
&self,
specifiers: Vec<String>,
referrer_doc: &AssetOrDocument,
- maybe_npm_resolver: Option<&NpmPackageResolver>,
+ maybe_npm_resolver: Option<&Arc<NpmPackageResolver>>,
) -> Vec<Option<(ModuleSpecifier, MediaType)>> {
let referrer = referrer_doc.specifier();
let dependencies = match referrer_doc {
@@ -1074,7 +1074,7 @@ impl Documents {
&specifier,
referrer,
NodeResolutionMode::Types,
- npm_resolver,
+ &npm_resolver.as_require_npm_resolver(),
&mut PermissionsContainer::allow_all(),
)
.ok()
@@ -1166,8 +1166,8 @@ impl Documents {
maybe_import_map: Option<Arc<import_map::ImportMap>>,
maybe_config_file: Option<&ConfigFile>,
maybe_package_json: Option<&PackageJson>,
- npm_registry_api: CliNpmRegistryApi,
- npm_resolution: NpmResolution,
+ npm_registry_api: Arc<CliNpmRegistryApi>,
+ npm_resolution: Arc<NpmResolution>,
) {
fn calculate_resolver_config_hash(
enabled_urls: &[Url],
@@ -1218,19 +1218,19 @@ impl Documents {
maybe_jsx_config.as_ref(),
maybe_package_json_deps.as_ref(),
);
- let deps_installer = PackageJsonDepsInstaller::new(
+ let deps_installer = Arc::new(PackageJsonDepsInstaller::new(
npm_registry_api.clone(),
npm_resolution.clone(),
maybe_package_json_deps,
- );
- self.resolver = CliGraphResolver::new(
+ ));
+ self.resolver = Arc::new(CliGraphResolver::new(
maybe_jsx_config,
maybe_import_map,
false,
npm_registry_api,
npm_resolution,
deps_installer,
- );
+ ));
self.imports = Arc::new(
if let Some(Ok(imports)) =
maybe_config_file.map(|cf| cf.to_maybe_imports())
@@ -1418,7 +1418,7 @@ impl Documents {
fn resolve_dependency(
&self,
specifier: &ModuleSpecifier,
- maybe_npm_resolver: Option<&NpmPackageResolver>,
+ maybe_npm_resolver: Option<&Arc<NpmPackageResolver>>,
) -> Option<(ModuleSpecifier, MediaType)> {
if let Ok(npm_ref) = NpmPackageReqReference::from_specifier(specifier) {
return node_resolve_npm_req_ref(npm_ref, maybe_npm_resolver);
@@ -1453,7 +1453,7 @@ impl Documents {
fn node_resolve_npm_req_ref(
npm_req_ref: NpmPackageReqReference,
- maybe_npm_resolver: Option<&NpmPackageResolver>,
+ maybe_npm_resolver: Option<&Arc<NpmPackageResolver>>,
) -> Option<(ModuleSpecifier, MediaType)> {
maybe_npm_resolver.map(|npm_resolver| {
NodeResolution::into_specifier_and_media_type(
@@ -1864,9 +1864,12 @@ console.log(b, "hello deno");
#[test]
fn test_documents_refresh_dependencies_config_change() {
- let npm_registry_api = CliNpmRegistryApi::new_uninitialized();
- let npm_resolution =
- NpmResolution::from_serialized(npm_registry_api.clone(), None, None);
+ let npm_registry_api = Arc::new(CliNpmRegistryApi::new_uninitialized());
+ let npm_resolution = Arc::new(NpmResolution::from_serialized(
+ npm_registry_api.clone(),
+ None,
+ None,
+ ));
// it should never happen that a user of this API causes this to happen,
// but we'll guard against it anyway
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs
index efd27bc99..3f395f410 100644
--- a/cli/lsp/language_server.rs
+++ b/cli/lsp/language_server.rs
@@ -101,7 +101,7 @@ pub struct StateSnapshot {
pub cache_metadata: cache::CacheMetadata,
pub documents: Documents,
pub maybe_import_map: Option<Arc<ImportMap>>,
- pub maybe_npm_resolver: Option<NpmPackageResolver>,
+ pub maybe_npm_resolver: Option<Arc<NpmPackageResolver>>,
}
#[derive(Debug)]
@@ -145,13 +145,13 @@ pub struct Inner {
/// A lazily create "server" for handling test run requests.
maybe_testing_server: Option<testing::TestServer>,
/// Npm's registry api.
- npm_api: CliNpmRegistryApi,
+ npm_api: Arc<CliNpmRegistryApi>,
/// Npm cache
- npm_cache: NpmCache,
+ npm_cache: Arc<NpmCache>,
/// Npm resolution that is stored in memory.
- npm_resolution: NpmResolution,
+ npm_resolution: Arc<NpmResolution>,
/// Resolver for npm packages.
- npm_resolver: NpmPackageResolver,
+ npm_resolver: Arc<NpmPackageResolver>,
/// A collection of measurements which instrument that performance of the LSP.
performance: Arc<Performance>,
/// A memoized version of fixable diagnostic codes retrieved from TypeScript.
@@ -182,13 +182,15 @@ impl LanguageServer {
.into_iter()
.map(|d| (d.specifier().clone(), d))
.collect::<HashMap<_, _>>();
+ // todo(dsherret): don't use ProcState here
let ps = ProcState::from_cli_options(Arc::new(cli_options)).await?;
- let mut inner_loader = ps.create_graph_loader();
+ let mut inner_loader = ps.module_graph_builder.create_graph_loader();
let mut loader = crate::lsp::documents::OpenDocumentsGraphLoader {
inner_loader: &mut inner_loader,
open_docs: &open_docs,
};
let graph = ps
+ .module_graph_builder
.create_graph_with_loader(roots.clone(), &mut loader)
.await?;
graph_util::graph_valid(
@@ -418,14 +420,14 @@ fn create_lsp_structs(
dir: &DenoDir,
http_client: HttpClient,
) -> (
- CliNpmRegistryApi,
- NpmCache,
- NpmPackageResolver,
- NpmResolution,
+ Arc<CliNpmRegistryApi>,
+ Arc<NpmCache>,
+ Arc<NpmPackageResolver>,
+ Arc<NpmResolution>,
) {
let registry_url = CliNpmRegistryApi::default_url();
let progress_bar = ProgressBar::new(ProgressBarStyle::TextOnly);
- let npm_cache = NpmCache::from_deno_dir(
+ let npm_cache = Arc::new(NpmCache::from_deno_dir(
dir,
// Use an "only" cache setting in order to make the
// user do an explicit "cache" command and prevent
@@ -434,14 +436,15 @@ fn create_lsp_structs(
CacheSetting::Only,
http_client.clone(),
progress_bar.clone(),
- );
- let api = CliNpmRegistryApi::new(
+ ));
+ let api = Arc::new(CliNpmRegistryApi::new(
registry_url.clone(),
npm_cache.clone(),
http_client,
progress_bar.clone(),
- );
- let resolution = NpmResolution::from_serialized(api.clone(), None, None);
+ ));
+ let resolution =
+ Arc::new(NpmResolution::from_serialized(api.clone(), None, None));
let fs_resolver = create_npm_fs_resolver(
npm_cache.clone(),
&progress_bar,
@@ -452,7 +455,11 @@ fn create_lsp_structs(
(
api,
npm_cache,
- NpmPackageResolver::new(resolution.clone(), fs_resolver, None),
+ Arc::new(NpmPackageResolver::new(
+ resolution.clone(),
+ fs_resolver,
+ None,
+ )),
resolution,
)
}
@@ -695,12 +702,12 @@ impl Inner {
maybe_import_map: self.maybe_import_map.clone(),
maybe_npm_resolver: Some({
// create a new snapshotted npm resolution and resolver
- let resolution = NpmResolution::new(
+ let resolution = Arc::new(NpmResolution::new(
self.npm_api.clone(),
self.npm_resolution.snapshot(),
None,
- );
- NpmPackageResolver::new(
+ ));
+ Arc::new(NpmPackageResolver::new(
resolution.clone(),
create_npm_fs_resolver(
self.npm_cache.clone(),
@@ -710,7 +717,7 @@ impl Inner {
None,
),
None,
- )
+ ))
}),
})
}
@@ -1130,7 +1137,6 @@ impl Inner {
self.client.show_message(MessageType::WARNING, err);
}
- // self.refresh_documents_config(); // todo(THIS PR): REMOVE
self.assets.intitialize(self.snapshot()).await;
self.performance.measure(mark);