###経緯
Railsでアプリを作っている初学者です。
Rubocopを導入したところ、
windowsの改行コードのエラーがなかなか解消出来なかったので、まとめました。
同じ様に悩んでいる方の参考になると嬉しいです!
バージョン
Ruby : 2.6.5
Rails : 5.2.4
###エラーの内容
rubocopをすると、こんなエラーが。
Offenses:
Rakefile:1:1: C: Layout/EndOfLine: Carriage return character missing.
# Add your own tasks in files placed in lib/tasks ending in .rake, ...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/channels/application_cable/channel.rb:1:1: C: Layout/EndOfLine: Carria
ge return character missing.
module ApplicationCable ...
^^^^^^^^^^^^^^^^^^^^^^^
app/channels/application_cable/connection.rb:1:1: C: Layout/EndOfLine: Car
riage return character missing.
app/models/application_record.rb:1:1: C: Layout/EndOfLine: Carriage return
character missing.
class ApplicationRecord < ActiveRecord::Base ...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
test/controllers/top_controller_test.rb:1:1: C: Layout/EndOfLine: Carriage
return character missing.
require 'test_helper' ...
^^^^^^^^^^^^^^^^^^^^^
test/test_helper.rb:1:1: C: Layout/EndOfLine: Carriage return character mi
ssing.
ENV['RAILS_ENV'] ||= 'test' ...
^^^^^^^^^^^^^^^^^^^^^^^^^^^
14 files inspected, 11 offenses detected
Layout/EndOfLine: Carriage return character missing.
このエラー文なんだろう…?ということで調べてみました。
参考:改行コード一覧
https://qiita.com/uhooi/items/dc74ff3434aecb17faa2
windows → CRLF
mac・Linux → ほかの改行コード
改行のコードが他のOSと違うようです。
これはチーム開発時にOSの違うPCで様々な改行コードが混在するとまずい状況になることもあるため、Rubocopに、このチェック項目が入っているみたいですね!
では改行コードを変えたらいいのでは!?
ということで、powershellから強制変換すると、gitが壊れてブランチを選ぶことができなくなりました…どうすればいいのか…?
###解決策
公式のissueにこの問題が載っていました!
it says missing, not detected. Since version 0.48.0 line endings are configurable and based on your OS. Win->CRLF, Linux->LF. Add these lines to your .rubocop.yml if you wanna use LF line
endinds:
Style/EndOfLine:
EnforcedStyle: lf
.rubocop.ymlにこの文を追加するといいようです。
Style/EndOfLine:
EnforcedStyle: lf
変更後の.rubocop.yml
inherit_from: .rubocop_todo.yml
require:
- rubocop-rails
AllCops:
TargetRubyVersion: 2.6
Exclude:
- 'config.ru'
- 'bin/**'
- 'lib/**'
- 'db/**/*'
- 'config/**/*'
- 'script/**/*'
- !ruby/regexp /old_and_unused\.rb$/
Rails:
Enabled: true
AsciiComments:
Enabled: false
Documentation:
Enabled: false
ClassAndModuleChildren:
Enabled: false
Style/FrozenStringLiteralComment:
Enabled: false
#Windowsの改行コードを変更
Style/EndOfLine:
EnforcedStyle: lf
変更して再度rubocopを実行
PS C:\Users\....> rubocop
.
.
.
Offenses:
Gemfile:1:1: C: Layout/EndOfLine: Carriage return character detected.
source 'https://rubygems.org' ...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Gemfile:42:7: C: Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolati
on or special symbols.
gem "rspec-rails"
gem "rspec-rails"
^^^^^^^^^^^^^
Gemfile:43:3: C: Bundler/OrderedGems: Gems should be sorted in an alphabetical order within their section
of the Gemfile. Gem factory_bot_rails should appear before rspec-rails.
gem "factory_bot_rails"
^^^^^^^^^^^^^^^^^^^^^^^
Gemfile:43:7: C: Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolati
on or special symbols.
gem "factory_bot_rails"
^^^^^^^^^^^^^^^^^^^
app/controllers/top_controller.rb:1:1: C: Layout/EndOfLine: Carriage return character detected.
class TopController < ApplicationController ...
spec/spec_helper.rb:49:1: C: Style/BlockComments: Do not use block comments.
=begin ...
^^^^^^
test/application_system_test_case.rb:1:1: C: Layout/EndOfLine: Carriage return character detected.
require 'test_helper' ...
^^^^^^^^^^^^^^^^^^^^^
16 files inspected, 9 offenses detected, 5 offenses auto-correctable
エラーが減りました! !
しかし、同じエラーが出ていて、なくならないものもあります。
そういう時はエディターで変更してください
####Atomの場合
自分のエディターはAtomですが、
①改行コードを変更したいページを開き一番下を確認
このステップで完全にrubocopさんからの指摘を無くしました!
windowsローカルだから起きる問題は色々あると思います…
初学者の方、一緒に頑張りましょう……!!!
また、間違い等ありましたらご指摘いただけますと幸いです。
よろしくお願いします。