Just to say, I am a real person, but I used Claude to generate this issue copy, so it'll look like it's AI generated...because it is 😄
Summary
The linter criterion detects Ruff only when it's configured via a
standalone .ruff.toml / ruff.toml. Projects that configure Ruff
inside pyproject.toml (the recommended layout for most Python
projects) are reported as having no linter. There's some inconsistency as the sibling
formatter check does inspect pyproject.toml for [tool.ruff.
Reproduction
tmp=$(mktemp -d)
cat > "$tmp/pyproject.toml" <<'EOF'
[tool.ruff]
line-length = 100
[tool.ruff.lint]
select = ["E", "F", "W", "I", "UP", "B", "SIM"]
EOF
bun run src/index.ts "$tmp" --ci --no-web | grep -Ei 'linter|formatter'
Result on the same file:
[-] No linter configuration found.
[+] Python formatter configuration found in pyproject.toml
Root cause
Suggested fix
Add the same pyproject.toml inspection to the linter detector, right after the existing .ruff.toml file check:
const pyproject = await readFileContent(repoPath, "pyproject.toml");
if (pyproject && pyproject.includes("[tool.ruff")) {
return {
criterionId: "linter",
pass: true,
message: "Ruff linter configuration found in pyproject.toml",
};
}
Ruff enables check by default whenever [tool.ruff] is present, so matching the prefix (which covers [tool.ruff], [tool.ruff.lint], and lint sub-tables) is consistent with the formatter check's logic.
Just to say, I am a real person, but I used Claude to generate this issue copy, so it'll look like it's AI generated...because it is 😄
Summary
The
lintercriterion detects Ruff only when it's configured via astandalone
.ruff.toml/ruff.toml. Projects that configure Ruffinside
pyproject.toml(the recommended layout for most Pythonprojects) are reported as having no linter. There's some inconsistency as the sibling
formattercheck does inspectpyproject.tomlfor[tool.ruff.Reproduction
Result on the same file:
[-] No linter configuration found.[+] Python formatter configuration found in pyproject.tomlRoot cause
lintercheck:src/pillars/style-linting.tsL20-L46 — checks.ruff.toml/ruff.tomlonly, never readspyproject.toml.formattercheck:src/pillars/style-linting.tsL242-L256 — already readspyproject.tomland matches[tool.ruff.Suggested fix
Add the same
pyproject.tomlinspection to the linter detector, right after the existing.ruff.tomlfile check:Ruff enables
checkby default whenever[tool.ruff]is present, so matching the prefix (which covers[tool.ruff],[tool.ruff.lint], and lint sub-tables) is consistent with the formatter check's logic.