Skip to content

Conversation

@mikelolasagasti
Copy link
Collaborator

@mikelolasagasti mikelolasagasti commented Oct 15, 2025

Refactors the command-line interface to use the spf13/cobra library, replacing the legacy docopt implementation.

Major Changes:

  • Replaced docopt-based argument parsing with Cobra commands and flags:
    • Added --config, --format, and --debug as proper Cobra flags.
    • Added a list-rules subcommand.
  • Removed os.Exit calls from logic functions; errors now propagate via RunE, allowing Cobra to handle exit codes.
  • Improved config file handling with explicit error reporting and cross-platform path safety using filepath.Join.

Testing improvements:

  • Rewrote main tests to use Cobra commands directly.
  • Added captureOutput() helper to test CLI output.
  • New tests for:
    • Successful run with a simple Makefile.
    • Failing run with known rule violations.
    • Listing of registered rules (regex-based table validation).
    • Custom formatter flag (--format).

CLI behavior and output changes:

  • Output Streams: Prints violation data to stdout and a final summary error to stderr, improving scriptability.
  • Exit Code: Exits with a standard code of 1 on failure, instead of the previous behavior of exiting with the violation count.

Checklist

Not all of these might apply to your change but the more you are able to check
the easier it will be to get your contribution merged.

  • CI passes
  • Description of proposed change
  • Documentation (README, docs/, man pages) is updated
  • Existing issue is referenced if there is one
  • Unit tests for the proposed change

Copy link
Collaborator

@obnoxxx obnoxxx left a comment

Choose a reason for hiding this comment

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

Nice change, thank you!

Only thing I noticed:

$ ./checkmake --config=test.ini list-rules
Error: unknown flag: --config

$

Apart from this, it is fine.
And this not even something that worked before.

Refactors the command-line interface to use the `spf13/cobra` library,
replacing the legacy `docopt` implementation.

Major Changes:
- Replaced docopt-based argument parsing with Cobra commands and flags:
  - Added `--config`, `--format`, and `--debug` as proper Cobra flags.
  - Added a `list-rules` subcommand.
- Removed `os.Exit` calls from logic functions; errors now propagate
  via `RunE`, allowing Cobra to handle exit codes.
- Improved config file handling with explicit error reporting and
  cross-platform path safety using `filepath.Join`.

Testing improvements:
- Rewrote main tests to use Cobra commands directly.
- Added `captureOutput()` helper to test CLI output.
- New tests for:
  - Successful run with a simple Makefile.
  - Failing run with known rule violations.
  - Listing of registered rules (regex-based table validation).
  - Custom formatter flag (`--format`).

CLI behavior and output changes:
- Output Streams: Prints violation data to `stdout` and a final
  summary error to `stderr`, improving scriptability.
- Exit Code: Exits with a standard code of `1` on failure, instead
  of the previous behavior of exiting with the violation count.

Signed-off-by: Mikel Olasagasti Uranga <mikel@olasagasti.info>
Copy link
Collaborator

@obnoxxx obnoxxx left a comment

Choose a reason for hiding this comment

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

LGTM, thanks!

@obnoxxx obnoxxx merged commit 288cf04 into checkmake:main Oct 16, 2025
2 checks passed
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.

2 participants