Skip to content

elixir-ci: credo 1.7.12 crashes on Elixir 1.20 regex sigils (Code Quality lane) #94

Description

@toshi0806

問題

共通 reusable workflow elixir-ci.yml@v1Code Quality ジョブ(mix credo --strict)が Elixir 1.20.1 レーンで crash する。regex sigil(~r/.../)を含むプロジェクトで再現し、credo 1.7.12 の tokenizer が Elixir 1.20 の sigil トークン形式に対応していないことが原因。

** (FunctionClauseError) no function clause matching in Credo.Code.Token.position/1
    (credo 1.7.12) lib/credo/code/token.ex:37: Credo.Code.Token.position(
      {:sigil, {193, 15, {193, 57}}, :sigil_r, ["github\\.com[/:]..."], [], nil, "/"})

位置タプルの 3 要素目が整数カラムではなく {193, 57}(タプル)になっており、Elixir 1.20 で sigil トークンが終端位置メタデータを持つ形式に変わったのに credo 1.7.12 の Token.position/1 が対応していない。

  • LTS レーン(Elixir 1.17.3)は正常(credo pass)
  • registry-manager が緑なのは regex sigil を持たないため(偶然回避しているだけ)
  • 初出: smkwlab/ecosystem-manager(latex-ecosystem#123 で分離した新ツール)。lib/ecosystem_manager/github.ex などが ~r/.../ を使う

regex sigil を使う今後の Elixir ツール全般に影響するため、org 共通 CI 側での対処が妥当。

対応候補

  1. credo を Elixir 1.20 sigil に対応した版へ固定/更新する(共通 workflow が credo をインストールする箇所)
  2. あるいは mix credo を LTS レーンのみで実行し、bleeding-edge レーンでは走らせない
  3. どちらを採るか決めて elixir-ci.yml に反映し、@v1 タグを更新

参考

Claude-Session: https://claude.ai/code/session_01Jnvhs3pKABL6vvxj9a5ueb

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions