毎度のように前巻の内容を忘れてしまっているわけで、脳内のセーブデータなしでざっと読んでもよく分からなったため、もう何度か読むと思う。
ファイブスター物語 14 (ニュータイプ100%コミックス)
- 作者: 永野護
- 出版社/メーカー: KADOKAWA
- 発売日: 2018/02/10
- メディア: コミック
- この商品を含むブログ (2件) を見る
毎度のように前巻の内容を忘れてしまっているわけで、脳内のセーブデータなしでざっと読んでもよく分からなったため、もう何度か読むと思う。
ファイブスター物語 14 (ニュータイプ100%コミックス)
実装していたのは4日、5日前くらいで今回マージされた cop となる。
Ruby 2.0 で導入された擬似変数 __dir__
を File.expand_path
や Pathname()
の引数に使える局面で __FILE__
より好んで使いましょうということをチェックする。
PR の Description から引用するとこうなる。特に最後に示している引数が変数や式展開のケースは渡ってくるパスが特定できないのでチェックをしないようにしている。
This cop checks for use of the File.expand_path
arguments.
# bad File.expand_path('..', __FILE__) # good File.expand_path(__dir__)
Likewise, it also checks for the Pathname.new
argument.
# bad Pathname.new(__FILE__).parent.expand_path # good Pathname.new(__dir__).expand_path
Basically, replace __FILE__
with __dir_
, but also warn about arguments that specify unnecessary current directory as follows.
# bad File.expand_path('.', __FILE__) # good File.expand_path(__FILE__)
This cop has autocorrect for these.
This commit autocorrected some offenses that had occurred in RuboCop itself using this Style/ExpandPathArguments
cop.
If other than str_type
is used as an argument to expand_path
, it will not be checked because the path cannot be determined.
For example, in the following cases.
File.expand_path(path, __FILE__) File.expand_path("#{path_to_file}.png", __FILE__)
Tokyu.rb の新年会に行った。会場はしゃぶしゃぶ温野菜 目黒店。
🥩🥩🥩 #tokyurb pic.twitter.com/FjxE9yQV6u
— Koichi ITO (@koic) 2018年2月9日
楽しい時間でした。幹事の ginkouno さんありがとうございました!
先日直したつもりでいた Rails/FilePath
cop への false positive についてリグレッションを作っていたのを直した。
(当然だけど) 非 Rails アプリケーションである RuboCop には Rails
部署の cop はデフォルトで効かないのと、既存テストで担保されていない分でロジックが及んでいなかったということで埋め込んでいたもの。
サンプルで実験するときは、最小限の1行コードのために Rails アプリケーションを使うのも手間なので --only
オプションで明示的な指定をして再現をしたりしていた。
% cat /tmp/a.rb repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?('/') % rubocop --only Rails/FilePath /tmp/a.rb /tmp/a.rb:1:13: C: Rails/FilePath: Please use Rails.root.join('path', 'to') instead. repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?('/') ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1 file inspected, 1 offense detected
Edge のコードを使ってのレポートをしてくれた Issue の起票者に感謝。
ブラウザのシークレットモードで見たら草が生えていたけれど、それはたぶん GitHub のバグ。
この日の草への水やりはしていたものと思っていたら、実はしていなかったという。以下の Cop 実装に手をかけていたこともあり、それほど注意していなかったというのはある。
草といえば Write Code Everyday からの影響がはじまりで、 2015 年から意図的に手段と目的を入れ替えて「草を生やすことが目的」としていたが、こんかい意図せず草が途切れても想像よりずっと衝撃が小さくて「まあ、いいか」という感想に自分が軽く驚いていた。
気がついたら「草を生やすことが目的」ではなくなっていたのかもしれない。
2018年2月10日追記: 翌日に出していた PR がマージされた際に、PR に含んでいたコミットがこの日のものだったようで結果的に草が繋がった。
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
『ActiveRecord::ConnectionAdapters の下の世界』というタイトルで話します。
CFP の概要に書いた内容は以下でした。
Active Record を構成する要素の中でも ConnectionAdapters の下の世界にフォーカスした話です。とりわけ Active Record の 3rd party adapter のひとつである Oracle enhanced adapter を中心に、ActiveRecord::ConnectionAdapters の下の世界で行われている開発事例について取り挙げる予定です。
沖縄で会いましょう。