-
Notifications
You must be signed in to change notification settings - Fork 825
Description
Based on the search results, here's a list of 15 top tools from the Ruby ecosystem that can be effectively wrapped as pre-commit hooks. These tools focus specifically on Ruby code quality, style, security, and related aspects.
The pre-commit framework can wrap almost any command-line tool. For many Ruby tools, there are often existing pre-commit hook repositories (like mattlqx/pre-commit-ruby or jumanjihouse/pre-commit-hooks) that provide ready-to-use configurations. If a specific hook isn't available, you can create a language: system or language: ruby hook.
Here are the tools:
-
1. RuboCop:
- Purpose: The most popular static code analyzer and code formatter for Ruby, enforcing community style guides and best practices. Highly configurable.
- Why for pre-commit: Ensures consistent code style and catches common errors before commit. Can auto-correct many offenses.
-
2. Brakeman:
- Purpose: A static analysis security vulnerability scanner for Ruby on Rails applications.
- Why for pre-commit: Catches common security vulnerabilities early in the development cycle, preventing them from reaching the repository.
-
3. Reek:
- Purpose: Code smell detector for Ruby. It examines Ruby code and reports "code smells" – indicators of potential problems in the code.
- Why for pre-commit: Helps maintain a clean and maintainable codebase by identifying areas for refactoring.
-
4. Standard Ruby (standardrb):
- Purpose: An opinionated code formatter that combines
RuboCopwith a set of pre-defined rules, aiming for zero configuration. It's an alternative to highly customizing RuboCop. - Why for pre-commit: Enforces a consistent, opinionated code style with minimal setup, reducing style debates.
- Purpose: An opinionated code formatter that combines
-
5. Fasterer:
- Purpose: Helps to make Ruby code faster by suggesting performance improvements based on patterns from
fast-ruby. - Why for pre-commit: Identifies potential performance bottlenecks or less efficient Ruby idioms.
- Purpose: Helps to make Ruby code faster by suggesting performance improvements based on patterns from
-
6. Bundler-Audit (bundle-audit):
- Purpose: Checks your
Gemfile.lockfor vulnerable versions of gems. It uses the Ruby Advisory Database. - Why for pre-commit: Ensures that committed dependency changes do not introduce known security vulnerabilities.
- Purpose: Checks your
-
7. ERB Linter (erb-lint):
- Purpose: Linter for ERB (Embedded Ruby) templates, commonly used in Rails views.
- Why for pre-commit: Ensures clean and correctly formatted ERB files, preventing syntax errors in views.
-
8. Rails Best Practices (rails_best_practices):
- Purpose: A static code analyzer for Rails applications that checks for common Rails best practices and anti-patterns.
- Why for pre-commit: Helps maintain high-quality Rails-specific code, promoting idiomatic Rails development.
-
9. RSpec (or Minitest):
- Purpose: Ruby testing frameworks for unit and integration tests.
- Why for pre-commit: Running fast-failing unit tests on relevant changed files can catch regressions immediately. (Note: Only use for very fast, isolated tests, as pre-commit hooks should be quick).
-
10. Foodcritic / Cookstyle:
- Purpose: Linters specifically for Chef cookbooks.
Cookstyleis the official style guide for Chef Infra cookbooks, built on RuboCop. - Why for pre-commit: Essential for teams developing Chef cookbooks to maintain consistency and quality.
- Purpose: Linters specifically for Chef cookbooks.
-
11. Yard:
- Purpose: A documentation tool for Ruby that generates API documentation by parsing source code comments and definitions.
- Why for pre-commit: While not a "linter" per se, you could potentially use a custom hook to check for missing documentation tags or outdated documentation. (This would be more advanced and project-specific).
-
12. Danger:
- Purpose: A continuous integration (CI) tool that automates common chores during code review (e.g., ensuring a changelog entry exists, checking PR size). While often run in CI, simple checks can be adapted for pre-commit.
- Why for pre-commit: Could be used for very basic pre-PR checks like ensuring a branch name follows conventions, though its full power is in CI.
-
13. SimpleCov:
- Purpose: A code coverage tool for Ruby. While it's typically run with your test suite, a hook could potentially ensure coverage doesn't drop significantly (though this might be too heavy for pre-commit).
- Why for pre-commit: More for post-commit or CI, but a custom script could enforce a minimum coverage percentage if performance allows.
-
14. Prettier (with
@prettier/plugin-ruby):- Purpose: A highly opinionated code formatter that supports multiple languages, including Ruby via a plugin.
- Why for pre-commit: Offers consistent formatting for a polyglot codebase if you're already using Prettier for other languages.
-
15. Rubyfmt:
- Purpose: An opinionated, automatic Ruby code formatter, similar in spirit to Go's
gofmt. - Why for pre-commit: Provides automatic and consistent formatting with minimal configuration, directly targeted at Ruby.
- Purpose: An opinionated, automatic Ruby code formatter, similar in spirit to Go's
Remember that pre-commit hooks should be fast. For tools like RSpec or Brakeman, configure them to run only on staged changes or on a minimal subset of files to keep commit times low. Heavy-duty analysis is usually better suited for CI/CD pipelines.