diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-10-03 19:05:06 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-03 19:05:06 -0400 |
commit | 8c1677ecbcbb474fc6a5ac9b5f73b562677bb829 (patch) | |
tree | 885a45a67e6aed7dc70307df718b176a729c8655 /cli/tools/check.rs | |
parent | 494822175fd69f8c20a2e21ddcedcb3287064cce (diff) |
refactor(npm): break up `NpmModuleLoader` and move more methods into the managed `CliNpmResolver` (#20777)
Part of https://github.com/denoland/deno/issues/18967
Diffstat (limited to 'cli/tools/check.rs')
-rw-r--r-- | cli/tools/check.rs | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/cli/tools/check.rs b/cli/tools/check.rs index 0a25518e4..e960439a6 100644 --- a/cli/tools/check.rs +++ b/cli/tools/check.rs @@ -1,6 +1,5 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -use std::collections::HashMap; use std::collections::HashSet; use std::sync::Arc; @@ -11,8 +10,6 @@ use deno_graph::Module; use deno_graph::ModuleGraph; use deno_runtime::colors; use deno_runtime::deno_node::NodeResolver; -use deno_semver::package::PackageNv; -use deno_semver::package::PackageReq; use once_cell::sync::Lazy; use regex::Regex; @@ -95,19 +92,28 @@ impl TypeChecker { let debug = self.cli_options.log_level() == Some(log::Level::Debug); let cache = TypeCheckCache::new(self.caches.type_checking_cache_db()); let check_js = ts_config.get_check_js(); - let check_hash = match get_check_hash( - &graph, - self.npm_resolver.package_reqs(), - type_check_mode, - &ts_config, - ) { - CheckHashResult::NoFiles => return Ok(()), - CheckHashResult::Hash(hash) => hash, + let maybe_check_hash = match self.npm_resolver.check_state_hash() { + Some(npm_check_hash) => { + match get_check_hash( + &graph, + npm_check_hash, + type_check_mode, + &ts_config, + ) { + CheckHashResult::NoFiles => return Ok(()), + CheckHashResult::Hash(hash) => Some(hash), + } + } + None => None, // we can't determine a check hash }; // do not type check if we know this is type checked - if !options.reload && cache.has_check_hash(check_hash) { - return Ok(()); + if !options.reload { + if let Some(check_hash) = maybe_check_hash { + if cache.has_check_hash(check_hash) { + return Ok(()); + } + } } for root in &graph.roots { @@ -174,7 +180,9 @@ impl TypeChecker { } if diagnostics.is_empty() { - cache.add_check_hash(check_hash); + if let Some(check_hash) = maybe_check_hash { + cache.add_check_hash(check_hash); + } } log::debug!("{}", response.stats); @@ -196,7 +204,7 @@ enum CheckHashResult { /// be used to tell fn get_check_hash( graph: &ModuleGraph, - package_reqs: HashMap<PackageReq, PackageNv>, + package_reqs_hash: u64, type_check_mode: TypeCheckMode, ts_config: &TsConfig, ) -> CheckHashResult { @@ -270,15 +278,7 @@ fn get_check_hash( } } - // Check if any of the top level npm packages have changed. We could go - // further and check all the individual npm packages, but that's - // probably overkill. - let mut package_reqs = package_reqs.into_iter().collect::<Vec<_>>(); - package_reqs.sort_by(|a, b| a.0.cmp(&b.0)); // determinism - for (pkg_req, pkg_nv) in package_reqs { - hasher.write_hashable(&pkg_req); - hasher.write_hashable(&pkg_nv); - } + hasher.write_hashable(package_reqs_hash); if !has_file || !check_js && !has_file_to_type_check { // no files to type check |