compiler-warnings wording: "-W error" when the setting is pytest filterwarnings, "no Perl pragmas found" when 112 of 116 modules have them, "no JavaScript linters found" when static-analysis credits oxlint/eslint in the same run

未关闭
#248 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
45/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
活跃
领域
devtools

调研方向

Start with the Perl check in project_validator/ecosystems/perl.py (lines 124-149), where _every_module ignores test-fixture roles and _IMPLIES_BOTH is incomplete, then compare the Python wording in ecosystems/python/__init__.py around lines 322-326. Reproduce the Perl case with a lib/Foo.pm plus t/lib/Fixture.pm fixture and check whether the FAIL names the offending modules. Done when the pytest filterwarnings message names the actual setting and the linter messages agree with static-analysis output for oxlint, eslint and staticcheck.

由索引模型根据 Issue 内容生成。

描述

httpx/flask/black/pytest/fastapi/pydantic are told "strict Python warning settings are enabled: -W error" for filterwarnings = ["error"] (none passes -W error), and the sentence opens a FAIL; the four Perl projects FAIL "no Perl pragmas and lints found" because 1–4 test fixtures or bundled inc/ modules lack use strict while every product module has it (name the modules); vite FAILs "no JavaScript linters found; enable at least eslint" while static-analysis credits oxlint; graphql-eslint "no JavaScript linters found" while eslint is configured and scripted; toml-test "Go: no static analyzer runs" though staticcheck is seen.

Evidence from the corpus audit

toml-lang/toml-test / static-analysis
  • kind: MESSAGE
  • actual: FAIL: Go: no static analyzer runs
  • expected: a message that acknowledges staticcheck runs (the validator does see it: compiler-warnings says only
    go vet is missing) and that the check wants golangci-lint's extra linters; "no static analyzer runs" is false.
  • evidence: .github/workflows/test.yml:9: - uses: 'dominikh/staticcheck-action@v1'; validator
    project_validator/ecosystems/go.py:335-343: static-analysis asks only for golangci-lint run.
  • repro: workflow with uses: dominikh/staticcheck-action@v1.
  • confidence: medium
