Skip to content

Commit

Permalink
Add Member parent class to represent accessors and methods
Browse files Browse the repository at this point in the history
  • Loading branch information
vinistock committed Nov 27, 2023
1 parent ae6a2cc commit 85f7593
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 14 deletions.
30 changes: 18 additions & 12 deletions lib/ruby_indexer/lib/ruby_indexer/entry.rb
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,11 @@ def initialize(name:)
class RequiredParameter < Parameter
end

class Accessor < Entry
class Member < Entry
extend T::Sig
extend T::Helpers

abstract!

sig { returns(T.nilable(Entry::Namespace)) }
attr_reader :owner
Expand All @@ -113,25 +116,30 @@ def initialize(name, file_path, location, comments, owner)
@owner = owner
end

sig { returns(T::Array[Parameter]) }
sig { abstract.returns(T::Array[Parameter]) }
def parameters; end
end

class Accessor < Member
extend T::Sig

sig { override.returns(T::Array[Parameter]) }
def parameters
params = []
params << RequiredParameter.new(name: name.delete_suffix("=").to_sym) if name.end_with?("=")
params
end
end

class Method < Entry
class Method < Member
extend T::Sig
extend T::Helpers

abstract!

sig { returns(T::Array[Parameter]) }
sig { override.returns(T::Array[Parameter]) }
attr_reader :parameters

sig { returns(T.nilable(Entry::Namespace)) }
attr_reader :owner

sig do
params(
name: String,
Expand All @@ -143,9 +151,9 @@ class Method < Entry
).void
end
def initialize(name, file_path, location, comments, parameters_node, owner) # rubocop:disable Metrics/ParameterLists
super(name, file_path, location, comments)
super(name, file_path, location, comments, owner)

@parameters = T.let(list_params(parameters_node), T::Array[Parameter])
@owner = owner
end

private
Expand All @@ -162,9 +170,7 @@ def list_params(parameters_node)
end
end

sig do
params(node: Prism::Node).returns(T.nilable(Symbol))
end
sig { params(node: Prism::Node).returns(T.nilable(Symbol)) }
def parameter_name(node)
case node
when Prism::RequiredParameterNode
Expand Down
4 changes: 2 additions & 2 deletions lib/ruby_lsp/requests/completion.rb
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ def on_call_node_enter(node)

candidates = T.cast(
@index.prefix_search(name),
T::Array[T.any(T::Array[RubyIndexer::Entry::Method], T::Array[RubyIndexer::Entry::Accessor])],
T::Array[T::Array[RubyIndexer::Entry::Member]],
)
candidates.each do |entries|
entry = entries.find { |e| e.owner&.name == receiver.name }
Expand All @@ -153,7 +153,7 @@ def on_call_node_enter(node)

sig do
params(
entry: T.any(RubyIndexer::Entry::Method, RubyIndexer::Entry::Accessor),
entry: RubyIndexer::Entry::Member,
node: Prism::CallNode,
).returns(Interface::CompletionItem)
end
Expand Down

0 comments on commit 85f7593

Please sign in to comment.