Предыстория:

Я использовал overcommit в своих последних 4–5 проектах и ​​хотел бы поделиться здесь своим опытом.

Overcommit — это инструмент для управления и настройки перехватчиков Git. Вы можете настроить статические анализаторы кода на git hooks. Overcommit полезен, когда размер вашей команды превышает 4, у вас есть частное репо, и вы не хотите платить за климат кода. Он будет запускать ваши статические анализаторы кода на git-хуках на машине разработчика, и в случае сбоя он не позволит завершить эту операцию.

Установка

Добавьте строку ниже в свой Gemfile.

gem 'overcommit'

Теперь нам нужно создать файл конфигурации в корневом каталоге для переопределения хуков по умолчанию.

Имя файла конфигурации должно быть .overcommit.ym. И это будет выглядеть так. Вы можете настроить git hooks в этом файле. Для некоторых анализаторов вам может понадобиться дополнительный плагин, например, для rubocop вам нужен rubocop в вашем Gemfile.

CommitMsg:
  ALL:
    requires_files: false
    quiet: false
EmptyMessage:
    enabled: true
    description: 'Check for empty commit message'
    quiet: true
TrailingPeriod:
    enabled: true
    description: 'Check for trailing periods in subject'
PreCommit:
  ALL:
    problem_on_unmodified_line: report
    requires_files: true
    required: false
    quiet: false
AuthorEmail:
    enabled: true
    description: 'Check author email'
    requires_files: false
    required: true
    quiet: true
    pattern: '^[^@]+@.*$'
AuthorName:
    enabled: true
    description: 'Check for author name'
    requires_files: false
    required: true
    quiet: true
MergeConflicts:
    enabled: true
    description: 'Check for merge conflicts'
    quiet: true
    required_executable: 'grep'
    flags: ['-IHn', "^<<<<<<<[ \t]"]
RailsSchemaUpToDate:
    enabled: true
    description: 'Check if database schema is up to date'
    include:
      - 'db/migrate/*.rb'
      - 'db/schema.rb'
TrailingWhitespace:
    enabled: true
    description: 'Check for trailing whitespace'
    required_executable: 'grep'
    flags: ['-IHn', "[ \t]$"]
    include: '**/*.rb'
  RuboCop:
    enabled: true
    on_warn: fail
  Fasterer:
    enabled: true
    on_warn: fail
  Reek:
    enabled: true
    on_warn: fail
  RailsBestPractices:
    enabled: true
    on_warn: fail
    command: ['rails_best_practices', '--config', 'config/rails_best_practices.yml']
  HamlLint:
    enabled: true
    on_warn: fail
  ScssLint:
    enabled: true
    on_warn: fail
  HardTabs:
    enabled: true
    on_warn: fail
  BundleCheck:
    enabled: true
    on_warn: fail
  EsLint:
    enabled: true
    on_warn: fail
  CoffeeLint:
    enabled: true
    on_warn: fail
PrePush:
  Brakeman:
    enabled: true
    on_warn: fail

Немногие из вышеперечисленных хуков говорят сами за себя, поэтому я опишу остальные.

Рубокоп

RuboCop — это статический анализатор и форматировщик кода Ruby. Из коробки он обеспечивает соблюдение многих рекомендаций, изложенных в Руководстве по стилю Ruby сообщества.

Установка

Пожалуйста, добавьте следующие строки в ваш Gemfile

gem 'rubocop', require: false

Быстрее

Fasterer предложит некоторые улучшения скорости, которые вы можете подробно проверить в репозитории fast-ruby.

Установка

Пожалуйста, добавьте следующую строку в свой Gemfile

gem 'fasterer'

Воняет

Reek — это инструмент, который исследует классы, модули и методы Ruby и сообщает обо всех обнаруженных запахах кода.

Установка

Пожалуйста, добавьте следующую строку в свой Gemfile

gem 'reek'

Практики RailsBestPractices

rails_best_practices — это инструмент метрики кода для проверки качества кода Rails.

Установка

Пожалуйста, добавьте следующую строку в свой Gemfile

gem "rails_best_practices"

Хамллинт

haml-lint — это инструмент, помогающий поддерживать чистоту и удобочитаемость файлов HAML. В дополнение к специфичным для HAML проверкам стиля и lint, он интегрируется с RuboCop, чтобы использовать его мощные инструменты статического анализа для ваших документов HAML.

Установка

Пожалуйста, добавьте следующую строку в свой Gemfile

gem 'haml_lint', require: false

ScssLint

scss-lint — это инструмент, помогающий поддерживать чистоту и удобочитаемость ваших файлов SCSS, запуская его в соответствии с набором настраиваемых правил линтера.

Установка

Пожалуйста, добавьте следующую строку в свой Gemfile

gem 'scss_lint', require: false

EsLint

ESLint — это инструмент для выявления шаблонов, обнаруженных в коде ECMAScript/JavaScript, и составления отчетов о них, цель которого — сделать код более согласованным и избежать ошибок. Во многом он похож на JSLint и JSHint за некоторыми исключениями:

Установка

Если вы хотите сделать ESLint доступным для инструментов, работающих во всех ваших проектах, мы рекомендуем установить ESLint глобально. Вы можете сделать это с помощью npm:

$ npm install -g eslint

Затем вы должны настроить файл конфигурации:

$ eslint --init

После этого вы можете запустить ESLint для любого файла или каталога следующим образом:

$ eslint yourfile.js

CoffeeLint

CoffeeLint — это средство проверки стиля, которое помогает поддерживать чистоту и согласованность кода CoffeeScript. CoffeeScript отлично справляется с изоляцией программистов от многих плохих частей JavaScript, но он не поможет обеспечить единый стиль во всей кодовой базе. CoffeeLint может помочь в этом.

Установка

Для установки убедитесь, что у вас есть рабочая версия последней стабильной версии Node и NPM (менеджер пакетов Node), а затем запустите:

npm install -g coffeelint

Брейкман

Brakeman — это инструмент статического анализа, который проверяет приложения Ruby on Rails на наличие уязвимостей в системе безопасности.

Установка

Пожалуйста, добавьте следующую строку в свой Gemfile

gem 'brakeman

Преимущества:

  • Не допускайте фиксации или отправки неверных кодов.
  • Хорошо подходит для стартапов, так как экономит затраты.
  • Простота настройки.

Недостатки:

  • Это замедляет скорость разработки, так как выполняется при каждой фиксации и отправке.
  • Это создает проблему, когда вы перебазируете ветку, и у нее есть конфликты, и после разрешения конфликтов при запуске git rebase — continueit также запускает git-хуки, в то время вы не захотите решать проблемы с кодом, которые вызваны кем-то другим.
  • У лидера нет централизованного места, где можно узнать запахи кода, ему приходится вручную запускать анализаторы кода в своей системе.

Спасибо!