Universal polyglot linting capabilities for Python, JavaScript/TypeScript, Markdown, Shell, Ruby, YAML, and JSON files. Use when you need to lint files programmatically, understand tool selection logic, or invoke linting from commands/agents.
/plugin marketplace add racurry/neat-little-package/plugin install mr-sparkle@neat-little-packageThis skill inherits all available tools. When active, it can use any tool Claude has access to.
scripts/lint.pyThis skill provides universal polyglot linting through a CLI script that detects file types, finds project configuration, and runs appropriate linters.
| Language | Tool Groups (priority order) | Config Detection |
|---|---|---|
| Python | ruff OR pylint+isort+black | pyproject.toml, ruff.toml, setup.cfg |
| JavaScript/TypeScript | biome OR eslint+prettier | biome.json, eslint.config.*, package.json |
| Markdown | markdownlint-cli2 | .markdownlint-cli2.*, ~/.markdownlint-cli2.jsonc |
| Shell | shfmt+shellcheck | .editorconfig, .shellcheckrc |
| Ruby | standard OR rubocop | .standard.yml, .rubocop.yml, Gemfile |
| YAML | prettier | .prettierrc*, ~/.prettierrc.json5 |
| JSON/JSON5/JSONC | prettier | .prettierrc*, ~/.prettierrc.json5 |
The script uses group-based priority selection:
[ruff] vs [pylint, isort, black])Example for Python:
pyproject.toml has [tool.ruff] → runs ruff check --fix then ruff formatsetup.cfg has [isort] section → runs pylint, isort, blackruff (first group default)The universal linting script is at scripts/lint.py.
# Lint a file (auto-detects type, applies fixes)
./scripts/lint.py /path/to/file.py
# JSON output for programmatic use
./scripts/lint.py /path/to/file.py --format json
# Text output (default, human-readable)
./scripts/lint.py /path/to/file.py --format text
--format text (default):
✓ ruff file.py: OK
or
⚠ ruff file.py: Lint errors!
<detailed output>
--format json:
{
"file": "/path/to/file.py",
"toolset": "python",
"tools_run": ["ruff"],
"status": "ok",
"results": [
{"tool": "ruff", "status": "ok", "output": ""}
]
}
0: Success (file clean or fixed)1: Lint errors found (non-blocking)2: Tool execution errorThe script finds project root by walking up from the file looking for:
package.jsonpyproject.tomlGemfile.git directoryConfig detection happens relative to project root.
| Tool | Config Files | pyproject.toml | INI Files |
|---|---|---|---|
| ruff | ruff.toml, .ruff.toml | [tool.ruff] | - |
| black | - | [tool.black] | - |
| isort | .isort.cfg | [tool.isort] | setup.cfg [isort] |
| pylint | .pylintrc, pylintrc | [tool.pylint] | setup.cfg [pylint] |
| Tool | Config Files | package.json |
|---|---|---|
| biome | biome.json, biome.jsonc | @biomejs/biome in deps |
| eslint | eslint.config.*, .eslintrc.* | eslint in deps |
| prettier | .prettierrc*, prettier.config.* | prettier in deps |
| Tool | Config Files | Global Fallback |
|---|---|---|
| markdownlint-cli2 | .markdownlint-cli2.* | ~/.markdownlint-cli2.jsonc |
If no config found, uses skill's ../markdown-quality/default-config.jsonc.
| Tool | Config Files |
|---|---|
| shfmt | .editorconfig |
| shellcheck | .shellcheckrc |
| Tool | Config Files | Gemfile |
|---|---|---|
| standard | .standard.yml | gem "standard" or gem "standardrb" |
| rubocop | .rubocop.yml, .rubocop_todo.yml | gem "rubocop" |
Tool selection:
standardrb --fixrubocop -a (safe auto-correct only)| Tool | Config Files | Global Fallback |
|---|---|---|
| prettier | .prettierrc*, prettier.config.* | ~/.prettierrc.json5 |
If no config found, uses skill's ../prettier-quality/default-config.json5.
Supported extensions:
.yaml, .yml.json, .json5, .jsoncRun the linting script:
`${MR_SPARKLE_ROOT}/skills/linting/scripts/lint.py <file_path>`
For linting results, run:
`<plugin_root>/skills/linting/scripts/lint.py <file> --format json`
Parse the JSON output to understand lint status.
The script supports --stdin-hook mode for hook integration:
# Reads hook JSON from stdin, outputs hook-compatible JSON
echo '{"tool_input":{"file_path":"/path/to/file.py"}}' | ./lint.py --stdin-hook
The script silently exits (code 0, no output) when:
markdown-quality - Interpretive guidance for markdownlint rulesprettier-quality - Interpretive guidance for Prettier (YAML, JSON, JS/TS)python-quality - Default ruff configurationjs-quality - Default biome configuration