Overview
The project uses multiple linters to maintain code quality:- Ruff - Python linting and formatting
- ESLint - JavaScript linting
- Stylelint - SCSS linting
Python: Ruff
Run Linting
- Code linting:
ruff check . - Format checking:
ruff format --check .
Check Code Only
Check Formatting
Auto-Fix Issues
Auto-Format Code
Ruff Configuration
Configuration is defined inruff.toml:
Enabled Rules
- E, W - pycodestyle errors and warnings
- F - pyflakes
- I - isort (import sorting)
- B - flake8-bugbear
- C90 - mccabe cyclomatic complexity
- G - flake8-logging-format
- T20 - flake8-print (no print statements)
- UP - pyupgrade (modern Python syntax)
- C4 - flake8-comprehensions
- ISC - flake8-implicit-str-concat
- RSE - flake8-raise
- PIE - flake8-pie
- N804 - class method naming
- RUF100 - unused noqa directives
JavaScript: ESLint
Run ESLint
Configuration
ESLint is configured ineslint.config.mjs to lint JavaScript modules in app/assets/**/*.mjs.
Key rules:
- Semicolons required
- Warnings for unused variables and undefined variables
- Based on ESLint recommended configuration
SCSS: Stylelint
Run Stylelint
Configuration
Stylelint is configured instylelint.config.mjs:
stylelint-config-standard-scss- Standard SCSS rulesstylelint-config-gds/scss- GOV.UK Design System SCSS rules
CI Integration
Linting is automatically run:- Before tests via
make test - In CI/CD pipelines
- Should be run before committing code
Pre-commit Workflow
Recommended workflow before committing:NPM Audit
Check for security vulnerabilities in npm packages:better-npm-audit to check production dependencies for high-severity issues.