lib/ruby_indexer/lib/ruby_indexer/index.rb in ruby-lsp-0.17.9 vs lib/ruby_indexer/lib/ruby_indexer/index.rb in ruby-lsp-0.17.10
- old
+ new
@@ -89,12 +89,12 @@
sig do
params(
name: String,
).returns(T.nilable(T::Array[T.any(
Entry::Namespace,
- Entry::Alias,
- Entry::UnresolvedAlias,
+ Entry::ConstantAlias,
+ Entry::UnresolvedConstantAlias,
Entry::Constant,
)]))
end
def first_unqualified_const(name)
_name, entries = @entries.find do |const_name, _entries|
@@ -103,12 +103,12 @@
T.cast(
entries,
T.nilable(T::Array[T.any(
Entry::Namespace,
- Entry::Alias,
- Entry::UnresolvedAlias,
+ Entry::ConstantAlias,
+ Entry::UnresolvedConstantAlias,
Entry::Constant,
)]),
)
end
@@ -228,12 +228,12 @@
name: String,
nesting: T::Array[String],
seen_names: T::Array[String],
).returns(T.nilable(T::Array[T.any(
Entry::Namespace,
- Entry::Alias,
- Entry::UnresolvedAlias,
+ Entry::ConstantAlias,
+ Entry::UnresolvedConstantAlias,
)]))
end
def resolve(name, nesting, seen_names = [])
# If we have a top level reference, then we just search for it straight away ignoring the nesting
if name.start_with?("::")
@@ -274,10 +274,11 @@
indexable_paths: T::Array[IndexablePath],
block: T.nilable(T.proc.params(progress: Integer).returns(T::Boolean)),
).void
end
def index_all(indexable_paths: RubyIndexer.configuration.indexables, &block)
+ RBSIndexer.new(self).index_ruby_core
# Calculate how many paths are worth 1% of progress
progress_step = (indexable_paths.length / 100.0).ceil
indexable_paths.each_with_index do |path, index|
if block && index % progress_step == 0
@@ -331,17 +332,17 @@
(parts.length - 1).downto(0).each do |i|
current_name = T.must(parts[0..i]).join("::")
entry = @entries[current_name]&.first
case entry
- when Entry::Alias
+ when Entry::ConstantAlias
target = entry.target
return follow_aliased_namespace("#{target}::#{real_parts.join("::")}", seen_names)
- when Entry::UnresolvedAlias
+ when Entry::UnresolvedConstantAlias
resolved = resolve_alias(entry, seen_names)
- if resolved.is_a?(Entry::UnresolvedAlias)
+ if resolved.is_a?(Entry::UnresolvedConstantAlias)
raise UnresolvableAliasError, "The constant #{resolved.name} is an alias to a non existing constant"
end
target = resolved.target
return follow_aliased_namespace("#{target}::#{real_parts.join("::")}", seen_names)
@@ -436,21 +437,21 @@
# If none of the entries for `name` are namespaces, raise
namespaces = entries.filter_map do |entry|
case entry
when Entry::Namespace
entry
- when Entry::Alias
+ when Entry::ConstantAlias
self[entry.target]&.grep(Entry::Namespace)
end
end.flatten
raise NonExistingNamespaceError,
"None of the entries for #{fully_qualified_name} are modules or classes" if namespaces.empty?
# The original nesting where we discovered this namespace, so that we resolve the correct names of the
# included/prepended/extended modules and parent classes
- nesting = T.must(namespaces.first).nesting
+ nesting = T.must(namespaces.first).nesting.flat_map { |n| n.split("::") }
if nesting.any?
singleton_levels.times do
nesting << "<Class:#{T.must(nesting.last)}>"
end
@@ -655,11 +656,11 @@
resolved_parent_class = resolve(parent_class, nesting)
parent_class_name = resolved_parent_class&.first&.name
if parent_class_name && fully_qualified_name != parent_class_name
- parent_name_parts = [parent_class_name]
+ parent_name_parts = parent_class_name.split("::")
singleton_levels.times do
parent_name_parts << "<Class:#{parent_name_parts.last}>"
end
ancestors.concat(linearized_ancestors_of(parent_name_parts.join("::")))
@@ -695,13 +696,13 @@
# Attempts to resolve an UnresolvedAlias into a resolved Alias. If the unresolved alias is pointing to a constant
# that doesn't exist, then we return the same UnresolvedAlias
sig do
params(
- entry: Entry::UnresolvedAlias,
+ entry: Entry::UnresolvedConstantAlias,
seen_names: T::Array[String],
- ).returns(T.any(Entry::Alias, Entry::UnresolvedAlias))
+ ).returns(T.any(Entry::ConstantAlias, Entry::UnresolvedConstantAlias))
end
def resolve_alias(entry, seen_names)
alias_name = entry.name
return entry if seen_names.include?(alias_name)
@@ -709,11 +710,11 @@
target = resolve(entry.target, entry.nesting, seen_names)
return entry unless target
target_name = T.must(target.first).name
- resolved_alias = Entry::Alias.new(target_name, entry)
+ resolved_alias = Entry::ConstantAlias.new(target_name, entry)
# Replace the UnresolvedAlias by a resolved one so that we don't have to do this again later
original_entries = T.must(@entries[alias_name])
original_entries.delete(entry)
original_entries << resolved_alias
@@ -728,12 +729,12 @@
name: String,
nesting: T::Array[String],
seen_names: T::Array[String],
).returns(T.nilable(T::Array[T.any(
Entry::Namespace,
- Entry::Alias,
- Entry::UnresolvedAlias,
+ Entry::ConstantAlias,
+ Entry::UnresolvedConstantAlias,
)]))
end
def lookup_enclosing_scopes(name, nesting, seen_names)
nesting.length.downto(1).each do |i|
namespace = T.must(nesting[0...i]).join("::")
@@ -757,12 +758,12 @@
name: String,
nesting: T::Array[String],
seen_names: T::Array[String],
).returns(T.nilable(T::Array[T.any(
Entry::Namespace,
- Entry::Alias,
- Entry::UnresolvedAlias,
+ Entry::ConstantAlias,
+ Entry::UnresolvedConstantAlias,
)]))
end
def lookup_ancestor_chain(name, nesting, seen_names)
*nesting_parts, constant_name = build_non_redundant_full_name(name, nesting).split("::")
return if nesting_parts.empty?
@@ -818,23 +819,23 @@
full_name: String,
seen_names: T::Array[String],
).returns(
T.nilable(T::Array[T.any(
Entry::Namespace,
- Entry::Alias,
- Entry::UnresolvedAlias,
+ Entry::ConstantAlias,
+ Entry::UnresolvedConstantAlias,
)]),
)
end
def direct_or_aliased_constant(full_name, seen_names)
entries = @entries[full_name] || @entries[follow_aliased_namespace(full_name)]
T.cast(
- entries&.map { |e| e.is_a?(Entry::UnresolvedAlias) ? resolve_alias(e, seen_names) : e },
+ entries&.map { |e| e.is_a?(Entry::UnresolvedConstantAlias) ? resolve_alias(e, seen_names) : e },
T.nilable(T::Array[T.any(
Entry::Namespace,
- Entry::Alias,
- Entry::UnresolvedAlias,
+ Entry::ConstantAlias,
+ Entry::UnresolvedConstantAlias,
)]),
)
end
# Attempt to resolve a given unresolved method alias. This method returns the resolved alias if we managed to