Prettier Config Validator
Validate .prettierrc config files for correctness, deprecated options, conflicting overrides, and best practices. Supports JSON, YAML, TOML, and package.json#prettier field. JS configs are detected but not statically validated.
Commands
# Full lint (all rules)
python3 scripts/prettierrc_validator.py lint .prettierrc.json
# Check enum values, ranges, type conflicts only
python3 scripts/prettierrc_validator.py options .prettierrc.json
# Check deprecated/removed options only
python3 scripts/prettierrc_validator.py deprecated .prettierrc.json
# Validate 'overrides' array only
python3 scripts/prettierrc_validator.py overrides .prettierrc.json
# Validate structure/syntax only
python3 scripts/prettierrc_validator.py validate .prettierrc.json
# JSON output (for CI / tooling)
python3 scripts/prettierrc_validator.py lint .prettierrc.json --format json
# Summary line only
python3 scripts/prettierrc_validator.py lint .prettierrc.json --format summary
Supported files
.prettierrc(JSON or YAML auto-detected).prettierrc.json/.prettierrc.json5.prettierrc.yaml/.prettierrc.yml.prettierrc.tomlpackage.json— validates the"prettier"field.prettierrc.js/prettier.config.js— detected but not validated statically
Rules (22)
Structure (5)
- Invalid JSON / YAML / TOML syntax
- Unknown top-level options
- Wrong type for option (boolean, int, string, array expected)
- Empty config file
package.jsonwith missing or invalidprettierfield
Options (7)
- Invalid enum value (quoteProps, trailingComma, arrowParens, proseWrap, htmlWhitespaceSensitivity, endOfLine, embeddedLanguageFormatting)
printWidthout of reasonable range (< 20 or > 320)tabWidthinvalid (0 or negative, > 16 warning)parsername not a known built-in parserrequirePragma+insertPragmaboth true (conflict)rangeStart>rangeEnd(inverted range)- Unknown parser name (plugin-assumed)
Deprecated (2)
jsxBracketSameLine→ usebracketSameLine(Prettier 2.4+)- Removed options (
useFlowParser,tabs) with replacement guidance
Overrides (5)
- Override missing
filesfield filesempty array or wrong type- Override missing
options(no effect) - Unknown option inside override
- Duplicate glob pattern across overrides (precedence bug)
Best Practices (3)
- Missing
endOfLinesetting (cross-platform advice) - Missing
trailingComma(default changed in Prettier v3) printWidthvery short (< 40) — may cause awkward line breaksuseTabs: truewithout explicittabWidth- Invalid / empty plugin entries
Output Formats
- text (default): human-readable with severity icons
- json: machine-readable list of issues (file, path, rule, severity, message, category)
- summary: single line of counts
Exit Codes
- 0: No errors (warnings/info allowed)
- 1: Errors found
- 2: Invalid input (file not found, unparseable, unsupported format)
Requirements
- Python 3.8+
- Optional:
PyYAML(better YAML parsing — falls back to a minimal parser for simple configs) - Optional:
tomli(only for Python 3.10 and below; Python 3.11+ hastomllibbuilt in)
Examples
Broken config
{ "printWidth": "100", "trailingComma": "some", "jsxBracketSameLine": true }
✗ ERROR wrong-type [printWidth] must be an integer
✗ ERROR invalid-enum-value [trailingComma] invalid value 'some' (valid: all, es5, none)
⚠ WARNING deprecated-option [jsxBracketSameLine] use 'bracketSameLine'
Good CI gate
python3 scripts/prettierrc_validator.py lint .prettierrc.json --format summary
# exit 1 on any error — fails the CI step