From 7530e9051d67d8721126e48c39f0a8ac27d980a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Wed, 25 Oct 2023 15:59:03 -0700 Subject: [PATCH] perf(es/minifier): Add `has_flag` to `Comments` (#8182) --- crates/swc_common/src/comments.rs | 84 ++++++++++ crates/swc_common/src/syntax_pos.rs | 8 +- crates/swc_ecma_minifier/src/metadata/mod.rs | 21 +-- .../array/blockStmt/input.js.span.swc-stderr | 119 ++++++++++++++ .../call/simple/input.js.span.swc-stderr | 102 ++++++++++++ .../exprs/paren-annotations/1/input.js | 2 + .../1/input.js.span.swc-stderr | 88 +++++++++++ .../paren-annotations/1/input.js.swc-stderr | 10 ++ .../comments/exprs/paren-pure/1/input.js | 1 + .../paren-pure/1/input.js.span.swc-stderr | 108 +++++++++++++ .../exprs/paren-pure/1/input.js.swc-stderr | 9 ++ .../comments/exprs/paren-pure/2/input.js | 2 + .../paren-pure/2/input.js.span.swc-stderr | 147 ++++++++++++++++++ .../exprs/paren-pure/2/input.js.swc-stderr | 10 ++ .../comments/exprs/paren-pure/3/input.js | 1 + .../paren-pure/3/input.js.span.swc-stderr | 138 ++++++++++++++++ .../exprs/paren-pure/3/input.js.swc-stderr | 9 ++ .../issue-3715/input.js.span.swc-stderr | 54 +++++++ .../issue-4876/input.js.span.swc-stderr | 128 +++++++++++++++ .../stmts/block/input.js.span.swc-stderr | 63 ++++++++ .../stmts/switch/input.js.span.swc-stderr | 129 +++++++++++++++ crates/swc_ecma_parser/tests/span.rs | 3 +- ...s.swc-stderr => binary.js.span.swc-stderr} | 0 ...swc-stderr => accessor.js.span.swc-stderr} | 0 ...swc-stderr => async-fn.js.span.swc-stderr} | 0 ...> class-no-close-brace.js.span.swc-stderr} | 0 ...js.swc-stderr => class.js.span.swc-stderr} | 0 ...stderr => computed-key.js.span.swc-stderr} | 0 ...-stderr => constructor.js.span.swc-stderr} | 0 ...wc-stderr => decorator.js.span.swc-stderr} | 0 ...derr => default-export.js.span.swc-stderr} | 0 ...lt-import-string-names.js.span.swc-stderr} | 0 ...-stderr => export-decl.js.span.swc-stderr} | 0 ... export-string-names-1.js.span.swc-stderr} | 0 ... export-string-names-2.js.span.swc-stderr} | 0 ... export-string-names-3.js.span.swc-stderr} | 0 ...s.swc-stderr => export.js.span.swc-stderr} | 0 ...fn.js.swc-stderr => fn.js.span.swc-stderr} | 0 ... import-string-names-1.js.span.swc-stderr} | 0 ... import-string-names-2.js.span.swc-stderr} | 0 ...stderr => named-export.js.span.swc-stderr} | 0 ...ce-export-string-names.js.span.swc-stderr} | 0 ...derr => private-method.js.span.swc-stderr} | 0 ...stderr => private-prop.js.span.swc-stderr} | 0 ...locks-with-line-breaks.js.span.swc-stderr} | 0 ...tderr => static-blocks.js.span.swc-stderr} | 0 ...js.swc-stderr => array.js.span.swc-stderr} | 0 ....swc-stderr => arrow-2.js.span.swc-stderr} | 0 ...rr => arrow-with-block.js.span.swc-stderr} | 0 ...rr => arrow-with-paren.js.span.swc-stderr} | 0 ...js.swc-stderr => arrow.js.span.swc-stderr} | 0 ...js.swc-stderr => await.js.span.swc-stderr} | 0 ....js.swc-stderr => cond.js.span.swc-stderr} | 0 ...derr => dynamic-import.js.span.swc-stderr} | 0 ...tderr => export-defaul.js.span.swc-stderr} | 0 ...s.swc-stderr => member.js.span.swc-stderr} | 0 ...w.js.swc-stderr => new.js.span.swc-stderr} | 0 ....js.swc-stderr => null.js.span.swc-stderr} | 0 ...s.swc-stderr => object.js.span.swc-stderr} | 0 ...r => optional-chaining.js.span.swc-stderr} | 0 ...js.swc-stderr => paren.js.span.swc-stderr} | 0 ...js.swc-stderr => regex.js.span.swc-stderr} | 0 ...q.js.swc-stderr => seq.js.span.swc-stderr} | 0 ...derr => string-literal.js.span.swc-stderr} | 0 ...c-stderr => tagged-tpl.js.span.swc-stderr} | 0 ...l.js.swc-stderr => tpl.js.span.swc-stderr} | 0 ...js.swc-stderr => unary.js.span.swc-stderr} | 0 ...s.swc-stderr => update.js.span.swc-stderr} | 0 ...js.swc-stderr => yield.js.span.swc-stderr} | 0 ...derr => arrow_function.js.span.swc-stderr} | 0 ...swc-stderr => function.js.span.swc-stderr} | 0 ...js.swc-stderr => array.js.span.swc-stderr} | 0 ...err => assign-pat-prop.js.span.swc-stderr} | 0 ...c-stderr => assign-pat.js.span.swc-stderr} | 0 ...js.swc-stderr => input.js.span.swc-stderr} | 0 ...js.swc-stderr => input.js.span.swc-stderr} | 0 ...js.swc-stderr => input.js.span.swc-stderr} | 0 ...swc-stderr => debugger.js.span.swc-stderr} | 0 ...swc-stderr => do-while.js.span.swc-stderr} | 0 ...js.swc-stderr => empty.js.span.swc-stderr} | 0 ...s.swc-stderr => for-in.js.span.swc-stderr} | 0 ...s.swc-stderr => for-of.js.span.swc-stderr} | 0 ...if.js.swc-stderr => if.js.span.swc-stderr} | 0 ...js.swc-stderr => label.js.span.swc-stderr} | 0 ...s.swc-stderr => return.js.span.swc-stderr} | 0 ...s.swc-stderr => switch.js.span.swc-stderr} | 0 ...js.swc-stderr => throw.js.span.swc-stderr} | 0 ...r => try-catch-finally.js.span.swc-stderr} | 0 ...wc-stderr => try-catch.js.span.swc-stderr} | 0 ...-stderr => try-finally.js.span.swc-stderr} | 0 ...js.swc-stderr => while.js.span.swc-stderr} | 0 ....js.swc-stderr => with.js.span.swc-stderr} | 0 ....js.swc-stderr => expr.js.span.swc-stderr} | 0 ....js.swc-stderr => obj1.js.span.swc-stderr} | 0 ....js.swc-stderr => obj2.js.span.swc-stderr} | 0 ....js.swc-stderr => obj3.js.span.swc-stderr} | 0 ....js.swc-stderr => obj4.js.span.swc-stderr} | 0 ...err => decorated-class.ts.span.swc-stderr} | 0 ...r => export-const-enum.ts.span.swc-stderr} | 0 ...tderr => import-equals.ts.span.swc-stderr} | 0 ...ts.swc-stderr => class.ts.span.swc-stderr} | 0 ....ts.swc-stderr => enum.ts.span.swc-stderr} | 0 ...swc-stderr => function.ts.span.swc-stderr} | 0 ...s.swc-stderr => module.ts.span.swc-stderr} | 0 ...r.ts.swc-stderr => var.ts.span.swc-stderr} | 0 ...r => arrow-type-params.ts.span.swc-stderr} | 0 ...ts.swc-stderr => arrow.ts.span.swc-stderr} | 0 ...as.ts.swc-stderr => as.ts.span.swc-stderr} | 0 ...err => const-assertion.ts.span.swc-stderr} | 0 ...wc-stderr => type-args.ts.span.swc-stderr} | 0 ...r => try-catch-unknown.ts.span.swc-stderr} | 0 ...ts.swc-stderr => alias.ts.span.swc-stderr} | 0 ...ts.swc-stderr => array.ts.span.swc-stderr} | 0 ....ts.swc-stderr => cond.ts.span.swc-stderr} | 0 ...rr => constructor-type.ts.span.swc-stderr} | 0 ....ts.swc-stderr => enum.ts.span.swc-stderr} | 0 ...fn.ts.swc-stderr => fn.ts.span.swc-stderr} | 0 ...s.swc-stderr => import.ts.span.swc-stderr} | 0 ...wc-stderr => interface.ts.span.swc-stderr} | 0 ...stderr => intersection.ts.span.swc-stderr} | 0 ...ts.swc-stderr => tuple.ts.span.swc-stderr} | 0 ...swc-stderr => optional.ts.span.swc-stderr} | 0 crates/swc_node_comments/src/lib.rs | 25 +++ 123 files changed, 1239 insertions(+), 22 deletions(-) create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/array/blockStmt/input.js.span.swc-stderr create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/call/simple/input.js.span.swc-stderr create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/paren-annotations/1/input.js create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/paren-annotations/1/input.js.span.swc-stderr create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/paren-annotations/1/input.js.swc-stderr create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/paren-pure/1/input.js create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/paren-pure/1/input.js.span.swc-stderr create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/paren-pure/1/input.js.swc-stderr create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/paren-pure/2/input.js create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/paren-pure/2/input.js.span.swc-stderr create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/paren-pure/2/input.js.swc-stderr create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/paren-pure/3/input.js create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/paren-pure/3/input.js.span.swc-stderr create mode 100644 crates/swc_ecma_parser/tests/comments/exprs/paren-pure/3/input.js.swc-stderr create mode 100644 crates/swc_ecma_parser/tests/comments/issue-3715/input.js.span.swc-stderr create mode 100644 crates/swc_ecma_parser/tests/comments/issue-4876/input.js.span.swc-stderr create mode 100644 crates/swc_ecma_parser/tests/comments/stmts/block/input.js.span.swc-stderr create mode 100644 crates/swc_ecma_parser/tests/comments/stmts/switch/input.js.span.swc-stderr rename crates/swc_ecma_parser/tests/span/js/{binary.js.swc-stderr => binary.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{accessor.js.swc-stderr => accessor.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{async-fn.js.swc-stderr => async-fn.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{class-no-close-brace.js.swc-stderr => class-no-close-brace.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{class.js.swc-stderr => class.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{computed-key.js.swc-stderr => computed-key.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{constructor.js.swc-stderr => constructor.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{decorator.js.swc-stderr => decorator.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{default-export.js.swc-stderr => default-export.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{default-import-string-names.js.swc-stderr => default-import-string-names.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{export-decl.js.swc-stderr => export-decl.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{export-string-names-1.js.swc-stderr => export-string-names-1.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{export-string-names-2.js.swc-stderr => export-string-names-2.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{export-string-names-3.js.swc-stderr => export-string-names-3.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{export.js.swc-stderr => export.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{fn.js.swc-stderr => fn.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{import-string-names-1.js.swc-stderr => import-string-names-1.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{import-string-names-2.js.swc-stderr => import-string-names-2.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{named-export.js.swc-stderr => named-export.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{namespace-export-string-names.js.swc-stderr => namespace-export-string-names.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{private-method.js.swc-stderr => private-method.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{private-prop.js.swc-stderr => private-prop.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{static-blocks-with-line-breaks.js.swc-stderr => static-blocks-with-line-breaks.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/decl/{static-blocks.js.swc-stderr => static-blocks.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{array.js.swc-stderr => array.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{arrow-2.js.swc-stderr => arrow-2.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{arrow-with-block.js.swc-stderr => arrow-with-block.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{arrow-with-paren.js.swc-stderr => arrow-with-paren.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{arrow.js.swc-stderr => arrow.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{await.js.swc-stderr => await.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{cond.js.swc-stderr => cond.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{dynamic-import.js.swc-stderr => dynamic-import.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{export-defaul.js.swc-stderr => export-defaul.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{member.js.swc-stderr => member.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{new.js.swc-stderr => new.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{null.js.swc-stderr => null.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{object.js.swc-stderr => object.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{optional-chaining.js.swc-stderr => optional-chaining.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{paren.js.swc-stderr => paren.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{regex.js.swc-stderr => regex.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{seq.js.swc-stderr => seq.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{string-literal.js.swc-stderr => string-literal.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{tagged-tpl.js.swc-stderr => tagged-tpl.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{tpl.js.swc-stderr => tpl.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{unary.js.swc-stderr => unary.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{update.js.swc-stderr => update.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/expr/{yield.js.swc-stderr => yield.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/issue-3236/{arrow_function.js.swc-stderr => arrow_function.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/issue-3236/{function.js.swc-stderr => function.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/pat/{array.js.swc-stderr => array.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/pat/{assign-pat-prop.js.swc-stderr => assign-pat-prop.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/pat/{assign-pat.js.swc-stderr => assign-pat.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/srcmap/1/{input.js.swc-stderr => input.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/srcmap/2/{input.js.swc-stderr => input.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/srcmap/3/{input.js.swc-stderr => input.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{debugger.js.swc-stderr => debugger.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{do-while.js.swc-stderr => do-while.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{empty.js.swc-stderr => empty.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{for-in.js.swc-stderr => for-in.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{for-of.js.swc-stderr => for-of.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{if.js.swc-stderr => if.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{label.js.swc-stderr => label.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{return.js.swc-stderr => return.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{switch.js.swc-stderr => switch.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{throw.js.swc-stderr => throw.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{try-catch-finally.js.swc-stderr => try-catch-finally.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{try-catch.js.swc-stderr => try-catch.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{try-finally.js.swc-stderr => try-finally.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{while.js.swc-stderr => while.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/stmt/{with.js.swc-stderr => with.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/super/{expr.js.swc-stderr => expr.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/super/{obj1.js.swc-stderr => obj1.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/super/{obj2.js.swc-stderr => obj2.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/super/{obj3.js.swc-stderr => obj3.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/js/super/{obj4.js.swc-stderr => obj4.js.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/decl/{decorated-class.ts.swc-stderr => decorated-class.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/decl/{export-const-enum.ts.swc-stderr => export-const-enum.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/decl/{import-equals.ts.swc-stderr => import-equals.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/declare/{class.ts.swc-stderr => class.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/declare/{enum.ts.swc-stderr => enum.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/declare/{function.ts.swc-stderr => function.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/declare/{module.ts.swc-stderr => module.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/declare/{var.ts.swc-stderr => var.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/expr/{arrow-type-params.ts.swc-stderr => arrow-type-params.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/expr/{arrow.ts.swc-stderr => arrow.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/expr/{as.ts.swc-stderr => as.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/expr/{const-assertion.ts.swc-stderr => const-assertion.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/expr/{type-args.ts.swc-stderr => type-args.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/stmt/{try-catch-unknown.ts.swc-stderr => try-catch-unknown.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/type/{alias.ts.swc-stderr => alias.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/type/{array.ts.swc-stderr => array.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/type/{cond.ts.swc-stderr => cond.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/type/{constructor-type.ts.swc-stderr => constructor-type.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/type/{enum.ts.swc-stderr => enum.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/type/{fn.ts.swc-stderr => fn.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/type/{import.ts.swc-stderr => import.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/type/{interface.ts.swc-stderr => interface.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/type/{intersection.ts.swc-stderr => intersection.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/type/{tuple.ts.swc-stderr => tuple.ts.span.swc-stderr} (100%) rename crates/swc_ecma_parser/tests/span/ts/type/tuple/{optional.ts.swc-stderr => optional.ts.span.swc-stderr} (100%) diff --git a/crates/swc_common/src/comments.rs b/crates/swc_common/src/comments.rs index 3482d9cf234..ac70c0be819 100644 --- a/crates/swc_common/src/comments.rs +++ b/crates/swc_common/src/comments.rs @@ -84,6 +84,47 @@ pub trait Comments { ret } + + /// This method is used to check if a comment with the given flag exist. + /// + /// If `flag` is `PURE`, this method will look for `@__PURE__` and + /// `#__PURE__`. + fn has_flag(&self, lo: BytePos, flag: &str) -> bool { + let cmts = self.take_leading(lo); + + let ret = if let Some(comments) = &cmts { + (|| { + for c in comments { + if c.kind == CommentKind::Block { + for line in c.text.lines() { + // jsdoc + let line = line.trim_start_matches(['*', ' ']); + let line = line.trim(); + + // + if line.len() == (flag.len() + 5) + && (line.starts_with("#__") || line.starts_with("@__")) + && line.ends_with("__") + && flag == &line[3..line.len() - 2] + { + return true; + } + } + } + } + + false + })() + } else { + false + }; + + if let Some(cmts) = cmts { + self.add_trailing_comments(lo, cmts); + } + + ret + } } macro_rules! delegate { @@ -139,6 +180,10 @@ macro_rules! delegate { fn add_pure_comment(&self, pos: BytePos) { (**self).add_pure_comment(pos) } + + fn has_flag(&self, lo: BytePos, flag: &str) -> bool { + (**self).has_flag(lo, flag) + } }; } @@ -225,6 +270,11 @@ impl Comments for NoopComments { #[cfg_attr(not(debug_assertions), inline(always))] fn add_pure_comment(&self, _: BytePos) {} + + #[inline] + fn has_flag(&self, _: BytePos, _: &str) -> bool { + false + } } /// This implementation behaves like [NoopComments] if it's [None]. @@ -347,6 +397,15 @@ where f(&[]) } } + + #[inline] + fn has_flag(&self, lo: BytePos, flag: &str) -> bool { + if let Some(c) = self { + c.has_flag(lo, flag) + } else { + false + } + } } pub type SingleThreadedCommentsMapInner = FxHashMap>; @@ -485,6 +544,31 @@ impl Comments for SingleThreadedComments { f(&[]) } } + + fn has_flag(&self, lo: BytePos, flag: &str) -> bool { + self.with_leading(lo, |comments| { + for c in comments { + if c.kind == CommentKind::Block { + for line in c.text.lines() { + // jsdoc + let line = line.trim_start_matches(['*', ' ']); + let line = line.trim(); + + // + if line.len() == (flag.len() + 5) + && (line.starts_with("#__") || line.starts_with("@__")) + && line.ends_with("__") + && flag == &line[3..line.len() - 2] + { + return true; + } + } + } + } + + false + }) + } } impl SingleThreadedComments { diff --git a/crates/swc_common/src/syntax_pos.rs b/crates/swc_common/src/syntax_pos.rs index a90dbce0736..f32e84b2be9 100644 --- a/crates/swc_common/src/syntax_pos.rs +++ b/crates/swc_common/src/syntax_pos.rs @@ -1139,11 +1139,17 @@ impl BytePos { self.0 >= Self::MIN_RESERVED.0 && self.0 != u32::MAX } - /// Returns true if this is synthesized and has no relevant input source + /// Returns `true`` if this is synthesized and has no relevant input source /// code. pub const fn is_dummy(self) -> bool { self.0 == 0 } + + /// Returns `true`` if this is explicitly synthesized or has relevant input + /// source so can have a comment. + pub const fn can_have_comment(self) -> bool { + self.0 != 0 + } } /// A character offset. Because of multibyte utf8 characters, a byte offset diff --git a/crates/swc_ecma_minifier/src/metadata/mod.rs b/crates/swc_ecma_minifier/src/metadata/mod.rs index 5e3d6dfe225..ee353458e37 100644 --- a/crates/swc_ecma_minifier/src/metadata/mod.rs +++ b/crates/swc_ecma_minifier/src/metadata/mod.rs @@ -311,24 +311,5 @@ fn has_flag(comments: Option<&dyn Comments>, span: Span, text: &'static str) -> return false; } - find_comment(comments, span, |c| { - if c.kind == CommentKind::Block { - for line in c.text.lines() { - // jsdoc - let line = line.trim_start_matches(['*', ' ']); - let line = line.trim(); - - // - if line.len() == (text.len() + 5) - && (line.starts_with("#__") || line.starts_with("@__")) - && line.ends_with("__") - && text == &line[3..line.len() - 2] - { - return true; - } - } - } - - false - }) + comments.has_flag(span.lo, text) } diff --git a/crates/swc_ecma_parser/tests/comments/exprs/array/blockStmt/input.js.span.swc-stderr b/crates/swc_ecma_parser/tests/comments/exprs/array/blockStmt/input.js.span.swc-stderr new file mode 100644 index 00000000000..eb5c9c266c5 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/array/blockStmt/input.js.span.swc-stderr @@ -0,0 +1,119 @@ + + x Module + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | ,-> React.useEffect(() => { + 2 | | // @refresh reset + 3 | `-> }); + `---- + + x ModuleItem + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | ,-> React.useEffect(() => { + 2 | | // @refresh reset + 3 | `-> }); + `---- + + x Stmt + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | ,-> React.useEffect(() => { + 2 | | // @refresh reset + 3 | `-> }); + `---- + + x ExprStmt + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | ,-> React.useEffect(() => { + 2 | | // @refresh reset + 3 | `-> }); + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | ,-> React.useEffect(() => { + 2 | | // @refresh reset + 3 | `-> }); + `---- + + x CallExpr + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | ,-> React.useEffect(() => { + 2 | | // @refresh reset + 3 | `-> }); + `---- + + x Callee + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | React.useEffect(() => { + : ^^^^^^^^^^^^^^^ + 2 | // @refresh reset + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | React.useEffect(() => { + : ^^^^^^^^^^^^^^^ + 2 | // @refresh reset + `---- + + x MemberExpr + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | React.useEffect(() => { + : ^^^^^^^^^^^^^^^ + 2 | // @refresh reset + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | React.useEffect(() => { + : ^^^^^ + 2 | // @refresh reset + `---- + + x Ident + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | React.useEffect(() => { + : ^^^^^ + 2 | // @refresh reset + `---- + + x Ident + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | React.useEffect(() => { + : ^^^^^^^^^ + 2 | // @refresh reset + `---- + + x ExprOrSpread + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | ,-> React.useEffect(() => { + 2 | | // @refresh reset + 3 | `-> }); + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | ,-> React.useEffect(() => { + 2 | | // @refresh reset + 3 | `-> }); + `---- + + x ArrowExpr + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | ,-> React.useEffect(() => { + 2 | | // @refresh reset + 3 | `-> }); + `---- + + x BlockStmtOrExpr + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | ,-> React.useEffect(() => { + 2 | | // @refresh reset + 3 | `-> }); + `---- + + x BlockStmt + ,-[$DIR/tests/comments/exprs/array/blockStmt/input.js:1:1] + 1 | ,-> React.useEffect(() => { + 2 | | // @refresh reset + 3 | `-> }); + `---- diff --git a/crates/swc_ecma_parser/tests/comments/exprs/call/simple/input.js.span.swc-stderr b/crates/swc_ecma_parser/tests/comments/exprs/call/simple/input.js.span.swc-stderr new file mode 100644 index 00000000000..c5a46645674 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/call/simple/input.js.span.swc-stderr @@ -0,0 +1,102 @@ + + x Module + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ModuleItem + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Stmt + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ExprStmt + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x CallExpr + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Callee + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^^ + `---- + + x Ident + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^^ + `---- + + x ExprOrSpread + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^ + `---- + + x Lit + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^ + `---- + + x Number + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^ + `---- + + x ExprOrSpread + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^ + `---- + + x Lit + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^ + `---- + + x Number + ,-[$DIR/tests/comments/exprs/call/simple/input.js:1:1] + 1 | test(123/*post: 9*/, 456/*post: 10*/); + : ^^^ + `---- diff --git a/crates/swc_ecma_parser/tests/comments/exprs/paren-annotations/1/input.js b/crates/swc_ecma_parser/tests/comments/exprs/paren-annotations/1/input.js new file mode 100644 index 00000000000..758e72404b6 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/paren-annotations/1/input.js @@ -0,0 +1,2 @@ +const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { +} \ No newline at end of file diff --git a/crates/swc_ecma_parser/tests/comments/exprs/paren-annotations/1/input.js.span.swc-stderr b/crates/swc_ecma_parser/tests/comments/exprs/paren-annotations/1/input.js.span.swc-stderr new file mode 100644 index 00000000000..909a530c935 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/paren-annotations/1/input.js.span.swc-stderr @@ -0,0 +1,88 @@ + + x Module + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | ,-> const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + 2 | `-> } + `---- + + x ModuleItem + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | ,-> const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + 2 | `-> } + `---- + + x Stmt + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | ,-> const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + 2 | `-> } + `---- + + x Decl + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | ,-> const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + 2 | `-> } + `---- + + x VarDecl + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | ,-> const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + 2 | `-> } + `---- + + x VarDeclarator + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | ,-> const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + 2 | `-> } + `---- + + x Pat + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + : ^^^ + 2 | } + `---- + + x Ident + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + : ^^^ + 2 | } + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | ,-> const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + 2 | `-> } + `---- + + x ArrowExpr + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | ,-> const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + 2 | `-> } + `---- + + x Pat + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + : ^^^^ + 2 | } + `---- + + x Ident + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + : ^^^^ + 2 | } + `---- + + x BlockStmtOrExpr + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | ,-> const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + 2 | `-> } + `---- + + x BlockStmt + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | ,-> const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + 2 | `-> } + `---- diff --git a/crates/swc_ecma_parser/tests/comments/exprs/paren-annotations/1/input.js.swc-stderr b/crates/swc_ecma_parser/tests/comments/exprs/paren-annotations/1/input.js.swc-stderr new file mode 100644 index 00000000000..fa38cbc4b99 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/paren-annotations/1/input.js.swc-stderr @@ -0,0 +1,10 @@ + + > Leading (lo) + +Error: + > #__NO_SIDE_EFFECTS__ + ,-[$DIR/tests/comments/exprs/paren-annotations/1/input.js:1:1] + 1 | const fnB = /*#__NO_SIDE_EFFECTS__*/ (args) => { + : ^ + 2 | } + `---- diff --git a/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/1/input.js b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/1/input.js new file mode 100644 index 00000000000..c4eb397403c --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/1/input.js @@ -0,0 +1 @@ +/*#__PURE__*/ (console.log('simple')) diff --git a/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/1/input.js.span.swc-stderr b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/1/input.js.span.swc-stderr new file mode 100644 index 00000000000..71044d2def0 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/1/input.js.span.swc-stderr @@ -0,0 +1,108 @@ + + x Module + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ModuleItem + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Stmt + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ExprStmt + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ParenExpr + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^^^^^^^^^^^^^^ + `---- + + x CallExpr + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Callee + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^^^^ + `---- + + x MemberExpr + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^ + `---- + + x Ident + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^ + `---- + + x Ident + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^ + `---- + + x ExprOrSpread + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^ + `---- + + x Lit + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^ + `---- + + x Str + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^^^^^^^^ + `---- diff --git a/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/1/input.js.swc-stderr b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/1/input.js.swc-stderr new file mode 100644 index 00000000000..b7a43b6ec58 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/1/input.js.swc-stderr @@ -0,0 +1,9 @@ + + > Leading (lo) + +Error: + > #__PURE__ + ,-[$DIR/tests/comments/exprs/paren-pure/1/input.js:1:1] + 1 | /*#__PURE__*/ (console.log('simple')) + : ^ + `---- diff --git a/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/2/input.js b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/2/input.js new file mode 100644 index 00000000000..dfd5768a918 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/2/input.js @@ -0,0 +1,2 @@ + +/*#__PURE__*/((() => import('./any'))()) diff --git a/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/2/input.js.span.swc-stderr b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/2/input.js.span.swc-stderr new file mode 100644 index 00000000000..0c3da07ebc4 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/2/input.js.span.swc-stderr @@ -0,0 +1,147 @@ + + x Module + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ModuleItem + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Stmt + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ExprStmt + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ParenExpr + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x CallExpr + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Callee + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ParenExpr + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ArrowExpr + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^^^^^^^ + `---- + + x BlockStmtOrExpr + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^ + `---- + + x CallExpr + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^^^^^^^^^ + `---- + + x Callee + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^ + `---- + + x ExprOrSpread + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^ + `---- + + x Lit + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^ + `---- + + x Str + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^^^^^^^ + `---- diff --git a/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/2/input.js.swc-stderr b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/2/input.js.swc-stderr new file mode 100644 index 00000000000..5e478e1f21a --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/2/input.js.swc-stderr @@ -0,0 +1,10 @@ + + > Leading (lo) + +Error: + > #__PURE__ + ,-[$DIR/tests/comments/exprs/paren-pure/2/input.js:1:1] + 1 | + 2 | /*#__PURE__*/((() => import('./any'))()) + : ^ + `---- diff --git a/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/3/input.js b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/3/input.js new file mode 100644 index 00000000000..a26328f881b --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/3/input.js @@ -0,0 +1 @@ +/*#__PURE__*/(((() => import('./any'))())) diff --git a/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/3/input.js.span.swc-stderr b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/3/input.js.span.swc-stderr new file mode 100644 index 00000000000..35f144aa130 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/3/input.js.span.swc-stderr @@ -0,0 +1,138 @@ + + x Module + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ModuleItem + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Stmt + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ExprStmt + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ParenExpr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ParenExpr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x CallExpr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Callee + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ParenExpr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ArrowExpr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^^^^^^^ + `---- + + x BlockStmtOrExpr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^ + `---- + + x CallExpr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^^^^^^^^^ + `---- + + x Callee + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^ + `---- + + x ExprOrSpread + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^ + `---- + + x Lit + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^ + `---- + + x Str + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^^^^^^^ + `---- diff --git a/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/3/input.js.swc-stderr b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/3/input.js.swc-stderr new file mode 100644 index 00000000000..2d478fadb19 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/exprs/paren-pure/3/input.js.swc-stderr @@ -0,0 +1,9 @@ + + > Leading (lo) + +Error: + > #__PURE__ + ,-[$DIR/tests/comments/exprs/paren-pure/3/input.js:1:1] + 1 | /*#__PURE__*/(((() => import('./any'))())) + : ^ + `---- diff --git a/crates/swc_ecma_parser/tests/comments/issue-3715/input.js.span.swc-stderr b/crates/swc_ecma_parser/tests/comments/issue-3715/input.js.span.swc-stderr new file mode 100644 index 00000000000..01eff2f7561 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/issue-3715/input.js.span.swc-stderr @@ -0,0 +1,54 @@ + + x Module + ,-[$DIR/tests/comments/issue-3715/input.js:1:1] + 1 | a() /* IMPORTANT_DO_NOT_REMOVE */; + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ModuleItem + ,-[$DIR/tests/comments/issue-3715/input.js:1:1] + 1 | a() /* IMPORTANT_DO_NOT_REMOVE */; + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Stmt + ,-[$DIR/tests/comments/issue-3715/input.js:1:1] + 1 | a() /* IMPORTANT_DO_NOT_REMOVE */; + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x ExprStmt + ,-[$DIR/tests/comments/issue-3715/input.js:1:1] + 1 | a() /* IMPORTANT_DO_NOT_REMOVE */; + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- + + x Expr + ,-[$DIR/tests/comments/issue-3715/input.js:1:1] + 1 | a() /* IMPORTANT_DO_NOT_REMOVE */; + : ^^^ + `---- + + x CallExpr + ,-[$DIR/tests/comments/issue-3715/input.js:1:1] + 1 | a() /* IMPORTANT_DO_NOT_REMOVE */; + : ^^^ + `---- + + x Callee + ,-[$DIR/tests/comments/issue-3715/input.js:1:1] + 1 | a() /* IMPORTANT_DO_NOT_REMOVE */; + : ^ + `---- + + x Expr + ,-[$DIR/tests/comments/issue-3715/input.js:1:1] + 1 | a() /* IMPORTANT_DO_NOT_REMOVE */; + : ^ + `---- + + x Ident + ,-[$DIR/tests/comments/issue-3715/input.js:1:1] + 1 | a() /* IMPORTANT_DO_NOT_REMOVE */; + : ^ + `---- diff --git a/crates/swc_ecma_parser/tests/comments/issue-4876/input.js.span.swc-stderr b/crates/swc_ecma_parser/tests/comments/issue-4876/input.js.span.swc-stderr new file mode 100644 index 00000000000..a68a800bfe3 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/issue-4876/input.js.span.swc-stderr @@ -0,0 +1,128 @@ + + x Module + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^^^^^^^^^^^^^^^ + 11 | // b + `---- + + x ModuleItem + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^^^^^^^^^^^^^^^ + 11 | // b + `---- + + x Stmt + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^^^^^^^^^^^^^^^ + 11 | // b + `---- + + x ExprStmt + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^^^^^^^^^^^^^^^ + 11 | // b + `---- + + x Expr + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^^^^^^^^^^^^^^ + 11 | // b + `---- + + x CallExpr + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^^^^^^^^^^^^^^ + 11 | // b + `---- + + x Callee + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^^^^^^^^^^^ + 11 | // b + `---- + + x Expr + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^^^^^^^^^^^ + 11 | // b + `---- + + x MemberExpr + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^^^^^^^^^^^ + 11 | // b + `---- + + x Expr + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^^^^^^^ + 11 | // b + `---- + + x Ident + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^^^^^^^ + 11 | // b + `---- + + x Ident + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^^^ + 11 | // b + `---- + + x ExprOrSpread + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^ + 11 | // b + `---- + + x Expr + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^ + 11 | // b + `---- + + x Lit + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^ + 11 | // b + `---- + + x Number + ,-[$DIR/tests/comments/issue-4876/input.js:9:1] + 9 | // a + 10 | console.log(1); + : ^ + 11 | // b + `---- diff --git a/crates/swc_ecma_parser/tests/comments/stmts/block/input.js.span.swc-stderr b/crates/swc_ecma_parser/tests/comments/stmts/block/input.js.span.swc-stderr new file mode 100644 index 00000000000..b84edd5d604 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/stmts/block/input.js.span.swc-stderr @@ -0,0 +1,63 @@ + + x Module + ,-[$DIR/tests/comments/stmts/block/input.js:1:1] + 1 | ,-> while (1) { + 2 | | /* test */ + 3 | `-> } + `---- + + x ModuleItem + ,-[$DIR/tests/comments/stmts/block/input.js:1:1] + 1 | ,-> while (1) { + 2 | | /* test */ + 3 | `-> } + `---- + + x Stmt + ,-[$DIR/tests/comments/stmts/block/input.js:1:1] + 1 | ,-> while (1) { + 2 | | /* test */ + 3 | `-> } + `---- + + x WhileStmt + ,-[$DIR/tests/comments/stmts/block/input.js:1:1] + 1 | ,-> while (1) { + 2 | | /* test */ + 3 | `-> } + `---- + + x Expr + ,-[$DIR/tests/comments/stmts/block/input.js:1:1] + 1 | while (1) { + : ^ + 2 | /* test */ + `---- + + x Lit + ,-[$DIR/tests/comments/stmts/block/input.js:1:1] + 1 | while (1) { + : ^ + 2 | /* test */ + `---- + + x Number + ,-[$DIR/tests/comments/stmts/block/input.js:1:1] + 1 | while (1) { + : ^ + 2 | /* test */ + `---- + + x Stmt + ,-[$DIR/tests/comments/stmts/block/input.js:1:1] + 1 | ,-> while (1) { + 2 | | /* test */ + 3 | `-> } + `---- + + x BlockStmt + ,-[$DIR/tests/comments/stmts/block/input.js:1:1] + 1 | ,-> while (1) { + 2 | | /* test */ + 3 | `-> } + `---- diff --git a/crates/swc_ecma_parser/tests/comments/stmts/switch/input.js.span.swc-stderr b/crates/swc_ecma_parser/tests/comments/stmts/switch/input.js.span.swc-stderr new file mode 100644 index 00000000000..db60fa41b50 --- /dev/null +++ b/crates/swc_ecma_parser/tests/comments/stmts/switch/input.js.span.swc-stderr @@ -0,0 +1,129 @@ + + x Module + ,-[$DIR/tests/comments/stmts/switch/input.js:1:1] + 1 | ,-> switch (1) { + 2 | | case 2: + 3 | | 3; + 4 | | // 4 + 5 | `-> } + `---- + + x ModuleItem + ,-[$DIR/tests/comments/stmts/switch/input.js:1:1] + 1 | ,-> switch (1) { + 2 | | case 2: + 3 | | 3; + 4 | | // 4 + 5 | `-> } + `---- + + x Stmt + ,-[$DIR/tests/comments/stmts/switch/input.js:1:1] + 1 | ,-> switch (1) { + 2 | | case 2: + 3 | | 3; + 4 | | // 4 + 5 | `-> } + `---- + + x SwitchStmt + ,-[$DIR/tests/comments/stmts/switch/input.js:1:1] + 1 | ,-> switch (1) { + 2 | | case 2: + 3 | | 3; + 4 | | // 4 + 5 | `-> } + `---- + + x Expr + ,-[$DIR/tests/comments/stmts/switch/input.js:1:1] + 1 | switch (1) { + : ^ + 2 | case 2: + `---- + + x Lit + ,-[$DIR/tests/comments/stmts/switch/input.js:1:1] + 1 | switch (1) { + : ^ + 2 | case 2: + `---- + + x Number + ,-[$DIR/tests/comments/stmts/switch/input.js:1:1] + 1 | switch (1) { + : ^ + 2 | case 2: + `---- + + x SwitchCase + ,-[$DIR/tests/comments/stmts/switch/input.js:1:1] + 1 | switch (1) { + 2 | ,-> case 2: + 3 | `-> 3; + 4 | // 4 + `---- + + x Expr + ,-[$DIR/tests/comments/stmts/switch/input.js:1:1] + 1 | switch (1) { + 2 | case 2: + : ^ + 3 | 3; + `---- + + x Lit + ,-[$DIR/tests/comments/stmts/switch/input.js:1:1] + 1 | switch (1) { + 2 | case 2: + : ^ + 3 | 3; + `---- + + x Number + ,-[$DIR/tests/comments/stmts/switch/input.js:1:1] + 1 | switch (1) { + 2 | case 2: + : ^ + 3 | 3; + `---- + + x Stmt + ,-[$DIR/tests/comments/stmts/switch/input.js:2:1] + 2 | case 2: + 3 | 3; + : ^^ + 4 | // 4 + `---- + + x ExprStmt + ,-[$DIR/tests/comments/stmts/switch/input.js:2:1] + 2 | case 2: + 3 | 3; + : ^^ + 4 | // 4 + `---- + + x Expr + ,-[$DIR/tests/comments/stmts/switch/input.js:2:1] + 2 | case 2: + 3 | 3; + : ^ + 4 | // 4 + `---- + + x Lit + ,-[$DIR/tests/comments/stmts/switch/input.js:2:1] + 2 | case 2: + 3 | 3; + : ^ + 4 | // 4 + `---- + + x Number + ,-[$DIR/tests/comments/stmts/switch/input.js:2:1] + 2 | case 2: + 3 | 3; + : ^ + 4 | // 4 + `---- diff --git a/crates/swc_ecma_parser/tests/span.rs b/crates/swc_ecma_parser/tests/span.rs index c743edee220..186474e64c0 100644 --- a/crates/swc_ecma_parser/tests/span.rs +++ b/crates/swc_ecma_parser/tests/span.rs @@ -7,6 +7,7 @@ use swc_ecma_visit::{Visit, VisitWith}; #[testing::fixture("tests/span/**/*.js")] #[testing::fixture("tests/span/**/*.ts")] +#[testing::fixture("tests/comments/**/*.js")] fn span(entry: PathBuf) { let dir = entry.parent().unwrap().to_path_buf(); let file_name = entry @@ -53,7 +54,7 @@ fn span(entry: PathBuf) { }) .expect_err("failed to run test"); - let ref_file = format!("{}.swc-stderr", dir.join(&file_name).display()); + let ref_file = format!("{}.span.swc-stderr", dir.join(&file_name).display()); content.compare_to_file(ref_file).unwrap(); } diff --git a/crates/swc_ecma_parser/tests/span/js/binary.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/binary.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/binary.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/binary.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/accessor.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/accessor.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/accessor.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/accessor.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/async-fn.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/async-fn.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/async-fn.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/async-fn.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/class-no-close-brace.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/class-no-close-brace.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/class-no-close-brace.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/class-no-close-brace.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/class.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/class.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/class.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/class.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/computed-key.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/computed-key.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/computed-key.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/computed-key.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/constructor.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/constructor.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/constructor.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/constructor.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/decorator.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/decorator.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/decorator.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/decorator.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/default-export.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/default-export.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/default-export.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/default-export.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/default-import-string-names.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/default-import-string-names.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/default-import-string-names.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/default-import-string-names.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/export-decl.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/export-decl.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/export-decl.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/export-decl.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/export-string-names-1.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/export-string-names-1.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/export-string-names-1.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/export-string-names-1.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/export-string-names-2.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/export-string-names-2.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/export-string-names-2.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/export-string-names-2.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/export-string-names-3.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/export-string-names-3.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/export-string-names-3.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/export-string-names-3.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/export.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/export.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/export.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/export.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/fn.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/fn.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/fn.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/fn.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/import-string-names-1.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/import-string-names-1.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/import-string-names-1.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/import-string-names-1.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/import-string-names-2.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/import-string-names-2.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/import-string-names-2.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/import-string-names-2.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/named-export.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/named-export.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/named-export.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/named-export.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/namespace-export-string-names.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/namespace-export-string-names.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/namespace-export-string-names.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/namespace-export-string-names.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/private-method.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/private-method.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/private-method.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/private-method.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/private-prop.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/private-prop.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/private-prop.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/private-prop.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/static-blocks-with-line-breaks.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/static-blocks-with-line-breaks.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/static-blocks-with-line-breaks.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/static-blocks-with-line-breaks.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/decl/static-blocks.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/decl/static-blocks.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/decl/static-blocks.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/decl/static-blocks.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/array.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/array.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/array.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/array.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/arrow-2.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/arrow-2.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/arrow-2.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/arrow-2.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/arrow-with-block.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/arrow-with-block.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/arrow-with-block.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/arrow-with-block.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/arrow-with-paren.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/arrow-with-paren.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/arrow-with-paren.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/arrow-with-paren.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/arrow.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/arrow.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/arrow.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/arrow.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/await.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/await.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/await.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/await.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/cond.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/cond.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/cond.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/cond.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/dynamic-import.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/dynamic-import.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/dynamic-import.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/dynamic-import.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/export-defaul.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/export-defaul.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/export-defaul.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/export-defaul.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/member.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/member.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/member.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/member.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/new.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/new.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/new.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/new.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/null.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/null.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/null.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/null.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/object.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/object.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/object.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/object.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/optional-chaining.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/optional-chaining.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/optional-chaining.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/optional-chaining.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/paren.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/paren.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/paren.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/paren.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/regex.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/regex.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/regex.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/regex.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/seq.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/seq.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/seq.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/seq.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/string-literal.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/string-literal.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/string-literal.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/string-literal.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/tagged-tpl.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/tagged-tpl.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/tagged-tpl.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/tagged-tpl.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/tpl.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/tpl.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/tpl.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/tpl.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/unary.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/unary.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/unary.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/unary.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/update.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/update.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/update.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/update.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/expr/yield.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/expr/yield.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/expr/yield.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/expr/yield.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/issue-3236/arrow_function.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/issue-3236/arrow_function.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/issue-3236/arrow_function.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/issue-3236/arrow_function.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/issue-3236/function.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/issue-3236/function.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/issue-3236/function.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/issue-3236/function.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/pat/array.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/pat/array.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/pat/array.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/pat/array.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/pat/assign-pat-prop.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/pat/assign-pat-prop.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/pat/assign-pat-prop.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/pat/assign-pat-prop.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/pat/assign-pat.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/pat/assign-pat.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/pat/assign-pat.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/pat/assign-pat.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/srcmap/1/input.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/srcmap/1/input.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/srcmap/1/input.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/srcmap/1/input.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/srcmap/2/input.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/srcmap/2/input.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/srcmap/2/input.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/srcmap/2/input.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/srcmap/3/input.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/srcmap/3/input.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/srcmap/3/input.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/srcmap/3/input.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/debugger.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/debugger.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/debugger.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/debugger.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/do-while.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/do-while.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/do-while.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/do-while.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/empty.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/empty.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/empty.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/empty.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/for-in.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/for-in.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/for-in.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/for-in.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/for-of.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/for-of.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/for-of.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/for-of.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/if.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/if.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/if.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/if.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/label.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/label.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/label.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/label.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/return.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/return.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/return.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/return.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/switch.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/switch.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/switch.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/switch.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/throw.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/throw.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/throw.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/throw.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/try-catch-finally.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/try-catch-finally.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/try-catch-finally.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/try-catch-finally.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/try-catch.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/try-catch.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/try-catch.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/try-catch.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/try-finally.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/try-finally.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/try-finally.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/try-finally.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/while.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/while.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/while.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/while.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/stmt/with.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/stmt/with.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/stmt/with.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/stmt/with.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/super/expr.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/super/expr.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/super/expr.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/super/expr.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/super/obj1.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/super/obj1.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/super/obj1.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/super/obj1.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/super/obj2.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/super/obj2.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/super/obj2.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/super/obj2.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/super/obj3.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/super/obj3.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/super/obj3.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/super/obj3.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/js/super/obj4.js.swc-stderr b/crates/swc_ecma_parser/tests/span/js/super/obj4.js.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/js/super/obj4.js.swc-stderr rename to crates/swc_ecma_parser/tests/span/js/super/obj4.js.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/decl/decorated-class.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/decl/decorated-class.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/decl/decorated-class.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/decl/decorated-class.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/decl/export-const-enum.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/decl/export-const-enum.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/decl/export-const-enum.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/decl/export-const-enum.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/decl/import-equals.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/decl/import-equals.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/decl/import-equals.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/decl/import-equals.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/declare/class.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/declare/class.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/declare/class.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/declare/class.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/declare/enum.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/declare/enum.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/declare/enum.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/declare/enum.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/declare/function.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/declare/function.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/declare/function.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/declare/function.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/declare/module.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/declare/module.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/declare/module.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/declare/module.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/declare/var.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/declare/var.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/declare/var.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/declare/var.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/expr/arrow-type-params.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/expr/arrow-type-params.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/expr/arrow-type-params.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/expr/arrow-type-params.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/expr/arrow.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/expr/arrow.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/expr/arrow.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/expr/arrow.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/expr/as.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/expr/as.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/expr/as.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/expr/as.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/expr/const-assertion.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/expr/const-assertion.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/expr/const-assertion.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/expr/const-assertion.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/expr/type-args.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/expr/type-args.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/expr/type-args.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/expr/type-args.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/stmt/try-catch-unknown.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/stmt/try-catch-unknown.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/stmt/try-catch-unknown.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/stmt/try-catch-unknown.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/type/alias.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/type/alias.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/type/alias.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/type/alias.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/type/array.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/type/array.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/type/array.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/type/array.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/type/cond.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/type/cond.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/type/cond.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/type/cond.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/type/constructor-type.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/type/constructor-type.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/type/constructor-type.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/type/constructor-type.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/type/enum.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/type/enum.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/type/enum.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/type/enum.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/type/fn.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/type/fn.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/type/fn.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/type/fn.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/type/import.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/type/import.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/type/import.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/type/import.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/type/interface.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/type/interface.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/type/interface.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/type/interface.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/type/intersection.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/type/intersection.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/type/intersection.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/type/intersection.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/type/tuple.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/type/tuple.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/type/tuple.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/type/tuple.ts.span.swc-stderr diff --git a/crates/swc_ecma_parser/tests/span/ts/type/tuple/optional.ts.swc-stderr b/crates/swc_ecma_parser/tests/span/ts/type/tuple/optional.ts.span.swc-stderr similarity index 100% rename from crates/swc_ecma_parser/tests/span/ts/type/tuple/optional.ts.swc-stderr rename to crates/swc_ecma_parser/tests/span/ts/type/tuple/optional.ts.span.swc-stderr diff --git a/crates/swc_node_comments/src/lib.rs b/crates/swc_node_comments/src/lib.rs index 589ff7cf4e4..7059f0f9642 100644 --- a/crates/swc_node_comments/src/lib.rs +++ b/crates/swc_node_comments/src/lib.rs @@ -132,4 +132,29 @@ impl Comments for SwcComments { ret } + + fn has_flag(&self, lo: BytePos, flag: &str) -> bool { + self.with_leading(lo, |comments| { + for c in comments { + if c.kind == CommentKind::Block { + for line in c.text.lines() { + // jsdoc + let line = line.trim_start_matches(['*', ' ']); + let line = line.trim(); + + // + if line.len() == (flag.len() + 5) + && (line.starts_with("#__") || line.starts_with("@__")) + && line.ends_with("__") + && flag == &line[3..line.len() - 2] + { + return true; + } + } + } + } + + false + }) + } }