Slide 12
Slide 12 text
判定コード
#
対象コード: array.map{|x| x.upcase}
def on_block(node)
# node #=>
# s(:block,
# s(:send,
# s(:send, nil, :array), :map), #
ここは判定に不要
# s(:args,
# s(:arg, :x)), #
ここは判定に不要
# s(:send, #
ブロック中の式が1
つだけのとき、:begin
ノードが親に入らない
# s(:lvar, :x), :upcase)) #
引数なし
target_nodes = node.child_nodes - [node.send_node] # map
メソッドnode
は除く
send_type_nodes = target_nodes.select(&:send_type?) # :begin node
が入らず、直下にあること
if send_type_nodes.count == 1 && !send_type_nodes.last.arguments? #
引数なし
add_offense(node) #
アドバイス可能なnode
であることを指示
end
end
["a","b"].map{|x| x.upcase} ["a","b"].map(&:upcase)
を表示できる