-
Notifications
You must be signed in to change notification settings - Fork 214
Adds support for attr_* method references #2848
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
e68bf97
9a466c9
47d28f5
0cd8075
c77f6a5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -143,6 +143,152 @@ def baz | |
assert_equal(9, refs[1].location.start_line) | ||
end | ||
|
||
def test_matches_attr_writer_with_call_node_argument | ||
refs = find_method_references("foo=", <<~RUBY) | ||
class Bar | ||
attr_reader :foo, bar | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should this be There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks for the feedback @vinistock and apologies for the delay!! Heads up, I re-opened the PR here including fixes for both your comments. |
||
|
||
def baz | ||
self.foo = 1 | ||
self.foo | ||
end | ||
end | ||
RUBY | ||
|
||
assert_equal(1, refs.size) | ||
|
||
assert_equal("foo=", refs[0].name) | ||
assert_equal(5, refs[0].location.start_line) | ||
end | ||
|
||
def test_matches_attr_writer | ||
refs = find_method_references("foo=", <<~RUBY) | ||
class Bar | ||
def foo | ||
end | ||
|
||
attr_writer :foo | ||
|
||
def baz | ||
self.foo = 1 | ||
self.foo | ||
end | ||
end | ||
RUBY | ||
|
||
# We want to match `foo=` but not `foo` | ||
assert_equal(2, refs.size) | ||
|
||
assert_equal("foo=", refs[0].name) | ||
assert_equal(5, refs[0].location.start_line) | ||
|
||
assert_equal("foo=", refs[1].name) | ||
assert_equal(8, refs[1].location.start_line) | ||
end | ||
|
||
def test_matches_attr_reader | ||
refs = find_method_references("foo", <<~RUBY) | ||
class Bar | ||
def foo=(value) | ||
end | ||
|
||
attr_reader :foo | ||
|
||
def baz | ||
self.foo = 1 | ||
self.foo | ||
end | ||
end | ||
RUBY | ||
|
||
# We want to match `foo=` but not `foo` | ||
assert_equal(2, refs.size) | ||
|
||
assert_equal("foo", refs[0].name) | ||
assert_equal(5, refs[0].location.start_line) | ||
|
||
assert_equal("foo", refs[1].name) | ||
assert_equal(9, refs[1].location.start_line) | ||
end | ||
|
||
def test_matches_attr_accessor | ||
refs = find_method_references("foo=", <<~RUBY) | ||
class Bar | ||
attr_accessor :foo | ||
|
||
def baz | ||
self.foo = 1 | ||
self.foo | ||
end | ||
end | ||
RUBY | ||
|
||
# We want to match `foo=` but not `foo` | ||
assert_equal(2, refs.size) | ||
|
||
assert_equal("foo=", refs[0].name) | ||
assert_equal(2, refs[0].location.start_line) | ||
|
||
assert_equal("foo=", refs[1].name) | ||
assert_equal(5, refs[1].location.start_line) | ||
|
||
refs = find_method_references("foo", <<~RUBY) | ||
class Bar | ||
attr_accessor :foo | ||
|
||
def baz | ||
self.foo = 1 | ||
self.foo | ||
end | ||
end | ||
RUBY | ||
|
||
assert_equal("foo", refs[0].name) | ||
assert_equal(2, refs[0].location.start_line) | ||
|
||
assert_equal("foo", refs[1].name) | ||
assert_equal(6, refs[1].location.start_line) | ||
end | ||
|
||
def test_matches_attr_accessor_multi | ||
refs = find_method_references("foo=", <<~RUBY) | ||
class Bar | ||
attr_accessor :bar, :foo | ||
|
||
def baz | ||
self.foo = 1 | ||
self.foo | ||
end | ||
end | ||
RUBY | ||
|
||
# We want to match `foo=` but not `foo` | ||
assert_equal(2, refs.size) | ||
|
||
assert_equal("foo=", refs[0].name) | ||
assert_equal(2, refs[0].location.start_line) | ||
|
||
assert_equal("foo=", refs[1].name) | ||
assert_equal(5, refs[1].location.start_line) | ||
|
||
refs = find_method_references("foo", <<~RUBY) | ||
class Bar | ||
attr_accessor :bar, :foo | ||
|
||
def baz | ||
self.foo = 1 | ||
self.foo | ||
end | ||
end | ||
RUBY | ||
|
||
assert_equal("foo", refs[0].name) | ||
assert_equal(2, refs[0].location.start_line) | ||
|
||
assert_equal("foo", refs[1].name) | ||
assert_equal(6, refs[1].location.start_line) | ||
end | ||
|
||
def test_find_inherited_methods | ||
refs = find_method_references("foo", <<~RUBY) | ||
class Bar | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the middle of typing, we may find empty arguments, so we have to handle that. Also, we need to account for symbol and string nodes as arguments.