summaryrefslogtreecommitdiff
path: root/cli/tools/check.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2023-10-03 19:05:06 -0400
committerGitHub <noreply@github.com>2023-10-03 19:05:06 -0400
commit8c1677ecbcbb474fc6a5ac9b5f73b562677bb829 (patch)
tree885a45a67e6aed7dc70307df718b176a729c8655 /cli/tools/check.rs
parent494822175fd69f8c20a2e21ddcedcb3287064cce (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.rs48
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