Skip to content

feat: support managed linter configs and aqua-backed tool keys#228

Merged
zeitlinger merged 30 commits intomainfrom
codex/config-dir-managed-linters
Apr 25, 2026
Merged

feat: support managed linter configs and aqua-backed tool keys#228
zeitlinger merged 30 commits intomainfrom
codex/config-dir-managed-linters

Conversation

@zeitlinger
Copy link
Copy Markdown
Member

@zeitlinger zeitlinger commented Apr 24, 2026

Summary

  • add config-dir-managed support for more linter configs, including taplo, cargo-fmt, actionlint, hadolint, codespell, editorconfig-checker, golangci-lint, ruff, rumdl, yaml-lint, and shellcheck
  • keep Biome opinionated around root biome.jsonc, reject legacy biome.json, and tighten rollout guards around unsupported repo-local configs and legacy tool keys
  • prefer aqua-backed mise keys where available, including taplo, ruff, and ktlint, plus aqua:owenlamont/ryl for yaml-lint
  • temporarily pin shellcheck back to github:koalaman/shellcheck until the Windows aqua fix lands in aquaproj/aqua-registry#52699
  • generate rumdl config with aligned Markdown table formatting by default
  • fold in follow-up polish for v2 agent guidance and make flint run --fix outcomes explicit

Notes

  • ruff-format now resolves through the ruff install key instead of pretending to be a separate installable tool
  • xmllint stays on github:jonwiggins/xmloxide for now and google-java-format stays on github:google/google-java-format
  • folded in the docs and --fix follow-up from fix: model --fix outcomes explicitly #222

Verification

  • mise exec -- cargo test -q
  • mise run lint:fix

@zeitlinger zeitlinger changed the title feat: support config-dir-managed linter configs feat: support managed linter configs and config rollout guards Apr 24, 2026
@zeitlinger zeitlinger marked this pull request as ready for review April 24, 2026 17:02
@zeitlinger zeitlinger requested a review from a team as a code owner April 24, 2026 17:02
Copilot AI review requested due to automatic review settings April 24, 2026 17:02
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds managed linter config support via FLINT_CONFIG_DIR (including new Taplo and cargo-fmt handling), strengthens “unsupported config” rollout guardrails, and formalizes Biome as a root-config exception (biome.jsonc only).

Changes:

  • Introduce LinterConfig (file vs “dir-if-any”) and support {CONFIG_ARGS} templating for command construction.
  • Expand registry metadata: baseline trigger becomes singular (baseline_config), add new unsupported-config fixtures, and broaden managed-config coverage across multiple linters.
  • Update flint init to generate Taplo + rustfmt managed configs and migrate Biome biome.jsonbiome.jsonc, with corresponding docs updates.

Reviewed changes

