diff options
Diffstat (limited to 'cli/tools')
-rw-r--r-- | cli/tools/check.rs | 48 | ||||
-rw-r--r-- | cli/tools/coverage/mod.rs | 14 | ||||
-rw-r--r-- | cli/tools/task.rs | 2 |
3 files changed, 34 insertions, 30 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 diff --git a/cli/tools/coverage/mod.rs b/cli/tools/coverage/mod.rs index 2b8e67c82..23aef89fb 100644 --- a/cli/tools/coverage/mod.rs +++ b/cli/tools/coverage/mod.rs @@ -5,6 +5,7 @@ use crate::args::FileFlags; use crate::args::Flags; use crate::colors; use crate::factory::CliFactory; +use crate::npm::CliNpmResolver; use crate::tools::fmt::format_json; use crate::tools::test::is_supported_test_path; use crate::util::fs::FileCollector; @@ -601,7 +602,7 @@ fn filter_coverages( coverages: Vec<ScriptCoverage>, include: Vec<String>, exclude: Vec<String>, - npm_root_dir: &str, + npm_resolver: &dyn CliNpmResolver, ) -> Vec<ScriptCoverage> { let include: Vec<Regex> = include.iter().map(|e| Regex::new(e).unwrap()).collect(); @@ -613,11 +614,14 @@ fn filter_coverages( .into_iter() .filter(|e| { let is_internal = e.url.starts_with("ext:") - || e.url.starts_with(npm_root_dir) || e.url.ends_with("__anonymous__") || e.url.ends_with("$deno$test.js") || e.url.ends_with(".snap") - || is_supported_test_path(Path::new(e.url.as_str())); + || is_supported_test_path(Path::new(e.url.as_str())) + || Url::parse(&e.url) + .ok() + .map(|url| npm_resolver.in_npm_package(&url)) + .unwrap_or(false); let is_included = include.iter().any(|p| p.is_match(&e.url)); let is_excluded = exclude.iter().any(|p| p.is_match(&e.url)); @@ -636,7 +640,7 @@ pub async fn cover_files( } let factory = CliFactory::from_flags(flags).await?; - let root_dir_url = factory.npm_resolver().await?.root_dir_url(); + let npm_resolver = factory.npm_resolver().await?; let file_fetcher = factory.file_fetcher()?; let cli_options = factory.cli_options(); let emitter = factory.emitter()?; @@ -646,7 +650,7 @@ pub async fn cover_files( script_coverages, coverage_flags.include, coverage_flags.exclude, - root_dir_url.as_str(), + npm_resolver.as_ref(), ); let proc_coverages: Vec<_> = script_coverages diff --git a/cli/tools/task.rs b/cli/tools/task.rs index 93e78dc56..f80a32577 100644 --- a/cli/tools/task.rs +++ b/cli/tools/task.rs @@ -126,7 +126,7 @@ pub async fn execute_script( } None => Default::default(), }; - let env_vars = match npm_resolver.node_modules_path() { + let env_vars = match npm_resolver.root_node_modules_path() { Some(dir_path) => collect_env_vars_with_node_modules_dir(&dir_path), None => collect_env_vars(), }; |