diff --git a/lib/sord/resolver.rb b/lib/sord/resolver.rb index f7a45d2..323ccfc 100644 --- a/lib/sord/resolver.rb +++ b/lib/sord/resolver.rb @@ -30,7 +30,7 @@ def self.load_gem_objects(hash) end add_rbs_objects_to_paths(env, hash) - gem_paths = Bundler.load.specs.map(&:full_gem_path) + gem_paths = Bundler.load.specs.map(&:full_gem_path) + ["#{Dir.pwd}/sorbet"] gem_paths.each do |path| next unless File.exist?("#{path}/rbi") @@ -70,14 +70,21 @@ def self.add_rbi_objects_to_paths(nodes, names_to_paths, path=[]) klasses = [ Parlour::RbiGenerator::Constant, Parlour::RbiGenerator::ModuleNamespace, - Parlour::RbiGenerator::ClassNamespace + Parlour::RbiGenerator::ClassNamespace, + Parlour::RbiGenerator::Namespace + ] + child_only_classes = [ + Parlour::RbiGenerator::Namespace ] nodes.each do |node| - next unless klasses.include?(node.class) - new_path = path + [node.name] - names_to_paths[node.name] ||= Set.new - names_to_paths[node.name] << new_path.join('::') - add_rbi_objects_to_paths(node.children, names_to_paths, new_path) if node.respond_to?(:children) + if klasses.include?(node.class) + new_path = path + [node.name] + unless child_only_classes.include?(node.class) + names_to_paths[node.name] ||= Set.new + names_to_paths[node.name] << new_path.join('::') + end + add_rbi_objects_to_paths(node.children, names_to_paths, new_path) if node.respond_to?(:children) + end end end diff --git a/sord.gemspec b/sord.gemspec index 0705801..e32df25 100644 --- a/sord.gemspec +++ b/sord.gemspec @@ -25,7 +25,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'yard' spec.add_dependency 'sorbet-runtime' spec.add_dependency 'commander', '~> 4.5' - spec.add_dependency 'parlour', '~> 5.0' + spec.add_dependency 'parlour', '~> 8.0' spec.add_dependency 'rbs', '~> 3.0' spec.add_development_dependency "bundler", "~> 2.0" diff --git a/spec/resolver_spec.rb b/spec/resolver_spec.rb index 8586891..736ce9e 100644 --- a/spec/resolver_spec.rb +++ b/spec/resolver_spec.rb @@ -163,6 +163,6 @@ class B it 'resolves included gem rbi files' do subject.prepare - expect(subject.path_for('Parlour::TypeLoader')).to eq 'Parlour::TypeLoader' + expect(subject.path_for('Parlour::RbiGenerator')).to eq 'Parlour::RbiGenerator' end end