Предыстория:
Я использовал 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 — continue
it также запускает git-хуки, в то время вы не захотите решать проблемы с кодом, которые вызваны кем-то другим. - У лидера нет централизованного места, где можно узнать запахи кода, ему приходится вручную запускать анализаторы кода в своей системе.