Skip to content

Commit 13bb8b0

Browse files
authored
Remove T::Enum for entry visibility (#3442)
1 parent 59ee419 commit 13bb8b0

File tree

8 files changed

+40
-53
lines changed

8 files changed

+40
-53
lines changed

lib/ruby_indexer/lib/ruby_indexer/declaration_listener.rb

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -265,11 +265,11 @@ def on_call_node_enter(node)
265265
when :include, :prepend, :extend
266266
handle_module_operation(node, message)
267267
when :public
268-
handle_visibility_change(node, Entry::Visibility::PUBLIC)
268+
handle_visibility_change(node, :public)
269269
when :protected
270-
handle_visibility_change(node, Entry::Visibility::PROTECTED)
270+
handle_visibility_change(node, :protected)
271271
when :private
272-
handle_visibility_change(node, Entry::Visibility::PRIVATE)
272+
handle_visibility_change(node, :private)
273273
when :module_function
274274
handle_module_function(node)
275275
when :private_class_method
@@ -343,7 +343,7 @@ def on_def_node_enter(node)
343343
name_location,
344344
comments,
345345
signatures,
346-
Entry::Visibility::PUBLIC,
346+
:public,
347347
singleton,
348348
))
349349
end
@@ -465,8 +465,8 @@ def on_class_variable_write_node_enter(node)
465465
handle_class_variable(node, node.name_loc)
466466
end
467467

468-
#: (String name, Prism::Location node_location, Array[Entry::Signature] signatures, ?visibility: Entry::Visibility, ?comments: String?) -> void
469-
def add_method(name, node_location, signatures, visibility: Entry::Visibility::PUBLIC, comments: nil)
468+
#: (String name, Prism::Location node_location, Array[Entry::Signature] signatures, ?visibility: Symbol, ?comments: String?) -> void
469+
def add_method(name, node_location, signatures, visibility: :public, comments: nil)
470470
location = Location.from_prism_location(node_location, @code_units_cache)
471471

472472
@index.add(Entry::Method.new(
@@ -621,7 +621,7 @@ def handle_private_constant(node)
621621
# The private_constant method does not resolve the constant name. It always points to a constant that needs to
622622
# exist in the current namespace
623623
entries = @index[fully_qualify_name(name)]
624-
entries&.each { |entry| entry.visibility = Entry::Visibility::PRIVATE }
624+
entries&.each { |entry| entry.visibility = :private }
625625
end
626626

627627
#: (Prism::CallNode node) -> void
@@ -868,7 +868,7 @@ def handle_module_function(node)
868868
entry_owner_name = entry.owner&.name
869869
next unless entry_owner_name
870870

871-
entry.visibility = Entry::Visibility::PRIVATE
871+
entry.visibility = :private
872872

873873
singleton = @index.existing_or_new_singleton_class(entry_owner_name)
874874
location = Location.from_prism_location(argument.location, @code_units_cache)
@@ -879,7 +879,7 @@ def handle_module_function(node)
879879
location,
880880
collect_comments(node)&.concat(entry.comments),
881881
entry.signatures,
882-
Entry::Visibility::PUBLIC,
882+
:public,
883883
singleton,
884884
))
885885
end
@@ -894,7 +894,7 @@ def handle_private_class_method(node)
894894
# If we're passing a method definition directly to `private_class_method`, push a new private scope. That will be
895895
# applied when the indexer finds the method definition and then popped on `call_node_leave`
896896
if arguments.first.is_a?(Prism::DefNode)
897-
@visibility_stack.push(VisibilityScope.new(visibility: Entry::Visibility::PRIVATE))
897+
@visibility_stack.push(VisibilityScope.new(visibility: :private))
898898
return
899899
end
900900

@@ -921,9 +921,7 @@ def handle_private_class_method(node)
921921
entries = @index.resolve_method(name, @index.existing_or_new_singleton_class(owner_name).name)
922922
next unless entries
923923

924-
entries.each do |entry|
925-
entry.visibility = Entry::Visibility::PRIVATE
926-
end
924+
entries.each { |entry| entry.visibility = :private }
927925
end
928926
end
929927

@@ -1037,7 +1035,7 @@ def last_name_in_stack
10371035
name.split("::").last
10381036
end
10391037

1040-
#: (Prism::CallNode, Entry::Visibility) -> void
1038+
#: (Prism::CallNode, Symbol) -> void
10411039
def handle_visibility_change(node, visibility)
10421040
owner = @owner_stack.last
10431041
return unless owner

lib/ruby_indexer/lib/ruby_indexer/entry.rb

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,6 @@
33

44
module RubyIndexer
55
class Entry
6-
class Visibility < T::Enum
7-
enums do
8-
PUBLIC = new(:public)
9-
PROTECTED = new(:protected)
10-
PRIVATE = new(:private)
11-
end
12-
end
13-
146
#: String
157
attr_reader :name
168

@@ -22,31 +14,31 @@ class Visibility < T::Enum
2214

2315
alias_method :name_location, :location
2416

25-
#: Visibility
17+
#: Symbol
2618
attr_accessor :visibility
2719

2820
#: (String name, URI::Generic uri, Location location, String? comments) -> void
2921
def initialize(name, uri, location, comments)
3022
@name = name
3123
@uri = uri
3224
@comments = comments
33-
@visibility = Visibility::PUBLIC #: Visibility
25+
@visibility = :public #: Symbol
3426
@location = location
3527
end
3628

3729
#: -> bool
3830
def public?
39-
visibility == Visibility::PUBLIC
31+
@visibility == :public
4032
end
4133

4234
#: -> bool
4335
def protected?
44-
visibility == Visibility::PROTECTED
36+
@visibility == :protected
4537
end
4638

4739
#: -> bool
4840
def private?
49-
visibility == Visibility::PRIVATE
41+
@visibility == :private
5042
end
5143

5244
#: -> String
@@ -306,7 +298,7 @@ class Member < Entry
306298
#: Entry::Namespace?
307299
attr_reader :owner
308300

309-
#: (String name, URI::Generic uri, Location location, String? comments, Visibility visibility, Entry::Namespace? owner) -> void
301+
#: (String name, URI::Generic uri, Location location, String? comments, Symbol visibility, Entry::Namespace? owner) -> void
310302
def initialize(name, uri, location, comments, visibility, owner) # rubocop:disable Metrics/ParameterLists
311303
super(name, uri, location, comments)
312304
@visibility = visibility
@@ -358,7 +350,7 @@ class Method < Member
358350
#: Location
359351
attr_reader :name_location
360352

361-
#: (String name, URI::Generic uri, Location location, Location name_location, String? comments, Array[Signature] signatures, Visibility visibility, Entry::Namespace? owner) -> void
353+
#: (String name, URI::Generic uri, Location location, Location name_location, String? comments, Array[Signature] signatures, Symbol visibility, Entry::Namespace? owner) -> void
362354
def initialize(name, uri, location, name_location, comments, signatures, visibility, owner) # rubocop:disable Metrics/ParameterLists
363355
super(name, uri, location, comments, visibility, owner)
364356
@signatures = signatures

lib/ruby_indexer/lib/ruby_indexer/rbs_indexer.rb

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -107,15 +107,6 @@ def handle_method(member, owner)
107107
location = to_ruby_indexer_location(member.location)
108108
comments = comments_to_string(member)
109109

110-
visibility = case member.visibility
111-
when :private
112-
Entry::Visibility::PRIVATE
113-
when :protected
114-
Entry::Visibility::PROTECTED
115-
else
116-
Entry::Visibility::PUBLIC
117-
end
118-
119110
real_owner = member.singleton? ? @index.existing_or_new_singleton_class(owner.name) : owner
120111
signatures = signatures(member)
121112
@index.add(Entry::Method.new(
@@ -125,7 +116,7 @@ def handle_method(member, owner)
125116
location,
126117
comments,
127118
signatures,
128-
visibility,
119+
member.visibility || :public,
129120
real_owner,
130121
))
131122
end

lib/ruby_indexer/lib/ruby_indexer/visibility_scope.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class VisibilityScope
88
class << self
99
#: -> instance
1010
def module_function_scope
11-
new(module_func: true, visibility: Entry::Visibility::PRIVATE)
11+
new(module_func: true, visibility: :private)
1212
end
1313

1414
#: -> instance
@@ -17,14 +17,14 @@ def public_scope
1717
end
1818
end
1919

20-
#: Entry::Visibility
20+
#: Symbol
2121
attr_reader :visibility
2222

2323
#: bool
2424
attr_reader :module_func
2525

26-
#: (?visibility: Entry::Visibility, ?module_func: bool) -> void
27-
def initialize(visibility: Entry::Visibility::PUBLIC, module_func: false)
26+
#: (?visibility: Symbol, ?module_func: bool) -> void
27+
def initialize(visibility: :public, module_func: false)
2828
@visibility = visibility
2929
@module_func = module_func
3030
end

