# File lib/ruby_lsp/listeners/completion.rb, line 106defon_call_node_enter(node)
name = node.messagereturnunlessnamecasenamewhen"require"complete_require(node)
when"require_relative"complete_require_relative(node)
elsecomplete_self_receiver_method(node, name) if!@typechecker_enabled&&self_receiver?(node)
endend
on_constant_path_node_enter(node)
# File lib/ruby_lsp/listeners/completion.rb, line 59defon_constant_path_node_enter(node)
returnif@global_state.typecheckername = constant_name(node)
returnifname.nil?top_level_reference = ifname.start_with?("::")
name = name.delete_prefix("::")
trueelsefalseend# If we're trying to provide completion for an aliased namespace, we need to first discover it's real name in# order to find which possible constants match the desired search*namespace, incomplete_name = name.split("::")
aliased_namespace = T.must(namespace).join("::")
namespace_entries = @index.resolve(aliased_namespace, @nesting)
returnunlessnamespace_entriesreal_namespace = @index.follow_aliased_namespace(T.must(namespace_entries.first).name)
candidates = @index.prefix_search(
"#{real_namespace}::#{incomplete_name}",
top_level_reference? [] :@nesting,
)
candidates.eachdo|entries|# The only time we may have a private constant reference from outside of the namespace is if we're dealing# with ConstantPath and the entry name doesn't start with the current nestingfirst_entry = T.must(entries.first)
nextiffirst_entry.visibility==:private&&!first_entry.name.start_with?("#{@nesting}::")
constant_name = T.must(first_entry.name.split("::").last)
full_name = aliased_namespace.empty??constant_name:"#{aliased_namespace}::#{constant_name}"@response_builder<<build_entry_completion(
full_name,
name,
node,
entries,
top_level_reference||top_level?(T.must(entries.first).name),
)
endend