Skip to content

feat(lint): add mise-usage-examples rule — enforce #USAGE example for public tasks (#43)#70

Open
olavostauros wants to merge 1 commit into
KnickKnackLabs:mainfrom
olavostauros:feat/mise-usage-examples
Open

feat(lint): add mise-usage-examples rule — enforce #USAGE example for public tasks (#43)#70
olavostauros wants to merge 1 commit into
KnickKnackLabs:mainfrom
olavostauros:feat/mise-usage-examples

Conversation

@olavostauros

Copy link
Copy Markdown

Summary

Adds a new lint rule mise-usage-examples that flags public .mise/tasks/* files with #USAGE arg/flag directives but no #USAGE example directives. Generalizes the check already done by bats-test-task (which only checks .mise/tasks/test) to all tasks.

Fixes #43.

Detection

  • Scans $target/.mise/tasks/* files
  • Skips tasks with #MISE hide=true
  • Skips tasks with no #USAGE arg / #USAGE flag declarations
  • Requires at least one #USAGE example directive when the task has a user-facing argument or flag surface
  • Supports all standard ignore mechanisms (repo-level mise.toml, inline # codebase:ignore, rule-specific)

Self-hosting

The codebase repo itself had 12 public tasks with args/flags but no examples — all have been fixed in this PR with appropriate #USAGE example directives.

Fixtures (9 scenarios)

Fixture Expectation
clean tasks with examples, passes
dirty tasks missing examples, flagged
hidden #MISE hide=true, skipped
boolean-only boolean flag without example, flagged
no-args no USAGE arg/flag, skipped
ignored-inline inline # codebase:ignore, passes
ignored-repo repo-level ignore, SKIP
no-tasks no .mise/tasks/ dir, OK
empty empty .mise/tasks/ dir, OK
mixed one clean + one dirty task, only dirty flagged

Files changed

File Change
.mise/tasks/lint/mise-usage-examples New lint rule (~90 lines)
test/lint/mise-usage-examples/mise-usage-examples.bats 12 BATS tests
test/lint/mise-usage-examples/fixtures/ 10 fixture directories
.mise/tasks/pre-commit Added 2 #USAGE example directives
.mise/tasks/scan Added 1 #USAGE example directive
.mise/tasks/lint/_default Added 1 #USAGE example directive
.mise/tasks/lint/bats-test-helper Added 1 #USAGE example directive
.mise/tasks/lint/bats-test-task Added 1 #USAGE example directive
.mise/tasks/lint/caller-pwd-contract Added 1 #USAGE example directive
.mise/tasks/lint/github-actions Added 2 #USAGE example directives
.mise/tasks/lint/gum-table Added 1 #USAGE example directive
.mise/tasks/lint/mcr-scope Added 1 #USAGE example directive
.mise/tasks/lint/mise-settings Added 2 #USAGE example directives
.mise/tasks/lint/shellcheck Added 1 #USAGE example directive
.mise/tasks/migrate/task-pattern Added 2 #USAGE example directives
AGENTS.md Added lint rules table

Validation

  • mise run test230/230 tests pass (12 new + 218 existing, zero regressions)
  • codebase lint:mise-usage-examples . — self-hosting passes clean
  • git diff --check — no whitespace errors

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.

Enforce #USAGE examples for public argument-bearing mise tasks

1 participant