diff --git a/spec/ameba/rule/performance/first_last_after_filter_spec.cr b/spec/ameba/rule/performance/first_last_after_filter_spec.cr index 6c80cd4b..d3320ccb 100644 --- a/spec/ameba/rule/performance/first_last_after_filter_spec.cr +++ b/spec/ameba/rule/performance/first_last_after_filter_spec.cr @@ -36,6 +36,13 @@ module Ameba::Rule::Performance subject.catch(source).should_not be_valid end + it "does not report if there is selected followed by first with arguments" do + source = Source.new %( + [1, 2, 3].select { |n| n % 2 == 0 }.first(2) + ) + subject.catch(source).should be_valid + end + it "reports if there is select followed by first?" do source = Source.new %( [1, 2, 3].select { |e| e > 2 }.first? diff --git a/src/ameba/rule/performance/first_last_after_filter.cr b/src/ameba/rule/performance/first_last_after_filter.cr index 8e0db658..a3599423 100644 --- a/src/ameba/rule/performance/first_last_after_filter.cr +++ b/src/ameba/rule/performance/first_last_after_filter.cr @@ -45,6 +45,7 @@ module Ameba::Rule::Performance def test(source, node : Crystal::Call) return unless CALL_NAMES.includes?(node.name) && (obj = node.obj) + return if node.args.any? if node.block.nil? && obj.is_a?(Crystal::Call) && filter_names.includes?(obj.name) && !obj.block.nil?