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