Copilot reviewed 63 out of 66 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
tests/e2e.rs Updates fake Biome script to understand --config-path and validate expected config presence.
tests/cases/ruff/clean/test.toml Runs Ruff case with FLINT_CONFIG_DIR set.
tests/cases/ruff/clean/files/main.py Adjusts fixture to rely on managed Ruff config (ignore unused import).
tests/cases/ruff/clean/files/.github/config/ruff.toml Adds managed Ruff config file under config dir.
tests/cases/hadolint/clean/test.toml Runs hadolint case with FLINT_CONFIG_DIR set.
tests/cases/hadolint/clean/files/Dockerfile Adjusts fixture to rely on managed hadolint config ignores.
tests/cases/hadolint/clean/files/.github/config/.hadolint.yaml Adds managed hadolint config under config dir.
tests/cases/golangci-lint/clean/test.toml Runs golangci-lint case with FLINT_CONFIG_DIR set.
tests/cases/golangci-lint/clean/files/main.go Adjusts fixture to rely on managed golangci-lint config disables.
tests/cases/golangci-lint/clean/files/.github/config/.golangci.yml Adds managed golangci-lint config under config dir.
tests/cases/general/unsupported-taplo-config/test.toml New fixture asserting Taplo rejects unsupported config locations.
tests/cases/general/unsupported-taplo-config/files/taplo.toml Adds unsupported Taplo config in project root.
tests/cases/general/unsupported-taplo-config/files/mise.toml Declares Taplo tool for the unsupported-config fixture.
tests/cases/general/unsupported-rustfmt-config/test.toml New fixture asserting cargo-fmt rejects unsupported rustfmt configs.
tests/cases/general/unsupported-rustfmt-config/files/rustfmt.toml Adds unsupported rustfmt config in project root.
tests/cases/general/unsupported-rustfmt-config/files/mise.toml Declares rust tool + rustfmt component for the fixture.
tests/cases/general/unsupported-ruff-config/test.toml New fixture asserting Ruff rejects .ruff.toml.
tests/cases/general/unsupported-ruff-config/files/mise.toml Declares Ruff tool for the fixture.
tests/cases/general/unsupported-ruff-config/files/.ruff.toml Adds unsupported Ruff config file.
tests/cases/general/unsupported-hadolint-config/test.toml New fixture asserting hadolint rejects .hadolint.yml.
tests/cases/general/unsupported-hadolint-config/files/mise.toml Declares hadolint tool for the fixture.
tests/cases/general/unsupported-hadolint-config/files/.hadolint.yml Adds unsupported hadolint config file.
tests/cases/general/unsupported-golangci-lint-config/test.toml New fixture asserting golangci-lint rejects .golangci.yaml.
tests/cases/general/unsupported-golangci-lint-config/files/mise.toml Declares golangci-lint tool for the fixture.
tests/cases/general/unsupported-golangci-lint-config/files/.golangci.yaml Adds unsupported golangci-lint config file.
tests/cases/general/unsupported-editorconfig-checker-config/test.toml New fixture asserting editorconfig-checker rejects .ecrc.
tests/cases/general/unsupported-editorconfig-checker-config/files/mise.toml Declares editorconfig-checker tool for the fixture.
tests/cases/general/unsupported-editorconfig-checker-config/files/.ecrc Adds unsupported editorconfig-checker config file.
tests/cases/general/unsupported-codespell-config/test.toml New fixture asserting codespell rejects setup.cfg config.
tests/cases/general/unsupported-codespell-config/files/setup.cfg Adds unsupported codespell config via setup.cfg.
tests/cases/general/unsupported-codespell-config/files/mise.toml Declares codespell tool for the fixture.
tests/cases/general/unsupported-biome-config/test.toml New fixture asserting Biome rejects biome.json.
tests/cases/general/unsupported-biome-config/files/mise.toml Declares biome tool for the fixture.
tests/cases/general/unsupported-biome-config/files/biome.json Adds unsupported legacy Biome config name.
tests/cases/general/unsupported-actionlint-config/test.toml New fixture asserting actionlint rejects legacy config location.
tests/cases/general/unsupported-actionlint-config/files/mise.toml Declares actionlint tool for the fixture.
tests/cases/general/unsupported-actionlint-config/files/.github/actionlint.yml Adds unsupported legacy actionlint config location.
tests/cases/general/init-rust/test.toml Updates init output expectations (rustfmt + biome.jsonc).
tests/cases/general/init-idempotent/files/biome.jsonc Adds idempotent-case Biome root JSONC config.
tests/cases/general/init-idempotent/files/.github/config/rustfmt.toml Adds idempotent-case managed rustfmt config.
tests/cases/general/init-idempotent/files/.github/config/.taplo.toml Adds idempotent-case managed Taplo config.
tests/cases/editorconfig-checker/clean/test.toml Runs editorconfig-checker case with FLINT_CONFIG_DIR set.
tests/cases/editorconfig-checker/clean/files/hello.txt Fixture change for editorconfig-checker behavior under managed config.
tests/cases/editorconfig-checker/clean/files/.github/config/.editorconfig-checker.json Adds managed editorconfig-checker config under config dir.
tests/cases/codespell/clean/test.toml Runs codespell case with FLINT_CONFIG_DIR set.
tests/cases/codespell/clean/files/README.md Fixture change for codespell ignore-words behavior.
tests/cases/codespell/clean/files/.github/config/.codespellrc Adds managed codespell config under config dir.
tests/cases/actionlint/clean/test.toml Runs actionlint case with FLINT_CONFIG_DIR set.
tests/cases/actionlint/clean/files/.github/workflows/ci.yml Fixture change for actionlint self-hosted runner labels.
tests/cases/actionlint/clean/files/.github/config/actionlint.yml Adds managed actionlint config under config dir.
src/runner.rs Adds {CONFIG_ARGS} support, introduces LinterConfig-aware resolution, and tests for new behavior.
src/registry/types.rs Introduces LinterConfig enum and makes baseline trigger singular (baseline_config).
src/registry/tests.rs Extends unsupported-key detection tests and updates registry docs table generation for LinterConfig.
src/registry/obsolete.rs Adds legacy npm:markdownlint-cli to unsupported tool keys.
src/registry/mod.rs Re-exports LinterConfig.
src/registry/checks.rs Adds Taplo and cargo-fmt managed config handling, Biome root-config baseline, and new unsupported-config definitions.
src/main.rs Updates unsupported-config error messaging, baseline detection logic, and JSON output to account for new config metadata.
src/init/mod.rs Generates Taplo + rustfmt configs during init when relevant checks are selected.
src/init/config_files.rs Implements config generation for Taplo and rustfmt; migrates Biome biome.jsonbiome.jsonc.
docs/linters.md Documents Biome root-config exception and adds config rows for cargo-fmt and Taplo.
docs/cli.md Clarifies flint run config behavior and notes Biome exception.
biome.jsonc Adds root Biome config to the repo.
README.md Updates config-dir documentation (including Biome exception) and reflows formatting.
AGENTS-V2.md Adds guidance to treat root biome.jsonc as the only supported Biome config.
.markdownlint.json Removes legacy markdownlint config file.
.github/agents/knowledge/linters.md Updates guidance to treat Biome as a root-discovery exception rather than config-dir injected.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/main.rs Outdated
Comment thread src/main.rs Outdated
Comment thread src/init/config_files.rs Outdated
@zeitlinger zeitlinger changed the title feat: support managed linter configs and config rollout guards feat: support managed linter configs and aqua-backed tool keys Apr 25, 2026
@zeitlinger zeitlinger force-pushed the codex/config-dir-managed-linters branch from 8bd54e4 to aa17b0f Compare April 25, 2026 12:22
Signed-off-by: Gregor Zeitlinger <[email protected]>
Signed-off-by: Gregor Zeitlinger <[email protected]>
Signed-off-by: Gregor Zeitlinger <[email protected]>
Signed-off-by: Gregor Zeitlinger <[email protected]>
Signed-off-by: Gregor Zeitlinger <[email protected]>
Signed-off-by: Gregor Zeitlinger <[email protected]>
Signed-off-by: Gregor Zeitlinger <[email protected]>
Signed-off-by: Gregor Zeitlinger <[email protected]>
Signed-off-by: Gregor Zeitlinger <[email protected]>
@zeitlinger zeitlinger force-pushed the codex/config-dir-managed-linters branch from 6a262fb to dcee158 Compare April 25, 2026 12:35
Comment thread .github/workflows/lint.yml Outdated
Comment thread README.md Outdated
Comment thread README.md Outdated
Comment thread docs/cli.md
Comment thread docs/linters.md Outdated
@zeitlinger zeitlinger enabled auto-merge (squash) April 25, 2026 18:30
@zeitlinger zeitlinger merged commit 38d14ba into main Apr 25, 2026
13 checks passed
@zeitlinger zeitlinger deleted the codex/config-dir-managed-linters branch April 25, 2026 18:34
This was referenced Apr 25, 2026
zeitlinger added a commit that referenced this pull request Apr 27, 2026
### Added

- add flint setup preflight migrations
([#233](#233))
- support managed linter configs and aqua-backed tool keys
([#228](#228))
- switch xmloxide to github backend
([#229](#229))
- add taplo formatter check
([#224](#224))
- *(init)* configure line length during init
([#218](#218))

### Fixed

- support renovate v43.136.3
([#223](#223))
- switch yaml-lint to ryl
([#226](#226))
- *(ruff)* install via github releases
([#227](#227))
- resolve init rollout regressions
([#220](#220))

### Other

- reduce fake-bin fixture coverage
([#240](#240))
- *(deps)* update dependency npm:renovate to v43.141.1
([#221](#221))
- guard fixture case groups
([#238](#238))
- *(deps)* update dependency grafana/flint to v0.20.4
([#235](#235))
- *(deps)* lock file maintenance
([#237](#237))
- *(deps)* update dependency mise to v2026.4.19
([#236](#236))
- *(deps)* update rust crate json5 to v1
([#232](#232))
- *(deps)* update taiki-e/install-action digest to 787505c
([#219](#219))
- *(deps)* update dependency grafana/flint to v0.20.3
([#225](#225))

> [!IMPORTANT]
> Close and reopen this PR to trigger CI checks.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Gregor Zeitlinger <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants