znz さんが開いてくれた Issue をもとに2日くらい前に実装した Lint/OrderedMagicComments
cop がマージされた。次の RuboCop のリリースで足されると思う。
サンプル (もとは Issue) からの抜粋が Cop の説明になると思う。
# # # bad # # # frozen_string_literal: true # # encoding: ascii # p [''.frozen?, ''.encoding] #=> [true, #<Encoding:UTF-8>] # # # good # # # encoding: ascii # # frozen_string_literal: true # p [''.frozen?, ''.encoding] #=> [true, #<Encoding:US-ASCII>] # # # good # # #!/usr/bin/env ruby # # encoding: ascii # # frozen_string_literal: true # p [''.frozen?, ''.encoding] #=> [true, #<Encoding:US-ASCII>] #
マジックコメントの順序で結果が変わるのはなるほどだったので、また少し Ruby 詳しくなれた。
ちなみにこの Cop を実装しようと思った時に、ファイルのどの範囲までマジックコメントを探すようにするかが懸念点だったけれど、frozen_string_literal マジックコメントまわりの Cop 実装についてコードリーディングしている中で FrozenStringLiteral#leading_comment_lines
メソッドを見つけたときに懸念が解消した感があってそれを使っている。
def leading_comment_lines processed_source[0..2].compact end