oxc/justfile
overlookmotel 3b2a3477d4 test(transformer): script to amend Babel fixtures (#7122)
Add a NodeJS script which amends Babel's fixtures in place to remove transform plugins which we don't support from `options.json` files. Where options are changed from the original, the script runs Babel transform with the new options to regenerate the fixture `output.js` files.

Currently limited to transforming the fixtures for `babel-plugin-transform-class-properties` transform, but we can also enable it for other plugins if we wish in future, to get additional test coverage.
2024-11-25 10:24:19 +00:00

213 lines
5.7 KiB
Makefile
Executable file

#!/usr/bin/env -S just --justfile
set windows-shell := ["powershell.exe", "-NoLogo", "-Command"]
set shell := ["bash", "-cu"]
_default:
@just --list -u
alias r := ready
alias c := conformance
alias f := fix
alias new-typescript-rule := new-ts-rule
# Make sure you have cargo-binstall installed.
# You can download the pre-compiled binary from <https://github.com/cargo-bins/cargo-binstall#installation>
# or install via `cargo install cargo-binstall`
# Initialize the project by installing all the necessary tools.
init:
# Rust related init
cargo binstall watchexec-cli cargo-insta typos-cli cargo-shear dprint -y
# Node.js related init
pnpm install
# When ready, run the same CI commands
ready:
git diff --exit-code --quiet
typos
just fmt
just check
just test
just lint
just doc
just ast
git status
# Clone or update submodules
submodules:
just clone-submodule tasks/coverage/test262 https://github.com/tc39/test262.git fd979d85d4e4b74ef1ed097d25c71263417d5aad
just clone-submodule tasks/coverage/babel https://github.com/babel/babel.git 54a8389fa31ce4fd18b0335b05832dc1ad3cc21f
just clone-submodule tasks/coverage/typescript https://github.com/microsoft/TypeScript.git d85767abfd83880cea17cea70f9913e9c4496dcc
just clone-submodule tasks/prettier_conformance/prettier https://github.com/prettier/prettier.git 52829385bcc4d785e58ae2602c0b098a643523c9
node tasks/transform_conformance/update_fixtures.js
# Install git pre-commit to format files
install-hook:
echo -e "#!/bin/sh\njust fmt" > .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
watch *args='':
watchexec --no-vcs-ignore {{args}}
watch-check:
just watch "'cargo check; cargo clippy'"
# Run the example in `parser`, `formatter`, `linter`
example tool *args='':
cargo run -p oxc_{{tool}} --example {{tool}} -- {{args}}
watch-example *args='':
just watch 'just example {{args}}'
# Build oxlint in release build; Run with `./target/release/oxlint`.
oxlint :
cargo oxlint
# Watch oxlint
watch-oxlint *args='':
just watch 'cargo run -p oxlint -- {{args}}'
# Run cargo check
check:
cargo ck
# Run all the tests
test:
cargo test
# Lint the whole project
lint:
cargo lint -- --deny warnings
# Format all files
fmt:
cargo shear --fix # remove all unused dependencies
cargo fmt --all
dprint fmt
[unix]
doc:
RUSTDOCFLAGS='-D warnings' cargo doc --no-deps --document-private-items
[windows]
doc:
$Env:RUSTDOCFLAGS='-D warnings'; cargo doc --no-deps --document-private-items
# Fix all auto-fixable format and lint issues. Make sure your working tree is clean first.
fix:
cargo clippy --fix --allow-staged --no-deps
just fmt
typos -w
git status
# Run all the conformance tests. See `tasks/coverage`, `tasks/transform_conformance`, `tasks/minsize`
coverage:
cargo coverage
cargo run -p oxc_transform_conformance -- --exec
cargo run -p oxc_prettier_conformance
cargo minsize
# Run Test262, Babel and TypeScript conformance suite
conformance *args='':
cargo coverage -- {{args}}
# Generate AST related boilerplate code.
# Run this when AST definition is changed.
ast:
cargo run -p oxc_ast_tools
just check
# Get code coverage
codecov:
cargo codecov --html
# Run the benchmarks. See `tasks/benchmark`
benchmark:
cargo benchmark
# Automatically DRY up Cargo.toml manifests in a workspace.
autoinherit:
cargo binstall cargo-autoinherit
cargo autoinherit
# Test Transform
test-transform *args='':
cargo run -p oxc_transform_conformance -- --exec {{args}}
# Install wasm-pack
install-wasm:
cargo binstall wasm-pack
watch-wasm:
just watch 'just build-wasm dev'
build-wasm mode="release":
wasm-pack build --out-dir ../../npm/oxc-wasm --target web --{{mode}} --scope oxc crates/oxc_wasm
cp crates/oxc_wasm/package.json npm/oxc-wasm/package.json
# Generate the JavaScript global variables. See `tasks/javascript_globals`
javascript-globals:
cargo run -p javascript_globals
# Create a new lint rule by providing the ESLint name. See `tasks/rulegen`
new-rule name:
cargo run -p rulegen {{name}}
new-jest-rule name:
cargo run -p rulegen {{name}} jest
new-ts-rule name:
cargo run -p rulegen {{name}} typescript
new-unicorn-rule name:
cargo run -p rulegen {{name}} unicorn
new-import-rule name:
cargo run -p rulegen {{name}} import
new-react-rule name:
cargo run -p rulegen {{name}} react
new-jsx-a11y-rule name:
cargo run -p rulegen {{name}} jsx-a11y
new-oxc-rule name:
cargo run -p rulegen {{name}} oxc
new-nextjs-rule name:
cargo run -p rulegen {{name}} nextjs
new-jsdoc-rule name:
cargo run -p rulegen {{name}} jsdoc
new-react-perf-rule name:
cargo run -p rulegen {{name}} react-perf
new-n-rule name:
cargo run -p rulegen {{name}} n
new-promise-rule name:
cargo run -p rulegen {{name}} promise
new-vitest-rule name:
cargo run -p rulegen {{name}} vitest
new-security-rule name:
cargo run -p rulegen {{name}} security
[unix]
clone-submodule dir url sha:
cd {{dir}} || git init {{dir}}
cd {{dir}} && git remote add origin {{url}} || true
cd {{dir}} && git fetch --depth=1 origin {{sha}} && git reset --hard {{sha}}
[windows]
clone-submodule dir url sha:
if (-not (Test-Path {{dir}}/.git)) { git init {{dir}} }
cd {{dir}} ; if ((git remote) -notcontains 'origin') { git remote add origin {{url}} } else { git remote set-url origin {{url}} }
cd {{dir}} ; git fetch --depth=1 origin {{sha}} ; git reset --hard {{sha}}
website path:
cargo run -p website -- linter-rules --table {{path}}/src/docs/guide/usage/linter/generated-rules.md --rule-docs {{path}}/src/docs/guide/usage/linter/rules --git-ref $(git rev-parse HEAD)
cargo run -p website -- linter-cli > {{path}}/src/docs/guide/usage/linter/generated-cli.md
cargo run -p website -- linter-schema-markdown > {{path}}/src/docs/guide/usage/linter/generated-config.md