mirror of
https://github.com/denoland/deno.git
synced 2024-11-21 15:04:11 -05:00
feat: default to TS for file extension and support ext flag in more scenarios (#25472)
Closes #11220 Currently does lint, fmt, and repl
This commit is contained in:
parent
7a41a93997
commit
a1d0a427e8
38 changed files with 257 additions and 69 deletions
|
@ -39,10 +39,14 @@
|
||||||
"tests/node_compat/runner/TODO.md",
|
"tests/node_compat/runner/TODO.md",
|
||||||
"tests/node_compat/test",
|
"tests/node_compat/test",
|
||||||
"tests/registry/",
|
"tests/registry/",
|
||||||
|
"tests/specs/bench/default_ts",
|
||||||
"tests/specs/fmt",
|
"tests/specs/fmt",
|
||||||
"tests/specs/lint/bom",
|
"tests/specs/lint/bom",
|
||||||
|
"tests/specs/lint/default_ts",
|
||||||
"tests/specs/lint/syntax_error_reporting",
|
"tests/specs/lint/syntax_error_reporting",
|
||||||
"tests/specs/publish/no_check_surfaces_syntax_error",
|
"tests/specs/publish/no_check_surfaces_syntax_error",
|
||||||
|
"tests/specs/run/default_ts",
|
||||||
|
"tests/specs/test/default_ts",
|
||||||
"tests/testdata/byte_order_mark.ts",
|
"tests/testdata/byte_order_mark.ts",
|
||||||
"tests/testdata/encoding",
|
"tests/testdata/encoding",
|
||||||
"tests/testdata/file_extensions/ts_with_js_extension.js",
|
"tests/testdata/file_extensions/ts_with_js_extension.js",
|
||||||
|
|
|
@ -299,7 +299,6 @@ pub struct LintFlags {
|
||||||
pub json: bool,
|
pub json: bool,
|
||||||
pub compact: bool,
|
pub compact: bool,
|
||||||
pub watch: Option<WatchFlags>,
|
pub watch: Option<WatchFlags>,
|
||||||
pub ext: Option<String>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl LintFlags {
|
impl LintFlags {
|
||||||
|
@ -1629,6 +1628,7 @@ If you specify a directory instead of a file, the path is expanded to all contai
|
||||||
.arg(no_clear_screen_arg())
|
.arg(no_clear_screen_arg())
|
||||||
.arg(script_arg().last(true))
|
.arg(script_arg().last(true))
|
||||||
.arg(env_file_arg())
|
.arg(env_file_arg())
|
||||||
|
.arg(executable_ext_arg())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2125,9 +2125,6 @@ Ignore formatting a file by adding an ignore comment at the top of the file:
|
||||||
Arg::new("ext")
|
Arg::new("ext")
|
||||||
.long("ext")
|
.long("ext")
|
||||||
.help("Set content type of the supplied file")
|
.help("Set content type of the supplied file")
|
||||||
// prefer using ts for formatting instead of js because ts works in more scenarios
|
|
||||||
.default_value("ts")
|
|
||||||
.hide_default_value(true)
|
|
||||||
.value_parser([
|
.value_parser([
|
||||||
"ts", "tsx", "js", "jsx", "md", "json", "jsonc", "css", "scss",
|
"ts", "tsx", "js", "jsx", "md", "json", "jsonc", "css", "scss",
|
||||||
"sass", "less", "html", "svelte", "vue", "astro", "yml", "yaml",
|
"sass", "less", "html", "svelte", "vue", "astro", "yml", "yaml",
|
||||||
|
@ -2910,6 +2907,7 @@ or <c>**/__tests__/**</>:
|
||||||
.action(ArgAction::SetTrue)
|
.action(ArgAction::SetTrue)
|
||||||
)
|
)
|
||||||
.arg(env_file_arg())
|
.arg(env_file_arg())
|
||||||
|
.arg(executable_ext_arg())
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4074,6 +4072,7 @@ fn bench_parse(
|
||||||
flags.type_check_mode = TypeCheckMode::Local;
|
flags.type_check_mode = TypeCheckMode::Local;
|
||||||
|
|
||||||
runtime_args_parse(flags, matches, true, false)?;
|
runtime_args_parse(flags, matches, true, false)?;
|
||||||
|
ext_arg_parse(flags, matches);
|
||||||
|
|
||||||
// NOTE: `deno bench` always uses `--no-prompt`, tests shouldn't ever do
|
// NOTE: `deno bench` always uses `--no-prompt`, tests shouldn't ever do
|
||||||
// interactive prompts, unless done by user code
|
// interactive prompts, unless done by user code
|
||||||
|
@ -4597,8 +4596,9 @@ fn lint_parse(
|
||||||
matches: &mut ArgMatches,
|
matches: &mut ArgMatches,
|
||||||
) -> clap::error::Result<()> {
|
) -> clap::error::Result<()> {
|
||||||
unstable_args_parse(flags, matches, UnstableArgsConfig::ResolutionOnly);
|
unstable_args_parse(flags, matches, UnstableArgsConfig::ResolutionOnly);
|
||||||
|
ext_arg_parse(flags, matches);
|
||||||
config_args_parse(flags, matches);
|
config_args_parse(flags, matches);
|
||||||
|
|
||||||
let files = match matches.remove_many::<String>("files") {
|
let files = match matches.remove_many::<String>("files") {
|
||||||
Some(f) => f.collect(),
|
Some(f) => f.collect(),
|
||||||
None => vec![],
|
None => vec![],
|
||||||
|
@ -4625,7 +4625,6 @@ fn lint_parse(
|
||||||
|
|
||||||
let json = matches.get_flag("json");
|
let json = matches.get_flag("json");
|
||||||
let compact = matches.get_flag("compact");
|
let compact = matches.get_flag("compact");
|
||||||
let ext = matches.remove_one::<String>("ext");
|
|
||||||
|
|
||||||
flags.subcommand = DenoSubcommand::Lint(LintFlags {
|
flags.subcommand = DenoSubcommand::Lint(LintFlags {
|
||||||
files: FileFlags {
|
files: FileFlags {
|
||||||
|
@ -4640,7 +4639,6 @@ fn lint_parse(
|
||||||
json,
|
json,
|
||||||
compact,
|
compact,
|
||||||
watch: watch_arg_parse(matches)?,
|
watch: watch_arg_parse(matches)?,
|
||||||
ext,
|
|
||||||
});
|
});
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -4821,6 +4819,8 @@ fn test_parse(
|
||||||
) -> clap::error::Result<()> {
|
) -> clap::error::Result<()> {
|
||||||
flags.type_check_mode = TypeCheckMode::Local;
|
flags.type_check_mode = TypeCheckMode::Local;
|
||||||
runtime_args_parse(flags, matches, true, true)?;
|
runtime_args_parse(flags, matches, true, true)?;
|
||||||
|
ext_arg_parse(flags, matches);
|
||||||
|
|
||||||
// NOTE: `deno test` always uses `--no-prompt`, tests shouldn't ever do
|
// NOTE: `deno test` always uses `--no-prompt`, tests shouldn't ever do
|
||||||
// interactive prompts, unless done by user code
|
// interactive prompts, unless done by user code
|
||||||
flags.permissions.no_prompt = true;
|
flags.permissions.no_prompt = true;
|
||||||
|
@ -6273,7 +6273,6 @@ mod tests {
|
||||||
unstable_yaml: false,
|
unstable_yaml: false,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
}),
|
}),
|
||||||
ext: Some("ts".to_string()),
|
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -6300,7 +6299,6 @@ mod tests {
|
||||||
unstable_yaml: false,
|
unstable_yaml: false,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
}),
|
}),
|
||||||
ext: Some("ts".to_string()),
|
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -6327,7 +6325,6 @@ mod tests {
|
||||||
unstable_yaml: false,
|
unstable_yaml: false,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
}),
|
}),
|
||||||
ext: Some("ts".to_string()),
|
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -6354,7 +6351,6 @@ mod tests {
|
||||||
unstable_yaml: false,
|
unstable_yaml: false,
|
||||||
watch: Some(Default::default()),
|
watch: Some(Default::default()),
|
||||||
}),
|
}),
|
||||||
ext: Some("ts".to_string()),
|
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -6394,7 +6390,6 @@ mod tests {
|
||||||
exclude: vec![],
|
exclude: vec![],
|
||||||
})
|
})
|
||||||
}),
|
}),
|
||||||
ext: Some("ts".to_string()),
|
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -6428,7 +6423,6 @@ mod tests {
|
||||||
unstable_yaml: false,
|
unstable_yaml: false,
|
||||||
watch: Some(Default::default()),
|
watch: Some(Default::default()),
|
||||||
}),
|
}),
|
||||||
ext: Some("ts".to_string()),
|
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -6455,7 +6449,6 @@ mod tests {
|
||||||
unstable_yaml: false,
|
unstable_yaml: false,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
}),
|
}),
|
||||||
ext: Some("ts".to_string()),
|
|
||||||
config_flag: ConfigFlag::Path("deno.jsonc".to_string()),
|
config_flag: ConfigFlag::Path("deno.jsonc".to_string()),
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
|
@ -6491,7 +6484,6 @@ mod tests {
|
||||||
watch: Some(Default::default()),
|
watch: Some(Default::default()),
|
||||||
}),
|
}),
|
||||||
config_flag: ConfigFlag::Path("deno.jsonc".to_string()),
|
config_flag: ConfigFlag::Path("deno.jsonc".to_string()),
|
||||||
ext: Some("ts".to_string()),
|
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -6530,7 +6522,6 @@ mod tests {
|
||||||
unstable_yaml: false,
|
unstable_yaml: false,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
}),
|
}),
|
||||||
ext: Some("ts".to_string()),
|
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -6564,7 +6555,6 @@ mod tests {
|
||||||
unstable_yaml: false,
|
unstable_yaml: false,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
}),
|
}),
|
||||||
ext: Some("ts".to_string()),
|
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -6589,7 +6579,6 @@ mod tests {
|
||||||
json: false,
|
json: false,
|
||||||
compact: false,
|
compact: false,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
ext: None,
|
|
||||||
}),
|
}),
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
|
@ -6618,7 +6607,6 @@ mod tests {
|
||||||
json: false,
|
json: false,
|
||||||
compact: false,
|
compact: false,
|
||||||
watch: Some(Default::default()),
|
watch: Some(Default::default()),
|
||||||
ext: None,
|
|
||||||
}),
|
}),
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
|
@ -6652,7 +6640,6 @@ mod tests {
|
||||||
no_clear_screen: true,
|
no_clear_screen: true,
|
||||||
exclude: vec![],
|
exclude: vec![],
|
||||||
}),
|
}),
|
||||||
ext: None,
|
|
||||||
}),
|
}),
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
|
@ -6680,7 +6667,6 @@ mod tests {
|
||||||
json: false,
|
json: false,
|
||||||
compact: false,
|
compact: false,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
ext: None,
|
|
||||||
}),
|
}),
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
|
@ -6703,7 +6689,6 @@ mod tests {
|
||||||
json: false,
|
json: false,
|
||||||
compact: false,
|
compact: false,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
ext: None,
|
|
||||||
}),
|
}),
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
|
@ -6731,7 +6716,6 @@ mod tests {
|
||||||
json: false,
|
json: false,
|
||||||
compact: false,
|
compact: false,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
ext: None,
|
|
||||||
}),
|
}),
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
|
@ -6760,7 +6744,6 @@ mod tests {
|
||||||
json: false,
|
json: false,
|
||||||
compact: false,
|
compact: false,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
ext: None,
|
|
||||||
}),
|
}),
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
|
@ -6783,7 +6766,6 @@ mod tests {
|
||||||
json: true,
|
json: true,
|
||||||
compact: false,
|
compact: false,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
ext: None,
|
|
||||||
}),
|
}),
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
}
|
}
|
||||||
|
@ -6813,7 +6795,6 @@ mod tests {
|
||||||
json: true,
|
json: true,
|
||||||
compact: false,
|
compact: false,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
ext: None,
|
|
||||||
}),
|
}),
|
||||||
config_flag: ConfigFlag::Path("Deno.jsonc".to_string()),
|
config_flag: ConfigFlag::Path("Deno.jsonc".to_string()),
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
|
@ -6844,7 +6825,6 @@ mod tests {
|
||||||
json: false,
|
json: false,
|
||||||
compact: true,
|
compact: true,
|
||||||
watch: Default::default(),
|
watch: Default::default(),
|
||||||
ext: None,
|
|
||||||
}),
|
}),
|
||||||
config_flag: ConfigFlag::Path("Deno.jsonc".to_string()),
|
config_flag: ConfigFlag::Path("Deno.jsonc".to_string()),
|
||||||
..Flags::default()
|
..Flags::default()
|
||||||
|
|
|
@ -1131,7 +1131,7 @@ impl CliOptions {
|
||||||
resolve_url_or_path(&compile_flags.source_file, self.initial_cwd())?
|
resolve_url_or_path(&compile_flags.source_file, self.initial_cwd())?
|
||||||
}
|
}
|
||||||
DenoSubcommand::Eval(_) => {
|
DenoSubcommand::Eval(_) => {
|
||||||
resolve_url_or_path("./$deno$eval", self.initial_cwd())?
|
resolve_url_or_path("./$deno$eval.ts", self.initial_cwd())?
|
||||||
}
|
}
|
||||||
DenoSubcommand::Repl(_) => {
|
DenoSubcommand::Repl(_) => {
|
||||||
resolve_url_or_path("./$deno$repl.ts", self.initial_cwd())?
|
resolve_url_or_path("./$deno$repl.ts", self.initial_cwd())?
|
||||||
|
|
2
cli/cache/mod.rs
vendored
2
cli/cache/mod.rs
vendored
|
@ -108,7 +108,7 @@ pub use deno_cache_dir::HttpCache;
|
||||||
/// a concise interface to the DENO_DIR when building module graphs.
|
/// a concise interface to the DENO_DIR when building module graphs.
|
||||||
pub struct FetchCacher {
|
pub struct FetchCacher {
|
||||||
file_fetcher: Arc<FileFetcher>,
|
file_fetcher: Arc<FileFetcher>,
|
||||||
file_header_overrides: HashMap<ModuleSpecifier, HashMap<String, String>>,
|
pub file_header_overrides: HashMap<ModuleSpecifier, HashMap<String, String>>,
|
||||||
global_http_cache: Arc<GlobalHttpCache>,
|
global_http_cache: Arc<GlobalHttpCache>,
|
||||||
npm_resolver: Arc<dyn CliNpmResolver>,
|
npm_resolver: Arc<dyn CliNpmResolver>,
|
||||||
module_info_cache: Arc<ModuleInfoCache>,
|
module_info_cache: Arc<ModuleInfoCache>,
|
||||||
|
|
|
@ -138,11 +138,20 @@ fn fetch_local(specifier: &ModuleSpecifier) -> Result<File, AnyError> {
|
||||||
let local = specifier.to_file_path().map_err(|_| {
|
let local = specifier.to_file_path().map_err(|_| {
|
||||||
uri_error(format!("Invalid file path.\n Specifier: {specifier}"))
|
uri_error(format!("Invalid file path.\n Specifier: {specifier}"))
|
||||||
})?;
|
})?;
|
||||||
|
// If it doesnt have a extension, we want to treat it as typescript by default
|
||||||
|
let headers = if local.extension().is_none() {
|
||||||
|
Some(HashMap::from([(
|
||||||
|
"content-type".to_string(),
|
||||||
|
"application/typescript".to_string(),
|
||||||
|
)]))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
};
|
||||||
let bytes = fs::read(local)?;
|
let bytes = fs::read(local)?;
|
||||||
|
|
||||||
Ok(File {
|
Ok(File {
|
||||||
specifier: specifier.clone(),
|
specifier: specifier.clone(),
|
||||||
maybe_headers: None,
|
maybe_headers: headers,
|
||||||
source: bytes.into(),
|
source: bytes.into(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,6 +65,7 @@ impl MainModuleGraphContainer {
|
||||||
pub async fn check_specifiers(
|
pub async fn check_specifiers(
|
||||||
&self,
|
&self,
|
||||||
specifiers: &[ModuleSpecifier],
|
specifiers: &[ModuleSpecifier],
|
||||||
|
ext_overwrite: Option<&String>,
|
||||||
) -> Result<(), AnyError> {
|
) -> Result<(), AnyError> {
|
||||||
let mut graph_permit = self.acquire_update_permit().await;
|
let mut graph_permit = self.acquire_update_permit().await;
|
||||||
let graph = graph_permit.graph_mut();
|
let graph = graph_permit.graph_mut();
|
||||||
|
@ -76,6 +77,7 @@ impl MainModuleGraphContainer {
|
||||||
false,
|
false,
|
||||||
self.cli_options.ts_type_lib_window(),
|
self.cli_options.ts_type_lib_window(),
|
||||||
FetchPermissionsOption::AllowAll,
|
FetchPermissionsOption::AllowAll,
|
||||||
|
ext_overwrite,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
graph_permit.commit();
|
graph_permit.commit();
|
||||||
|
@ -94,7 +96,7 @@ impl MainModuleGraphContainer {
|
||||||
log::warn!("{} No matching files found.", colors::yellow("Warning"));
|
log::warn!("{} No matching files found.", colors::yellow("Warning"));
|
||||||
}
|
}
|
||||||
|
|
||||||
self.check_specifiers(&specifiers).await
|
self.check_specifiers(&specifiers, None).await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn collect_specifiers(
|
pub fn collect_specifiers(
|
||||||
|
|
|
@ -1420,6 +1420,7 @@ impl Inner {
|
||||||
document.content(),
|
document.content(),
|
||||||
&fmt_options,
|
&fmt_options,
|
||||||
&unstable_options,
|
&unstable_options,
|
||||||
|
None,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -235,7 +235,7 @@ impl TestRun {
|
||||||
)?;
|
)?;
|
||||||
let main_graph_container = factory.main_module_graph_container().await?;
|
let main_graph_container = factory.main_module_graph_container().await?;
|
||||||
main_graph_container
|
main_graph_container
|
||||||
.check_specifiers(&self.queue.iter().cloned().collect::<Vec<_>>())
|
.check_specifiers(&self.queue.iter().cloned().collect::<Vec<_>>(), None)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let (concurrent_jobs, fail_fast) =
|
let (concurrent_jobs, fail_fast) =
|
||||||
|
|
|
@ -105,11 +105,32 @@ impl ModuleLoadPreparer {
|
||||||
is_dynamic: bool,
|
is_dynamic: bool,
|
||||||
lib: TsTypeLib,
|
lib: TsTypeLib,
|
||||||
permissions: crate::file_fetcher::FetchPermissionsOption,
|
permissions: crate::file_fetcher::FetchPermissionsOption,
|
||||||
|
ext_overwrite: Option<&String>,
|
||||||
) -> Result<(), AnyError> {
|
) -> Result<(), AnyError> {
|
||||||
log::debug!("Preparing module load.");
|
log::debug!("Preparing module load.");
|
||||||
let _pb_clear_guard = self.progress_bar.clear_guard();
|
let _pb_clear_guard = self.progress_bar.clear_guard();
|
||||||
|
|
||||||
let mut cache = self.module_graph_builder.create_fetch_cacher(permissions);
|
let mut cache = self.module_graph_builder.create_fetch_cacher(permissions);
|
||||||
|
if let Some(ext) = ext_overwrite {
|
||||||
|
let maybe_content_type = match ext.as_str() {
|
||||||
|
"ts" => Some("text/typescript"),
|
||||||
|
"tsx" => Some("text/tsx"),
|
||||||
|
"js" => Some("text/javascript"),
|
||||||
|
"jsx" => Some("text/jsx"),
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
if let Some(content_type) = maybe_content_type {
|
||||||
|
for root in roots {
|
||||||
|
cache.file_header_overrides.insert(
|
||||||
|
root.clone(),
|
||||||
|
std::collections::HashMap::from([(
|
||||||
|
"content-type".to_string(),
|
||||||
|
content_type.to_string(),
|
||||||
|
)]),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
log::debug!("Building module graph.");
|
log::debug!("Building module graph.");
|
||||||
let has_type_checked = !graph.roots.is_empty();
|
let has_type_checked = !graph.roots.is_empty();
|
||||||
|
|
||||||
|
@ -763,6 +784,7 @@ impl<TGraphContainer: ModuleGraphContainer> ModuleLoader
|
||||||
is_dynamic,
|
is_dynamic,
|
||||||
lib,
|
lib,
|
||||||
root_permissions.into(),
|
root_permissions.into(),
|
||||||
|
None,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
update_permit.commit();
|
update_permit.commit();
|
||||||
|
|
|
@ -442,7 +442,9 @@ pub async fn run_benchmarks(
|
||||||
}
|
}
|
||||||
|
|
||||||
let main_graph_container = factory.main_module_graph_container().await?;
|
let main_graph_container = factory.main_module_graph_container().await?;
|
||||||
main_graph_container.check_specifiers(&specifiers).await?;
|
main_graph_container
|
||||||
|
.check_specifiers(&specifiers, cli_options.ext_flag().as_ref())
|
||||||
|
.await?;
|
||||||
|
|
||||||
if workspace_bench_options.no_run {
|
if workspace_bench_options.no_run {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
@ -569,7 +571,7 @@ pub async fn run_benchmarks_with_watch(
|
||||||
factory
|
factory
|
||||||
.main_module_graph_container()
|
.main_module_graph_container()
|
||||||
.await?
|
.await?
|
||||||
.check_specifiers(&specifiers)
|
.check_specifiers(&specifiers, cli_options.ext_flag().as_ref())
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
if workspace_bench_options.no_run {
|
if workspace_bench_options.no_run {
|
||||||
|
|
|
@ -73,7 +73,7 @@ pub async fn check(
|
||||||
};
|
};
|
||||||
|
|
||||||
main_graph_container
|
main_graph_container
|
||||||
.check_specifiers(&specifiers_for_typecheck)
|
.check_specifiers(&specifiers_for_typecheck, None)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -120,7 +120,13 @@ pub async fn format(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
format_files(caches, &fmt_flags, paths_with_options_batches).await?;
|
format_files(
|
||||||
|
caches,
|
||||||
|
cli_options,
|
||||||
|
&fmt_flags,
|
||||||
|
paths_with_options_batches,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
})
|
})
|
||||||
|
@ -133,7 +139,8 @@ pub async fn format(
|
||||||
let caches = factory.caches()?;
|
let caches = factory.caches()?;
|
||||||
let paths_with_options_batches =
|
let paths_with_options_batches =
|
||||||
resolve_paths_with_options_batches(cli_options, &fmt_flags)?;
|
resolve_paths_with_options_batches(cli_options, &fmt_flags)?;
|
||||||
format_files(caches, &fmt_flags, paths_with_options_batches).await?;
|
format_files(caches, cli_options, &fmt_flags, paths_with_options_batches)
|
||||||
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -172,6 +179,7 @@ fn resolve_paths_with_options_batches(
|
||||||
|
|
||||||
async fn format_files(
|
async fn format_files(
|
||||||
caches: &Arc<Caches>,
|
caches: &Arc<Caches>,
|
||||||
|
cli_options: &Arc<CliOptions>,
|
||||||
fmt_flags: &FmtFlags,
|
fmt_flags: &FmtFlags,
|
||||||
paths_with_options_batches: Vec<PathsWithOptions>,
|
paths_with_options_batches: Vec<PathsWithOptions>,
|
||||||
) -> Result<(), AnyError> {
|
) -> Result<(), AnyError> {
|
||||||
|
@ -199,6 +207,7 @@ async fn format_files(
|
||||||
fmt_options.options,
|
fmt_options.options,
|
||||||
fmt_options.unstable,
|
fmt_options.unstable,
|
||||||
incremental_cache.clone(),
|
incremental_cache.clone(),
|
||||||
|
cli_options.ext_flag().clone(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
incremental_cache.wait_completion().await;
|
incremental_cache.wait_completion().await;
|
||||||
|
@ -211,7 +220,12 @@ fn collect_fmt_files(
|
||||||
cli_options: &CliOptions,
|
cli_options: &CliOptions,
|
||||||
files: FilePatterns,
|
files: FilePatterns,
|
||||||
) -> Result<Vec<PathBuf>, AnyError> {
|
) -> Result<Vec<PathBuf>, AnyError> {
|
||||||
FileCollector::new(|e| is_supported_ext_fmt(e.path))
|
FileCollector::new(|e| {
|
||||||
|
cli_options.ext_flag().as_ref().is_some_and(|ext| {
|
||||||
|
is_supported_ext_fmt(Path::new(&format!("placeholder.{ext}")))
|
||||||
|
}) || is_supported_ext_fmt(e.path)
|
||||||
|
|| e.path.extension().is_none()
|
||||||
|
})
|
||||||
.ignore_git_folder()
|
.ignore_git_folder()
|
||||||
.ignore_node_modules()
|
.ignore_node_modules()
|
||||||
.set_vendor_folder(cli_options.vendor_dir_path().map(ToOwned::to_owned))
|
.set_vendor_folder(cli_options.vendor_dir_path().map(ToOwned::to_owned))
|
||||||
|
@ -449,8 +463,11 @@ pub fn format_file(
|
||||||
file_text: &str,
|
file_text: &str,
|
||||||
fmt_options: &FmtOptionsConfig,
|
fmt_options: &FmtOptionsConfig,
|
||||||
unstable_options: &UnstableFmtOptions,
|
unstable_options: &UnstableFmtOptions,
|
||||||
|
ext: Option<String>,
|
||||||
) -> Result<Option<String>, AnyError> {
|
) -> Result<Option<String>, AnyError> {
|
||||||
let ext = get_extension(file_path).unwrap_or_default();
|
let ext = ext
|
||||||
|
.or_else(|| get_extension(file_path))
|
||||||
|
.unwrap_or("ts".to_string());
|
||||||
|
|
||||||
match ext.as_str() {
|
match ext.as_str() {
|
||||||
"md" | "mkd" | "mkdn" | "mdwn" | "mdown" | "markdown" => {
|
"md" | "mkd" | "mkdn" | "mdwn" | "mdown" | "markdown" => {
|
||||||
|
@ -493,14 +510,14 @@ pub fn format_file(
|
||||||
"ipynb" => dprint_plugin_jupyter::format_text(
|
"ipynb" => dprint_plugin_jupyter::format_text(
|
||||||
file_text,
|
file_text,
|
||||||
|file_path: &Path, file_text: String| {
|
|file_path: &Path, file_text: String| {
|
||||||
format_file(file_path, &file_text, fmt_options, unstable_options)
|
format_file(file_path, &file_text, fmt_options, unstable_options, None)
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
_ => {
|
_ => {
|
||||||
let config = get_resolved_typescript_config(fmt_options);
|
let config = get_resolved_typescript_config(fmt_options);
|
||||||
dprint_plugin_typescript::format_text(
|
dprint_plugin_typescript::format_text(
|
||||||
file_path,
|
file_path,
|
||||||
None,
|
Some(&ext),
|
||||||
file_text.to_string(),
|
file_text.to_string(),
|
||||||
&config,
|
&config,
|
||||||
)
|
)
|
||||||
|
@ -526,6 +543,7 @@ trait Formatter {
|
||||||
fmt_options: FmtOptionsConfig,
|
fmt_options: FmtOptionsConfig,
|
||||||
unstable_options: UnstableFmtOptions,
|
unstable_options: UnstableFmtOptions,
|
||||||
incremental_cache: Arc<IncrementalCache>,
|
incremental_cache: Arc<IncrementalCache>,
|
||||||
|
ext: Option<String>,
|
||||||
) -> Result<(), AnyError>;
|
) -> Result<(), AnyError>;
|
||||||
|
|
||||||
fn finish(&self) -> Result<(), AnyError>;
|
fn finish(&self) -> Result<(), AnyError>;
|
||||||
|
@ -545,6 +563,7 @@ impl Formatter for CheckFormatter {
|
||||||
fmt_options: FmtOptionsConfig,
|
fmt_options: FmtOptionsConfig,
|
||||||
unstable_options: UnstableFmtOptions,
|
unstable_options: UnstableFmtOptions,
|
||||||
incremental_cache: Arc<IncrementalCache>,
|
incremental_cache: Arc<IncrementalCache>,
|
||||||
|
ext: Option<String>,
|
||||||
) -> Result<(), AnyError> {
|
) -> Result<(), AnyError> {
|
||||||
// prevent threads outputting at the same time
|
// prevent threads outputting at the same time
|
||||||
let output_lock = Arc::new(Mutex::new(0));
|
let output_lock = Arc::new(Mutex::new(0));
|
||||||
|
@ -566,6 +585,7 @@ impl Formatter for CheckFormatter {
|
||||||
&file_text,
|
&file_text,
|
||||||
&fmt_options,
|
&fmt_options,
|
||||||
&unstable_options,
|
&unstable_options,
|
||||||
|
ext.clone(),
|
||||||
) {
|
) {
|
||||||
Ok(Some(formatted_text)) => {
|
Ok(Some(formatted_text)) => {
|
||||||
not_formatted_files_count.fetch_add(1, Ordering::Relaxed);
|
not_formatted_files_count.fetch_add(1, Ordering::Relaxed);
|
||||||
|
@ -643,6 +663,7 @@ impl Formatter for RealFormatter {
|
||||||
fmt_options: FmtOptionsConfig,
|
fmt_options: FmtOptionsConfig,
|
||||||
unstable_options: UnstableFmtOptions,
|
unstable_options: UnstableFmtOptions,
|
||||||
incremental_cache: Arc<IncrementalCache>,
|
incremental_cache: Arc<IncrementalCache>,
|
||||||
|
ext: Option<String>,
|
||||||
) -> Result<(), AnyError> {
|
) -> Result<(), AnyError> {
|
||||||
let output_lock = Arc::new(Mutex::new(0)); // prevent threads outputting at the same time
|
let output_lock = Arc::new(Mutex::new(0)); // prevent threads outputting at the same time
|
||||||
|
|
||||||
|
@ -662,7 +683,13 @@ impl Formatter for RealFormatter {
|
||||||
&file_path,
|
&file_path,
|
||||||
&file_contents.text,
|
&file_contents.text,
|
||||||
|file_path, file_text| {
|
|file_path, file_text| {
|
||||||
format_file(file_path, file_text, &fmt_options, &unstable_options)
|
format_file(
|
||||||
|
file_path,
|
||||||
|
file_text,
|
||||||
|
&fmt_options,
|
||||||
|
&unstable_options,
|
||||||
|
ext.clone(),
|
||||||
|
)
|
||||||
},
|
},
|
||||||
) {
|
) {
|
||||||
Ok(Some(formatted_text)) => {
|
Ok(Some(formatted_text)) => {
|
||||||
|
@ -788,6 +815,7 @@ fn format_stdin(
|
||||||
&source,
|
&source,
|
||||||
&fmt_options.options,
|
&fmt_options.options,
|
||||||
&fmt_options.unstable,
|
&fmt_options.unstable,
|
||||||
|
None,
|
||||||
)?;
|
)?;
|
||||||
if fmt_flags.check {
|
if fmt_flags.check {
|
||||||
#[allow(clippy::print_stdout)]
|
#[allow(clippy::print_stdout)]
|
||||||
|
@ -1269,6 +1297,7 @@ mod test {
|
||||||
..Default::default()
|
..Default::default()
|
||||||
},
|
},
|
||||||
&UnstableFmtOptions::default(),
|
&UnstableFmtOptions::default(),
|
||||||
|
None,
|
||||||
)
|
)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
|
@ -94,9 +94,16 @@ impl CliLinter {
|
||||||
&self,
|
&self,
|
||||||
file_path: &Path,
|
file_path: &Path,
|
||||||
source_code: String,
|
source_code: String,
|
||||||
|
ext: Option<&str>,
|
||||||
) -> Result<(ParsedSource, Vec<LintDiagnostic>), AnyError> {
|
) -> Result<(ParsedSource, Vec<LintDiagnostic>), AnyError> {
|
||||||
let specifier = specifier_from_file_path(file_path)?;
|
let specifier = specifier_from_file_path(file_path)?;
|
||||||
let media_type = MediaType::from_specifier(&specifier);
|
let media_type = if let Some(ext) = ext {
|
||||||
|
MediaType::from_str(&format!("placeholder.{ext}"))
|
||||||
|
} else if file_path.extension().is_none() {
|
||||||
|
MediaType::TypeScript
|
||||||
|
} else {
|
||||||
|
MediaType::from_specifier(&specifier)
|
||||||
|
};
|
||||||
|
|
||||||
if self.fix {
|
if self.fix {
|
||||||
self.lint_file_and_fix(&specifier, media_type, source_code, file_path)
|
self.lint_file_and_fix(&specifier, media_type, source_code, file_path)
|
||||||
|
|
|
@ -117,6 +117,7 @@ pub async fn lint(
|
||||||
for paths_with_options in paths_with_options_batches {
|
for paths_with_options in paths_with_options_batches {
|
||||||
linter
|
linter
|
||||||
.lint_files(
|
.lint_files(
|
||||||
|
cli_options,
|
||||||
paths_with_options.options,
|
paths_with_options.options,
|
||||||
lint_config.clone(),
|
lint_config.clone(),
|
||||||
paths_with_options.dir,
|
paths_with_options.dir,
|
||||||
|
@ -155,7 +156,7 @@ pub async fn lint(
|
||||||
start_dir.maybe_deno_json().map(|c| c.as_ref()),
|
start_dir.maybe_deno_json().map(|c| c.as_ref()),
|
||||||
)?;
|
)?;
|
||||||
let mut file_path = cli_options.initial_cwd().join(STDIN_FILE_NAME);
|
let mut file_path = cli_options.initial_cwd().join(STDIN_FILE_NAME);
|
||||||
if let Some(ext) = &lint_flags.ext {
|
if let Some(ext) = cli_options.ext_flag() {
|
||||||
file_path.set_extension(ext);
|
file_path.set_extension(ext);
|
||||||
}
|
}
|
||||||
let r = lint_stdin(&file_path, lint_rules, deno_lint_config);
|
let r = lint_stdin(&file_path, lint_rules, deno_lint_config);
|
||||||
|
@ -179,6 +180,7 @@ pub async fn lint(
|
||||||
for paths_with_options in paths_with_options_batches {
|
for paths_with_options in paths_with_options_batches {
|
||||||
linter
|
linter
|
||||||
.lint_files(
|
.lint_files(
|
||||||
|
cli_options,
|
||||||
paths_with_options.options,
|
paths_with_options.options,
|
||||||
deno_lint_config.clone(),
|
deno_lint_config.clone(),
|
||||||
paths_with_options.dir,
|
paths_with_options.dir,
|
||||||
|
@ -264,6 +266,7 @@ impl WorkspaceLinter {
|
||||||
|
|
||||||
pub async fn lint_files(
|
pub async fn lint_files(
|
||||||
&mut self,
|
&mut self,
|
||||||
|
cli_options: &Arc<CliOptions>,
|
||||||
lint_options: LintOptions,
|
lint_options: LintOptions,
|
||||||
lint_config: LintConfig,
|
lint_config: LintConfig,
|
||||||
member_dir: WorkspaceDirectory,
|
member_dir: WorkspaceDirectory,
|
||||||
|
@ -348,6 +351,7 @@ impl WorkspaceLinter {
|
||||||
let reporter_lock = self.reporter_lock.clone();
|
let reporter_lock = self.reporter_lock.clone();
|
||||||
let maybe_incremental_cache = maybe_incremental_cache.clone();
|
let maybe_incremental_cache = maybe_incremental_cache.clone();
|
||||||
let linter = linter.clone();
|
let linter = linter.clone();
|
||||||
|
let cli_options = cli_options.clone();
|
||||||
async move {
|
async move {
|
||||||
run_parallelized(paths, {
|
run_parallelized(paths, {
|
||||||
move |file_path| {
|
move |file_path| {
|
||||||
|
@ -361,7 +365,11 @@ impl WorkspaceLinter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let r = linter.lint_file(&file_path, file_text);
|
let r = linter.lint_file(
|
||||||
|
&file_path,
|
||||||
|
file_text,
|
||||||
|
cli_options.ext_flag().as_deref(),
|
||||||
|
);
|
||||||
if let Ok((file_source, file_diagnostics)) = &r {
|
if let Ok((file_source, file_diagnostics)) = &r {
|
||||||
if let Some(incremental_cache) = &maybe_incremental_cache {
|
if let Some(incremental_cache) = &maybe_incremental_cache {
|
||||||
if file_diagnostics.is_empty() {
|
if file_diagnostics.is_empty() {
|
||||||
|
@ -421,7 +429,12 @@ fn collect_lint_files(
|
||||||
cli_options: &CliOptions,
|
cli_options: &CliOptions,
|
||||||
files: FilePatterns,
|
files: FilePatterns,
|
||||||
) -> Result<Vec<PathBuf>, AnyError> {
|
) -> Result<Vec<PathBuf>, AnyError> {
|
||||||
FileCollector::new(|e| is_script_ext(e.path))
|
FileCollector::new(|e| {
|
||||||
|
cli_options.ext_flag().as_ref().is_some_and(|ext| {
|
||||||
|
is_script_ext(Path::new(&format!("placeholder.{ext}")))
|
||||||
|
}) || is_script_ext(e.path)
|
||||||
|
|| e.path.extension().is_none()
|
||||||
|
})
|
||||||
.ignore_git_folder()
|
.ignore_git_folder()
|
||||||
.ignore_node_modules()
|
.ignore_node_modules()
|
||||||
.set_vendor_folder(cli_options.vendor_dir_path().map(ToOwned::to_owned))
|
.set_vendor_folder(cli_options.vendor_dir_path().map(ToOwned::to_owned))
|
||||||
|
@ -497,7 +510,7 @@ fn lint_stdin(
|
||||||
});
|
});
|
||||||
|
|
||||||
linter
|
linter
|
||||||
.lint_file(file_path, deno_ast::strip_bom(source_code))
|
.lint_file(file_path, deno_ast::strip_bom(source_code), None)
|
||||||
.map_err(AnyError::from)
|
.map_err(AnyError::from)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -107,6 +107,7 @@ pub async fn cache_top_level_deps(
|
||||||
false,
|
false,
|
||||||
deno_config::deno_json::TsTypeLib::DenoWorker,
|
deno_config::deno_json::TsTypeLib::DenoWorker,
|
||||||
crate::file_fetcher::FetchPermissionsOption::AllowAll,
|
crate::file_fetcher::FetchPermissionsOption::AllowAll,
|
||||||
|
None,
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1583,7 +1583,10 @@ pub async fn run_tests(
|
||||||
|
|
||||||
// Typecheck
|
// Typecheck
|
||||||
main_graph_container
|
main_graph_container
|
||||||
.check_specifiers(&specifiers_for_typecheck_and_test)
|
.check_specifiers(
|
||||||
|
&specifiers_for_typecheck_and_test,
|
||||||
|
cli_options.ext_flag().as_ref(),
|
||||||
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
if workspace_test_options.no_run {
|
if workspace_test_options.no_run {
|
||||||
|
@ -1757,7 +1760,10 @@ pub async fn run_tests_with_watch(
|
||||||
|
|
||||||
// Typecheck
|
// Typecheck
|
||||||
main_graph_container
|
main_graph_container
|
||||||
.check_specifiers(&specifiers_for_typecheck_and_test)
|
.check_specifiers(
|
||||||
|
&specifiers_for_typecheck_and_test,
|
||||||
|
cli_options.ext_flag().as_ref(),
|
||||||
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
if workspace_test_options.no_run {
|
if workspace_test_options.no_run {
|
||||||
|
|
|
@ -148,11 +148,6 @@ itest!(_021_mjs_modules {
|
||||||
output: "run/021_mjs_modules.ts.out",
|
output: "run/021_mjs_modules.ts.out",
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(_023_no_ext {
|
|
||||||
args: "run --reload --check run/023_no_ext",
|
|
||||||
output: "run/023_no_ext.out",
|
|
||||||
});
|
|
||||||
|
|
||||||
itest!(_025_reload_js_type_error {
|
itest!(_025_reload_js_type_error {
|
||||||
args: "run --quiet --reload run/025_reload_js_type_error.js",
|
args: "run --quiet --reload run/025_reload_js_type_error.js",
|
||||||
output: "run/025_reload_js_type_error.js.out",
|
output: "run/025_reload_js_type_error.js.out",
|
||||||
|
@ -4209,12 +4204,6 @@ itest!(error_cause_recursive {
|
||||||
exit_code: 1,
|
exit_code: 1,
|
||||||
});
|
});
|
||||||
|
|
||||||
itest!(default_file_extension_is_js {
|
|
||||||
args: "run --check file_extensions/js_without_extension",
|
|
||||||
output: "file_extensions/js_without_extension.out",
|
|
||||||
exit_code: 0,
|
|
||||||
});
|
|
||||||
|
|
||||||
itest!(js_without_extension {
|
itest!(js_without_extension {
|
||||||
args: "run --ext js --check file_extensions/js_without_extension",
|
args: "run --ext js --check file_extensions/js_without_extension",
|
||||||
output: "file_extensions/js_without_extension.out",
|
output: "file_extensions/js_without_extension.out",
|
||||||
|
|
13
tests/specs/bench/default_ts/__test__.jsonc
Normal file
13
tests/specs/bench/default_ts/__test__.jsonc
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"tempDir": true,
|
||||||
|
"tests": {
|
||||||
|
"ext_flag": {
|
||||||
|
"args": "bench --ext=ts as_ts.js",
|
||||||
|
"output": "ext.out"
|
||||||
|
},
|
||||||
|
"extensionless": {
|
||||||
|
"args": "bench extensionless",
|
||||||
|
"output": "extensionless.out"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
3
tests/specs/bench/default_ts/as_ts.js
Normal file
3
tests/specs/bench/default_ts/as_ts.js
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Deno.bench(function foo() {
|
||||||
|
const x: string = "foo";
|
||||||
|
});
|
5
tests/specs/bench/default_ts/ext.out
Normal file
5
tests/specs/bench/default_ts/ext.out
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Check file:///[WILDCARD]/as_ts.js
|
||||||
|
[WILDCARD]
|
||||||
|
|
||||||
|
file:///[WILDCARD]/as_ts.js
|
||||||
|
[WILDCARD]
|
3
tests/specs/bench/default_ts/extensionless
Normal file
3
tests/specs/bench/default_ts/extensionless
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Deno.bench(function foo() {
|
||||||
|
const x: string = "foo";
|
||||||
|
});
|
5
tests/specs/bench/default_ts/extensionless.out
Normal file
5
tests/specs/bench/default_ts/extensionless.out
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Check file:///[WILDCARD]/extensionless
|
||||||
|
[WILDCARD]
|
||||||
|
|
||||||
|
file:///[WILDCARD]/extensionless
|
||||||
|
[WILDCARD]
|
18
tests/specs/fmt/default_ts/__test__.jsonc
Normal file
18
tests/specs/fmt/default_ts/__test__.jsonc
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"tempDir": true,
|
||||||
|
"tests": {
|
||||||
|
"stdin": {
|
||||||
|
"args": "fmt -",
|
||||||
|
"input": "const x: string = \"foo\";",
|
||||||
|
"output": "const x: string = \"foo\";\n"
|
||||||
|
},
|
||||||
|
"ext_flag": {
|
||||||
|
"args": "fmt --ext=ts as_ts.js",
|
||||||
|
"output": "Checked 1 file\n"
|
||||||
|
},
|
||||||
|
"extensionless": {
|
||||||
|
"args": "fmt extensionless",
|
||||||
|
"output": "Checked 1 file\n"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
tests/specs/fmt/default_ts/as_ts.js
Normal file
1
tests/specs/fmt/default_ts/as_ts.js
Normal file
|
@ -0,0 +1 @@
|
||||||
|
const x: string = "foo";
|
1
tests/specs/fmt/default_ts/extensionless
Normal file
1
tests/specs/fmt/default_ts/extensionless
Normal file
|
@ -0,0 +1 @@
|
||||||
|
const x: string = "foo";
|
18
tests/specs/lint/default_ts/__test__.jsonc
Normal file
18
tests/specs/lint/default_ts/__test__.jsonc
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"tempDir": true,
|
||||||
|
"tests": {
|
||||||
|
"stdin": {
|
||||||
|
"args": "lint -",
|
||||||
|
"input": "const _x: string = \"foo\";",
|
||||||
|
"output": "Checked 1 file\n"
|
||||||
|
},
|
||||||
|
"ext_flag": {
|
||||||
|
"args": "lint --ext=ts as_ts.js",
|
||||||
|
"output": "Checked 1 file\n"
|
||||||
|
},
|
||||||
|
"extensionless": {
|
||||||
|
"args": "lint extensionless",
|
||||||
|
"output": "Checked 1 file\n"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
1
tests/specs/lint/default_ts/as_ts.js
Normal file
1
tests/specs/lint/default_ts/as_ts.js
Normal file
|
@ -0,0 +1 @@
|
||||||
|
const _x: string = "foo";
|
1
tests/specs/lint/default_ts/extensionless
Normal file
1
tests/specs/lint/default_ts/extensionless
Normal file
|
@ -0,0 +1 @@
|
||||||
|
const _x: string = "foo";
|
|
@ -176,6 +176,7 @@ struct StepMetaData {
|
||||||
pub command_name: Option<String>,
|
pub command_name: Option<String>,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub envs: HashMap<String, String>,
|
pub envs: HashMap<String, String>,
|
||||||
|
pub input: Option<String>,
|
||||||
pub output: String,
|
pub output: String,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub exit_code: i32,
|
pub exit_code: i32,
|
||||||
|
@ -406,6 +407,10 @@ fn run_step(
|
||||||
true => command.show_output(),
|
true => command.show_output(),
|
||||||
false => command,
|
false => command,
|
||||||
};
|
};
|
||||||
|
let command = match &step.input {
|
||||||
|
Some(input) => command.stdin_text(input),
|
||||||
|
None => command,
|
||||||
|
};
|
||||||
let output = command.run();
|
let output = command.run();
|
||||||
if step.output.ends_with(".out") {
|
if step.output.ends_with(".out") {
|
||||||
let test_output_path = cwd.join(&step.output);
|
let test_output_path = cwd.join(&step.output);
|
||||||
|
|
18
tests/specs/run/default_ts/__test__.jsonc
Normal file
18
tests/specs/run/default_ts/__test__.jsonc
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"tempDir": true,
|
||||||
|
"tests": {
|
||||||
|
"stdin": {
|
||||||
|
"args": "run -",
|
||||||
|
"input": "const x: string = \"foo\";console.log(x)",
|
||||||
|
"output": "foo\n"
|
||||||
|
},
|
||||||
|
"ext_flag": {
|
||||||
|
"args": "run --ext=ts as_ts.js",
|
||||||
|
"output": "foo\n"
|
||||||
|
},
|
||||||
|
"extensionless": {
|
||||||
|
"args": "run extensionless",
|
||||||
|
"output": "foo\n"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2
tests/specs/run/default_ts/as_ts.js
Normal file
2
tests/specs/run/default_ts/as_ts.js
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
const x: string = "foo";
|
||||||
|
console.log(x);
|
2
tests/specs/run/default_ts/extensionless
Normal file
2
tests/specs/run/default_ts/extensionless
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
const x: string = "foo";
|
||||||
|
console.log(x);
|
13
tests/specs/test/default_ts/__test__.jsonc
Normal file
13
tests/specs/test/default_ts/__test__.jsonc
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"tempDir": true,
|
||||||
|
"tests": {
|
||||||
|
"ext_flag": {
|
||||||
|
"args": "test --ext=ts as_ts.js",
|
||||||
|
"output": "ext.out"
|
||||||
|
},
|
||||||
|
"extensionless": {
|
||||||
|
"args": "test extensionless",
|
||||||
|
"output": "extensionless.out"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
3
tests/specs/test/default_ts/as_ts.js
Normal file
3
tests/specs/test/default_ts/as_ts.js
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Deno.test(function foo() {
|
||||||
|
const x: string = "foo";
|
||||||
|
});
|
4
tests/specs/test/default_ts/ext.out
Normal file
4
tests/specs/test/default_ts/ext.out
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Check file:///[WILDCARD]/as_ts.js
|
||||||
|
running 1 test from ./as_ts.js
|
||||||
|
[WILDCARD]
|
||||||
|
|
3
tests/specs/test/default_ts/extensionless
Normal file
3
tests/specs/test/default_ts/extensionless
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Deno.test(function foo() {
|
||||||
|
const x: string = "foo";
|
||||||
|
});
|
4
tests/specs/test/default_ts/extensionless.out
Normal file
4
tests/specs/test/default_ts/extensionless.out
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Check file:///[WILDCARD]/extensionless
|
||||||
|
running 1 test from ./extensionless
|
||||||
|
[WILDCARD]
|
||||||
|
|
|
@ -218,7 +218,7 @@ async function ensureNoNewITests() {
|
||||||
"pm_tests.rs": 0,
|
"pm_tests.rs": 0,
|
||||||
"publish_tests.rs": 0,
|
"publish_tests.rs": 0,
|
||||||
"repl_tests.rs": 0,
|
"repl_tests.rs": 0,
|
||||||
"run_tests.rs": 333,
|
"run_tests.rs": 331,
|
||||||
"shared_library_tests.rs": 0,
|
"shared_library_tests.rs": 0,
|
||||||
"task_tests.rs": 4,
|
"task_tests.rs": 4,
|
||||||
"test_tests.rs": 0,
|
"test_tests.rs": 0,
|
||||||
|
|
Loading…
Reference in a new issue