Skip to content

Commit 25376c3

Browse files
committed
handle more cases for ruby/prefer-endless-method
1 parent 4265041 commit 25376c3

File tree

2 files changed

+89
-5
lines changed

2 files changed

+89
-5
lines changed

lib/ruby/prefer-endless-method.rb

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,17 @@ def one_plus_one = 1 + 1
2323

2424
within_files Synvert::ALL_RUBY_FILES + Synvert::ALL_RAKE_FILES do
2525
find_node '.def_node[body!=nil][body.body.length=1]' do
26+
break if node.name.to_s.end_with?('=')
27+
break if !node.parameters.nil? && node.lparen.nil? && node.rparen.nil?
28+
2629
first_body_node = node.body.body.first
27-
if %i[if_node unless_node].include?(first_body_node.type) && first_body_node.end_keyword.nil?
28-
break
29-
end
30-
break if first_body_node.type == :multi_write_node
30+
break if %i[if_node unless_node].include?(first_body_node.type) && first_body_node.end_keyword.nil?
31+
break if %i[multi_write_node instance_variable_or_write_node class_variable_or_write_node or_node and_node].include?(first_body_node.type)
32+
3133
body_column = mutation_adapter.get_start_loc(first_body_node).column
3234
new_body = node.body.body.first.to_source.split("\n").map { |line| line.sub(/^ {#{body_column}}/, '') }.join("\n")
33-
replace_with "def {{name}}{{lparen}}{{parameters}}{{rparen}} = #{new_body}"
35+
receiver_and_name = node.receiver ? "#{node.receiver.to_source}.#{node.name}" : node.name.to_s
36+
replace_with "def #{receiver_and_name}{{lparen}}{{parameters}}{{rparen}} = #{new_body}"
3437
end
3538
end
3639
end

spec/ruby/prefer-endless-method_spec.rb

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,4 +115,85 @@ def index
115115

116116
include_examples 'convertable'
117117
end
118+
119+
context 'do not process for class_variable_or_write_node, instance_variable_or_write_node' do
120+
let(:test_content) { <<~EOS }
121+
def class_logger
122+
@@logger ||= nil
123+
end
124+
125+
def instance_logger
126+
@logger ||= nil
127+
end
128+
EOS
129+
let(:test_rewritten_content) { <<~EOS }
130+
def class_logger
131+
@@logger ||= nil
132+
end
133+
134+
def instance_logger
135+
@logger ||= nil
136+
end
137+
EOS
138+
139+
include_examples 'convertable'
140+
end
141+
142+
context 'do not process for or_node' do
143+
let(:test_content) { <<~EOS }
144+
def new_rating=(new_rating)
145+
self.rating = NEW_TO_OLD_MAPPER[new_rating] or raise "Unknown new rating"
146+
end
147+
EOS
148+
let(:test_rewritten_content) { <<~EOS }
149+
def new_rating=(new_rating)
150+
self.rating = NEW_TO_OLD_MAPPER[new_rating] or raise "Unknown new rating"
151+
end
152+
EOS
153+
154+
include_examples 'convertable'
155+
end
156+
157+
context 'do not process if name ends with =' do
158+
let(:test_content) { <<~EOS }
159+
def remove_item_ids=(item_ids)
160+
Item.where(id: item_ids).destroy_all
161+
end
162+
EOS
163+
let(:test_rewritten_content) { <<~EOS }
164+
def remove_item_ids=(item_ids)
165+
Item.where(id: item_ids).destroy_all
166+
end
167+
EOS
168+
169+
include_examples 'convertable'
170+
end
171+
172+
context 'do not process if parameter without parentheses' do
173+
let(:test_content) { <<~EOS }
174+
def initialize item
175+
@item = item
176+
end
177+
EOS
178+
let(:test_rewritten_content) { <<~EOS }
179+
def initialize item
180+
@item = item
181+
end
182+
EOS
183+
184+
include_examples 'convertable'
185+
end
186+
187+
context 'class method' do
188+
let(:test_content) { <<~EOS }
189+
def self.enqueue(item_id)
190+
Resque.enqueue(self, item_id:)
191+
end
192+
EOS
193+
let(:test_rewritten_content) { <<~EOS }
194+
def self.enqueue(item_id) = Resque.enqueue(self, item_id:)
195+
EOS
196+
197+
include_examples 'convertable'
198+
end
118199
end

0 commit comments

Comments
 (0)