oxc/tasks/coverage
Boshen e78cba6464 refactor(minifier): ast passes infrastructure (#4625)
After studying google closure compiler, I'm leaning towards a multi-ast-pass infrastructure for the minifier.

This is one of the few places where we are going to trade maintainability over performance, given the goal of the minifier is compression size not performance.

All of the terminologies and separation of concerns are aligned with google closure compiler.

Infrastructure of `terser` and `esbuild` are not suitable for us to study nor pursuit. Their code are so tightly coupled - I failed to comprehend any of them every time I try to walk through a piece of optmization. Google closure compiler despite being written in Java, it's actually the most readable minifier out there.

To improve performance between ast passes, I envision a change detection system over a portion of the code.

The benchmark will demonstrate the performance regression of running 5 ast passes instead of 2.

To complete this PR, I need to figure out "fix-point" and order of these ast passes.
2024-08-04 11:58:39 +00:00
..
misc fix(parser): fix enum member parsing (#4543) 2024-07-30 10:43:09 +00:00
src refactor(minifier): ast passes infrastructure (#4625) 2024-08-04 11:58:39 +00:00
Cargo.toml chore: turn off doctest for all [[bin]] 2024-07-14 16:55:19 +08:00
codegen_babel.snap chore: bump test262, babel and TypeScript submodules (#3644) 2024-06-12 18:42:32 +08:00
codegen_misc.snap fix(parser): fix enum member parsing (#4543) 2024-07-30 10:43:09 +00:00
codegen_runtime_test262.snap feat(codegen): improve codegen formatting (#3731) 2024-06-18 04:14:10 +00:00
codegen_sourcemap.snap feat(codegen): implement BinaryExpressionVisitor (#4548) 2024-07-31 12:44:19 +00:00
codegen_test262.snap chore: bump test262, babel and TypeScript submodules (#3644) 2024-06-12 18:42:32 +08:00
codegen_typescript.snap refactor(minifier): ast passes infrastructure (#4625) 2024-08-04 11:58:39 +00:00
minifier_babel.snap chore: bump test262, babel and TypeScript submodules (#3644) 2024-06-12 18:42:32 +08:00
minifier_test262.snap refactor(minifier): ast passes infrastructure (#4625) 2024-08-04 11:58:39 +00:00
parser_babel.snap refactor(parser): use error codes for ts diagnostics (#4335) 2024-07-18 16:09:25 +00:00
parser_misc.snap fix(parser): parse assert keyword in TSImportAttributes (#4610) 2024-08-04 01:41:31 +00:00
parser_test262.snap refactor(parser): use error codes for ts diagnostics (#4335) 2024-07-18 16:09:25 +00:00
parser_typescript.snap fix(parser): parse assert keyword in TSImportAttributes (#4610) 2024-08-04 01:41:31 +00:00
prettier_babel.snap feat(parser): parse modifiers with parse_modifiers (take 2) (#3977) 2024-06-30 03:46:34 +00:00
prettier_misc.snap chore(coverage): add test for huge binary expression and nested if statements (#4084) 2024-07-08 00:15:26 +08:00
prettier_test262.snap feat(parser): parse modifiers with parse_modifiers (take 2) (#3977) 2024-06-30 03:46:34 +00:00
prettier_typescript.snap refactor(parser): use function instead of trait to parse list with rest element (#4028) 2024-07-02 13:43:14 +00:00
README.md chore: bump test262, babel and TypeScript submodules (#3644) 2024-06-12 18:42:32 +08:00
transformer_babel.snap feat(parser): parse modifiers with parse_modifiers (take 2) (#3977) 2024-06-30 03:46:34 +00:00
transformer_misc.snap fix(parser): fix enum member parsing (#4543) 2024-07-30 10:43:09 +00:00
transformer_test262.snap chore: bump test262, babel and TypeScript submodules (#3644) 2024-06-12 18:42:32 +08:00
transformer_typescript.snap feat(semantic): add ReferenceFlags::TSTypeQuery to indicate referenced by TSTypeQuery (#4317) 2024-07-17 09:52:57 +00:00
transpile.snap fix(codegen): print parenthesis properly (#4245) 2024-07-14 04:13:10 +00:00

Coverage

Tools are tested against test262, babel and TypeScript for conformance.

Clone the test repositories beforehand:

just submodules

Development

# full run
cargo coverage
cargo coverage js # for test262
cargo coverage babel # for babel
cargo coverage ts # for typescript

# run in watch
cargo watch -x 'coverage js'

# filter for a file path
cargo watch -x 'coverage js --filter filter-file-path'

# find crash scene by turning off rayon and print out the test cases in serial
cargo coverage -- --debug

# Run after submodules are updated
UPDATE_SNAPSHOT=1 just c