OCaml: `(flags …)` of an ocamllex stanza or a test fixture's `(env …)` are taken as the project dropping :standard; opam's own-compiler matrix (`ocamlv`) is "1 OCaml version"; `ocaml/setup-ocaml/lint-fmt` is the ecosystem's format check

オープン
#286 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
52/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
github-actions, ocaml, python
領域
ci-cd, tooling

調査の方向性

Start in project_validator/ecosystems/ocaml.py: the dune (flags ...) parsing around lines 203-206 treats ocamllex and test-fixture flags as compiler flags, and the setup-ocaml handling near line 298 needs lint-fmt recognition. The matrix check should read ocamlv-style keys with version-shaped values. Done when the repros in the issue (fx_h, fx_g, the ocamlv matrix, and the lint-fmt@v3 workflow) give the expected PASS results without breaking the existing OCaml tests.

索引モデルが issue の本文から書いたものです。

説明

dune: compiler-warnings/warnings-as-errors FAIL "no OCaml warning settings found" although CI tests in the dev profile; the (flags -ml) that "drops :standard" is an ocamllex lexer stanza and (env (_ (flags -w -33))) sits inside test fixtures. opam: "1 OCaml version (default)" while the matrix variable ocamlv drives 11 compiler versions built by opam itself. lwt: ocaml/setup-ocaml/lint-fmt@v3 runs dune build @fmt and fails on unformatted files → "CI does not run ocamlformat".

Evidence from the corpus audit

ocaml/dune / compiler-warnings, warnings-as-errors
  • kind: FALSE_NEGATIVE
  • actual: FAIL: OCaml: no OCaml warning settings found; enable at least dune's dev profile warning set (or -w +a); OCaml: warnings are not treated as errors in CI configuration and the dune files
  • expected: PASS: CI tests in the dev profile (opam exec -- make test, opam exec -- ./dune.exe test ...); the (flags …) fields that "drop :standard" are an ocamllex stanza's lexer flags ((flags -ml)) and (env (_ (flags -w -33))) inside test fixtures, not compiler flags of the product
  • evidence: src/dune_lang/dune:22-24: (ocamllex\n (modules dune_file_script)\n (flags -ml)); also src/dune_rules/dune:42, otherlibs/dune-rpc/dune:9, src/dune_rules/cram/dune:3 (all (flags -ml) of ocamllex); otherlibs/dune-site/test/plugin_require_thread.t/plugin/dune:1: (env (_ (flags -w -33))); .github/workflows/workflow.yml:293: run: opam exec -- make test; project_validator/ecosystems/ocaml.py:203-206: every (flags …) form of a dune file is read as compiler flags
  • repro: dune with (library (name l))\n(ocamllex (modules lexer) (flags -ml)) + workflow run: ./_boot/dune.exe runtest → compiler-warnings FAIL (reproduced in audit/scratch/fx_h; without the ocamllex stanza, fx_g, it passes)
  • confidence: high
ocaml/opam / platform-matrix
  • kind: FALSE_NEGATIVE
  • actual: FAIL: OCaml: CI covers 3 OS(es) (linux, macos, windows), 1 OCaml version(s) (default), 3 combination(s); expected at least 2 OCaml versions (found 1); map names the jobs Build-Linux (4.11.2) ... Build-Linux (5.5.0) yet gives them toolchain OCaml default
  • expected: 11 OCaml versions on Linux and 2 on Windows: the matrix variable ocamlv is the compiler version (opam builds its own compilers, .github/scripts/main/ocaml-cache.sh ${{ matrix.ocamlv }}); the profile knows only setup-ocaml's ocaml-compiler, ocaml/opam: images and opam switch create
  • evidence: .github/workflows/main.yml:114: ocamlv: [ 4.11.2, 4.12.1, 4.13.1, 5.0.0, 5.1.1, 5.2.1, 5.3.0, 5.4.1, trunk, 4.14.4, 5.5.0 ]; :142: run: bash -exu .github/scripts/main/ocaml-cache.sh ${{ runner.os }} ${{ matrix.ocamlv }}; docs/ecosystems/ocaml.md "platform-matrix" lists only setup-ocaml, the docker image and opam switch create
  • repro: matrix ocamlv: [4.14.4, 5.5.0] with a run: passing ${{ matrix.ocamlv }} to a script → "1 OCaml version (default)"
  • confidence: medium (a matrix key named ocaml*/ocamlv with version-shaped values is strong evidence; recognising it is a heuristic)
ocsigen/lwt / code-formatting
  • kind: FALSE_NEGATIVE
  • actual: FAIL component: OCaml: .ocamlformat is defined but CI does not run ocamlformat
  • expected: PASS: ocaml/setup-ocaml/lint-fmt@v3 is the standard OCaml-ecosystem formatting check (it runs dune build @fmt, failing on unformatted files); its sibling lint-opam runs opam-dune-lint
  • evidence: .github/workflows/lint.yml:25-34: lint-fmt:\n ... - uses: ocaml/setup-ocaml@v3\n with:\n ocaml-compiler: 5\n - uses: ocaml/setup-ocaml/lint-fmt@v3; .ocamlformat at the root; project_validator/ecosystems/ocaml.py mentions setup-ocaml only for ocaml-compiler (line 298)
  • repro: .ocamlformat + workflow step uses: ocaml/setup-ocaml/lint-fmt@v3 → "CI does not run ocamlformat"
  • 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分
マージ済み PR(30日)
79

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

cpp-best-practices/project_validator のほかの issue

cpp-best-practices/project_validator の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。