ruling
Run ruling integration tests and update expected results for SonarJS rules. Use when running ruling tests or syncing expected ruling output.
SKILL.md
Full skill instructions
Overview
Ruling tests analyze large third-party codebases (JS/TS and CSS) and compare issues against expected output. Run them when adding or modifying rules to verify real-world behavior.
Warning: Running ruling tests removes
node_modulesfrom the project root. Runnpm ciafterward.
Running Ruling
# Prerequisites: init submodules, install dependencies, build JS/TS, then rebuild the jar
git submodule update --init --recursive
npm install
npm run bbf
mvn install -DskipTests
# Run ruling (JS/TS and CSS)
npm run ruling
# Sync actual → expected (after reviewing output)
npm run ruling-sync
# Debug differences
sh tools/ruling-debug-script.sh
Results:
- Actual:
packages/ruling/actual/ - Expected:
its/ruling/src/test/expected/
Java Ruling (Old Way)
cd its/ruling
mvn verify -Dtest=RulingTest -Dmaven.test.redirectTestOutputToFile=false
Copy actual to expected:
cp -R target/actual/ src/test/expected/
Review diff:
diff -rq src/test/expected target/actual
Custom Source Files for New Rules
If a new rule raises no issues on existing sources, add test code:
its/sources/custom/jsts/S1234.js— regular codeits/sources/custom/jsts/tests/S1234.js— test code
Copy from RSPEC HTML description (compliant/non-compliant examples).
Debugging with Node Process
To debug the Node.js bridge during ruling:
- Start your Node.js process manually
- Set
SONARJS_EXISTING_NODE_PROCESS_PORT=<port> - Remove
@Execution(ExecutionMode.CONCURRENT)from the ruling test class (for serial execution)
Submodule Setup
If submodules aren't checked out:
git submodule init
git submodule update
