Skip to content

Commit 0c6e4ba

Browse files
committed
cli: auto-detect .mjs files as modules
Treat files with .mjs extension as modules without requiring --module flag. Many other JavaScript shells do the same - d8, jsc, graaljs, xs, escargot. A small quality-of-life improvement that among other things simplifies configuration for an external test262 harness. The harness could simply stage module tests into *.mjs and forget about --module flag.
1 parent d7cd971 commit 0c6e4ba

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

cli/src/main.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -289,13 +289,18 @@ impl Drop for Counters {
289289
///
290290
/// Returns a error of type String with a error message,
291291
/// if the source has a syntax or parsing error.
292-
fn dump<R: ReadChar>(src: Source<'_, R>, args: &Opt, context: &mut Context) -> Result<()> {
292+
fn dump<R: ReadChar>(
293+
src: Source<'_, R>,
294+
args: &Opt,
295+
is_module: bool,
296+
context: &mut Context,
297+
) -> Result<()> {
293298
if let Some(arg) = args.dump_ast {
294299
let mut counters = Counters::new(args.time);
295300
let arg = arg.unwrap_or_default();
296301
let mut parser = boa_parser::Parser::new(src);
297302
let dump =
298-
if args.module {
303+
if is_module {
299304
let scope = context.realm().scope().clone();
300305
let module = {
301306
let _timer = counters.new_timer("Parsing");
@@ -390,7 +395,7 @@ fn evaluate_expr(
390395
printer: &SharedExternalPrinterLogger,
391396
) -> Result<()> {
392397
if args.has_dump_flag() {
393-
dump(Source::from_bytes(line), args, context)?;
398+
dump(Source::from_bytes(line), args, args.module, context)?;
394399
} else if let Some(flowgraph) = args.flowgraph {
395400
match generate_flowgraph(
396401
context,
@@ -437,8 +442,11 @@ fn evaluate_file(
437442
loader: &SimpleModuleLoader,
438443
printer: &SharedExternalPrinterLogger,
439444
) -> Result<()> {
445+
// Treat files with .mjs extension automatically as modules.
446+
let is_module = args.module || file.extension().is_some_and(|ext| ext == "mjs");
447+
440448
if args.has_dump_flag() {
441-
return dump(Source::from_filepath(file)?, args, context);
449+
return dump(Source::from_filepath(file)?, args, is_module, context);
442450
}
443451

444452
if let Some(flowgraph) = args.flowgraph {
@@ -454,7 +462,7 @@ fn evaluate_file(
454462
return Ok(());
455463
}
456464

457-
if args.module {
465+
if is_module {
458466
let source = Source::from_filepath(file)?;
459467
let mut counters = Counters::new(args.time);
460468
let module = {

0 commit comments

Comments
 (0)