summaryrefslogtreecommitdiff
path: root/cli/tools
diff options
context:
space:
mode:
Diffstat (limited to 'cli/tools')
-rw-r--r--cli/tools/check.rs48
-rw-r--r--cli/tools/coverage/mod.rs14
-rw-r--r--cli/tools/task.rs2
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(),
};