dimaMachina/graphql-eslint / compiler-warnings
  • kind: MESSAGE
  • actual: FAIL: no JavaScript linters found; enable at least eslint
  • expected: a message consistent with static-analysis in the same run: eslint is configured (.eslintrc.cjs, ...) but does not run (eslint is found: configured and scripted; what is unknown is whether the reusable workflow runs it).
  • evidence: .eslintrc.cjs:1-3: module.exports = { / ignorePatterns: [...], / extends: ['@theguild', ...; package.json:15,18: "ci:lint": "pnpm lint --output-file eslint_report.json --format json", / "lint": "ESLINT_USE_FLAT_CONFIG=false eslint --ignore-path .gitignore --cache .",; .github/workflows/test.yml:12-14: uses: the-guild-org/shared-config/.github/workflows/lint.yml@main / with: / script: pnpm ci:lint
  • evidence (validator): the strict .txt correctly says ERROR whether the strict JavaScript linters are enabled is unknown; with --allow-unknown the FAIL says "no ... linters found" although static-analysis in the same run says eslint is configured (.eslintrc.cjs, ...) but does not run.
  • repro: .eslintrc.cjs + package.json lint script + a workflow whose only job uses: an external reusable workflow; run with --allow-unknown.
  • confidence: medium
vitejs/vite / compiler-warnings
  • kind: FALSE_NEGATIVE
  • actual: FAIL: JavaScript/TypeScript: no JavaScript linters found; enable at least eslint while static-analysis in the same run says JavaScript/TypeScript: oxlint runs
  • expected: PASS: oxlint runs in CI (pnpm lint) and is a JavaScript linter the validator knows.
  • evidence: package.json:24: "lint": "oxlint ."; CI Lint: node-26, ubuntu-latest job runs it; validator ecosystems/javascript/analysis.py:50-53
    declares name="oxlint" for static analysis, but the compiler-warnings linter set (docs: "eslint, biome lint / biome ci, or deno lint") omits oxlint.
  • repro: package.json {"scripts":{"lint":"oxlint ."}}, .oxlintrc.json, step run: pnpm lint.
  • confidence: medium (the two checks contradict each other; which is intended is a policy question)
mojolicious/mojo, Perl-Critic/Perl-Critic, houseabsolute/perl-code-tidyall, rjbs/Dist-Zilla / compiler-warnings
  • kind: FALSE_NEGATIVE
  • actual: FAIL: Perl: no Perl pragmas and lints found; enable at least use strict and use warnings in every module
    (Perl-Critic: missing Perl pragmas and lints: use strict and use warnings in every module)
  • expected: PASS (or FAIL naming the files): every product module passes; the only modules without use strict are
    test fixtures and bundled code: mojo 4 files under t/ (all 112 lib/**/*.pm pass), Perl-Critic
    inc/Devel/AssertOS.pm (bundled third-party inc/) and t/06_violation.d/source/Line.pm (not even Perl),
    tidyall 18 t/lib/TestFor/**/*.pm which use Test::Class::Most (it turns strict and warnings on), Dist-Zilla
    corpus/dist/** fixtures plus lib/ modules that use an in-repo pragma bundle.
  • evidence: mojo t/mojolicious/lib/MojoliciousTest/PODTest.pm:1-3: package MojoliciousTest::PODTest; / `` / 1;;
    mojo `t/mojolicious/lib/MojoliciousTest/Controller/Foo/Bar.pm:2`: `use Mojolicious::Controller -base;`;
    Perl-Critic `t/06_violation.d/source/Line.pm:1-2`: `foo` / `#line 57 Thingy.pm`; tidyall
    `t/lib/TestFor/Code/TidyAll/Basic.pm:13`: `use Test::Class::Most parent => 'TestHelper::Test::Class';`; Dist-Zilla
    `lib/Dist/Zilla/App.pm:4`: `use Dist::Zilla::Pragmas;` and `lib/Dist/Zilla/Pragmas.pm:12-13`: `strict->import;` /
    `warnings->import;`; validator `project_validator/facts/roles.py:27` `_ROLES` test directories are `("test",
    "tests", "testing", "testdata", "spec", "specs", "tests", "fixtures")` (no `t`, `xt`, `inc`, `corpus`);
    `project_validator/ecosystems/perl.py:144-149` `_every_module` judges every `Setting` of tool "Perl modules" with no
    role filter and `project_validator/ecosystems/perl.py:124-127` `_IMPLIES_BOTH` lacks `Test::Class::Most`,
    `Test::Class::Moose`, `Test::Most`.
  • repro: lib/Foo.pm with strict+warnings, t/lib/Fixture.pm with package Fixture; 1; → FAIL "no Perl pragmas and
    lints found" (reproduced in repro-perl).
  • confidence: high (fixtures); medium (in-repo pragma bundle, which needs following use to a module in lib/)
mojolicious/mojo, Perl-Critic/Perl-Critic, houseabsolute/perl-code-tidyall, rjbs/Dist-Zilla / compiler-warnings
  • kind: MESSAGE
  • actual: FAIL: Perl: no Perl pragmas and lints found; enable at least use strict and use warnings in every module, perlcritic
  • expected: FAIL naming the module(s) that lack the pragmas ("3 of 116 modules lack use strict: t/...") — the
    all-or-nothing requirement gives the user nothing to act on, and "no ... found" is false when 112 of 116 modules
    have them.
  • evidence: project_validator/ecosystems/perl.py:144-149: if paths and all(setting.value for setting in found): yield Evidence(f"{len(paths)} module(s), every one") — evidence only on success; the facts carry the failing paths
    (--facts: {"origin": "t/mojolicious/lib/MojoliciousTest/PODTest.pm:strict", "value": false}).
  • repro: as above.
  • confidence: high
all projects with pytest `filterwarnings = ["error"] / compiler-warnings
  • kind: MESSAGE
  • actual: "strict Python warning settings are enabled: -W error" (httpx, flask, black, pytest, fastapi, pydantic);
    in httpx/fastapi/pydantic this sentence sits inside a FAIL whose failure belongs to Shell/JavaScript.
  • expected: name what was found (filterwarnings = ["error"] in [tool.pytest.ini_options]), since none of these
    passes -W error; and a FAIL message should not open with "strict ... are enabled".
  • evidence: encode__httpx/pyproject.toml:119: filterwarnings = [ (next line "error",);
    pallets__flask/pyproject.toml:108; psf__black/pyproject.toml:217: filterwarnings = ["error"];
    fastapi__fastapi/pyproject.toml:253; pydantic__pydantic/pyproject.toml:188. Validator:
    ecosystems/python/__init__.py:322-326 one pattern named "-W error" covers -W error, PYTHONWARNINGS and
    filterwarnings.
  • repro: pyproject with filterwarnings = ["error"] only.
  • confidence: high

Found by the regression-corpus audit (235 real repositories, one or more per ecosystem profile; corpus and expected results in corpus/). Evidence is quoted from the audited checkouts at the commits pinned in corpus/projects.toml; <checkouts>/<owner>__<repo> is such a checkout.

🤖 Generated with Claude Code

https://claude.ai/code/session_01ByTXNqDWdM7HzezrFtEvQt

主要语言
Python
星标
4
派生
1
平均合并
10 小时 41 分钟
30 天内合并 PR
79

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

cpp-best-practices/project_validator 的其他 Issue

查看 cpp-best-practices/project_validator 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。