lib/ruby_indexer/test/method_test.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ def baz; end
100100
end
101101
RUBY
102102

103-
assert_entry("foo", Entry::Method, "/fake/path/foo.rb:1-10:2-5", visibility: Entry::Visibility::PRIVATE)
104-
assert_entry("bar", Entry::Method, "/fake/path/foo.rb:4-2:4-14", visibility: Entry::Visibility::PUBLIC)
105-
assert_entry("baz", Entry::Method, "/fake/path/foo.rb:8-2:8-14", visibility: Entry::Visibility::PROTECTED)
103+
assert_entry("foo", Entry::Method, "/fake/path/foo.rb:1-10:2-5", visibility: :private)
104+
assert_entry("bar", Entry::Method, "/fake/path/foo.rb:4-2:4-14", visibility: :public)
105+
assert_entry("baz", Entry::Method, "/fake/path/foo.rb:8-2:8-14", visibility: :protected)
106106
end
107107

108108
def test_visibility_tracking_with_nested_class_or_modules
@@ -120,9 +120,9 @@ def baz; end
120120
end
121121
RUBY
122122

123-
assert_entry("foo", Entry::Method, "/fake/path/foo.rb:3-2:3-14", visibility: Entry::Visibility::PRIVATE)
124-
assert_entry("bar", Entry::Method, "/fake/path/foo.rb:6-4:6-16", visibility: Entry::Visibility::PUBLIC)
125-
assert_entry("baz", Entry::Method, "/fake/path/foo.rb:9-2:9-14", visibility: Entry::Visibility::PRIVATE)
123+
assert_entry("foo", Entry::Method, "/fake/path/foo.rb:3-2:3-14", visibility: :private)
124+
assert_entry("bar", Entry::Method, "/fake/path/foo.rb:6-4:6-16", visibility: :public)
125+
assert_entry("baz", Entry::Method, "/fake/path/foo.rb:9-2:9-14", visibility: :private)
126126
end
127127

128128
def test_visibility_tracking_with_module_function
@@ -147,7 +147,7 @@ def bar; end
147147
# The second entry points to the public singleton method
148148
assert_equal("Test::<Class:Test>", second_entry&.owner&.name)
149149
assert_instance_of(Entry::SingletonClass, second_entry&.owner)
150-
assert_equal(Entry::Visibility::PUBLIC, second_entry&.visibility)
150+
assert_equal(:public, second_entry&.visibility)
151151
end
152152
end
153153

lib/ruby_indexer/test/rbs_indexer_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def test_index_methods
6060
entry = entries.find { |entry| entry.owner&.name == "Array" } #: as Entry::Method
6161
assert_match(%r{/gems/rbs-.*/core/array.rbs}, entry.file_path)
6262
assert_equal("array.rbs", entry.file_name)
63-
assert_equal(Entry::Visibility::PUBLIC, entry.visibility)
63+
assert_equal(:public, entry.visibility)
6464

6565
# Using fixed positions would be fragile, so let's just check some basics.
6666
assert_operator(entry.location.start_line, :>, 0)

lib/ruby_indexer/test/test_case.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@ def setup
1111
@default_indexed_entries = @index.instance_variable_get(:@entries).dup
1212
end
1313

14+
def teardown
15+
entries = @index.instance_variable_get(:@entries).values.flatten
16+
entries.each do |entry|
17+
assert_includes([:public, :private, :protected], entry.visibility)
18+
end
19+
end
20+
1421
private
1522

1623
def index(source, uri: URI::Generic.from_path(path: "/fake/path/foo.rb"))
@@ -31,7 +38,6 @@ def assert_entry(expected_name, type, expected_location, visibility: nil)
3138
":#{location.end_line - 1}-#{location.end_column}"
3239

3340
assert_equal(expected_location, location_string)
34-
3541
assert_equal(visibility, entry.visibility) if visibility
3642
end
3743

lib/ruby_lsp/listeners/completion.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ def complete_methods(node, name)
512512
external_references = @node_context.fully_qualified_name != type.name
513513

514514
@index.method_completion_candidates(method_name, type.name).each do |entry|
515-
next if entry.visibility != RubyIndexer::Entry::Visibility::PUBLIC && external_references
515+
next if entry.visibility != :public && external_references
516516

517517
entry_name = entry.name
518518
owner_name = entry.owner&.name

0 commit comments

Comments
 (0)