Skip to content

Commit 51249fc

Browse files
authored
Merge pull request #112 from tmm1/private-attr-accessor
Fix crash in `private attr_reader :x`
2 parents 4669cd3 + 2ae294c commit 51249fc

File tree

2 files changed

+31
-8
lines changed

2 files changed

+31
-8
lines changed

lib/ripper-tags/parser.rb

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -193,17 +193,21 @@ def on_method_add_arg(call, args)
193193
klass = name == access ? nil : 'self'
194194
procedure = :def_with_access
195195

196-
if args[1][0].is_a?(String)
197-
procedure = :redefine_access
198-
method_name = args[1][0]
196+
if args[1][0].is_a?(Array)
197+
args[1].inject([]) do |gen, def_args|
198+
if def_args[1].is_a?(String)
199+
gen << [procedure, klass, def_args[1], access, line]
200+
else
201+
gen
202+
end
203+
end
204+
elsif args[1][0].is_a?(String)
205+
[:redefine_access, klass, args[1][0], access, line]
199206
elsif args[1][1] == 'self'
200-
method_name = args[1][2]
207+
[procedure, klass, args[1][2], access, line]
201208
else
202-
klass = nil
203-
method_name = args[1][1]
209+
[procedure, nil, args[1][1], access, line]
204210
end
205-
206-
[procedure, klass, method_name, access, line]
207211
when "module_function"
208212
access = "public"
209213
klass = "self"

test/test_ripper_tags.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,25 @@ def def() end
203203
assert_equal 'method', tags.find{ |t| t[:name] == 'abc' }[:kind]
204204
assert_equal nil, tags.find{ |t| t[:name] == 'def' }[:access]
205205
end
206+
207+
%w(private public protected).each do |visibility|
208+
tags = extract(<<-EOC)
209+
class Test
210+
#{visibility} attr_reader :a, :b
211+
attr_reader :c
212+
end
213+
EOC
214+
215+
assert_equal 'a', tags[1][:name]
216+
assert_equal visibility, tags[1][:access]
217+
assert_equal 'method', tags[1][:kind]
218+
assert_equal 'b', tags[2][:name]
219+
assert_equal visibility, tags[2][:access]
220+
assert_equal 'method', tags[2][:kind]
221+
assert_equal 'c', tags[3][:name]
222+
assert_equal nil, tags[3][:access]
223+
assert_equal 'method', tags[3][:kind]
224+
end
206225

207226
%w(private_class_method public_class_method).each do |visibility|
208227
tags = extract(<<-EOC)

0 commit comments

Comments
 (0)