1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-21 15:04:11 -05:00

feat: glob and directory support for deno check and deno cache cli arg paths (#25001)

Closes #24668
Closes #20813

---------

Co-authored-by: David Sherret <dsherret@gmail.com>
This commit is contained in:
Yazan AbdAl-Rahman 2024-08-20 21:38:06 +03:00 committed by GitHub
parent 1f47248143
commit a7c8bb1596
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 54 additions and 22 deletions

4
Cargo.lock generated
View file

@ -1360,9 +1360,9 @@ dependencies = [
[[package]] [[package]]
name = "deno_config" name = "deno_config"
version = "0.30.0" version = "0.30.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e287a8ab3552cf3ef8fc41b2bd7cc041c5e8e1a76de3aeb26e804b570bab37d7" checksum = "9657dbcc5210407fd9a1b1571310f2fe25c6dd6be2195c964d19f43d70045a95"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"deno_package_json", "deno_package_json",

View file

@ -65,7 +65,7 @@ winres.workspace = true
[dependencies] [dependencies]
deno_ast = { workspace = true, features = ["bundler", "cjs", "codegen", "proposal", "react", "sourcemap", "transforms", "typescript", "view", "visit"] } deno_ast = { workspace = true, features = ["bundler", "cjs", "codegen", "proposal", "react", "sourcemap", "transforms", "typescript", "view", "visit"] }
deno_cache_dir = { workspace = true } deno_cache_dir = { workspace = true }
deno_config = { version = "=0.30.0", features = ["workspace", "sync"] } deno_config = { version = "=0.30.1", features = ["workspace", "sync"] }
deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] } deno_core = { workspace = true, features = ["include_js_files_for_snapshotting"] }
deno_doc = { version = "0.146.0", features = ["html", "syntect"] } deno_doc = { version = "0.146.0", features = ["html", "syntect"] }
deno_emit = "=0.44.0" deno_emit = "=0.44.0"

View file

@ -3,15 +3,18 @@
use std::sync::Arc; use std::sync::Arc;
use deno_ast::ModuleSpecifier; use deno_ast::ModuleSpecifier;
use deno_config::glob::FilePatterns;
use deno_config::glob::PathOrPatternSet;
use deno_core::error::AnyError; use deno_core::error::AnyError;
use deno_core::parking_lot::RwLock; use deno_core::parking_lot::RwLock;
use deno_core::resolve_url_or_path;
use deno_graph::ModuleGraph; use deno_graph::ModuleGraph;
use deno_runtime::colors; use deno_runtime::colors;
use deno_runtime::deno_permissions::PermissionsContainer; use deno_runtime::deno_permissions::PermissionsContainer;
use crate::args::CliOptions; use crate::args::CliOptions;
use crate::module_loader::ModuleLoadPreparer; use crate::module_loader::ModuleLoadPreparer;
use crate::util::fs::collect_specifiers;
use crate::util::path::is_script_ext;
pub trait ModuleGraphContainer: Clone + 'static { pub trait ModuleGraphContainer: Clone + 'static {
/// Acquires a permit to modify the module graph without other code /// Acquires a permit to modify the module graph without other code
@ -99,24 +102,20 @@ impl MainModuleGraphContainer {
files: &[String], files: &[String],
) -> Result<Vec<ModuleSpecifier>, AnyError> { ) -> Result<Vec<ModuleSpecifier>, AnyError> {
let excludes = self.cli_options.workspace().resolve_config_excludes()?; let excludes = self.cli_options.workspace().resolve_config_excludes()?;
Ok( let include_patterns =
files PathOrPatternSet::from_include_relative_path_or_patterns(
.iter() self.cli_options.initial_cwd(),
.filter_map(|file| { files,
let file_url = )?;
resolve_url_or_path(file, self.cli_options.initial_cwd()).ok()?; let file_patterns = FilePatterns {
if file_url.scheme() != "file" { base: self.cli_options.initial_cwd().to_path_buf(),
return Some(file_url); include: Some(include_patterns),
} exclude: excludes,
// ignore local files that match any of files listed in `exclude` option };
let file_path = file_url.to_file_path().ok()?; collect_specifiers(
if excludes.matches_path(&file_path) { file_patterns,
None self.cli_options.vendor_dir_path().map(ToOwned::to_owned),
} else { |e| is_script_ext(e.path),
Some(file_url)
}
})
.collect::<Vec<_>>(),
) )
} }
} }

View file

@ -0,0 +1,5 @@
{
"args": "cache *.ts",
"output": "Download http://localhost:4545/echo.ts\n",
"exitCode": 0
}

View file

@ -0,0 +1 @@
import "http://localhost:4545/non-existent.ts";

1
tests/specs/cache/globbing/main.ts vendored Normal file
View file

@ -0,0 +1 @@
import "http://localhost:4545/echo.ts";

View file

@ -0,0 +1,24 @@
{
"tests": {
"star": {
"args": "check *.ts",
"output": "Check [WILDLINE]main.ts\n",
"exitCode": 0
},
"star_not_found": {
"args": "check *.js",
"output": "Warning No matching files found.\n",
"exitCode": 0
},
"glob_star": {
"args": "check **/*.ts",
"output": "Check [WILDLINE]main.ts\nCheck [WILDLINE]sub_dir/main.ts\nerror: TS2322[WILDCARD]",
"exitCode": 1
},
"sub_dir": {
"args": "check sub_dir",
"output": "Check [WILDLINE]sub_dir/main.ts\nerror: TS2322[WILDCARD]",
"exitCode": 1
}
}
}

View file

View file

@ -0,0 +1 @@
console.log("globbing_support_done");

View file

@ -0,0 +1 @@
const value: number = "";