diff --git a/lib/ruby-lint/constant_loader.rb b/lib/ruby-lint/constant_loader.rb index a0b73fd..4f37e76 100644 --- a/lib/ruby-lint/constant_loader.rb +++ b/lib/ruby-lint/constant_loader.rb @@ -83,8 +83,18 @@ def on_module(node) @module_nesting.push(cp.to_s) end + def after_module(_node) + @module_nesting.pop + end + + def on_class(node) + name, _parent, _body = *node + cp = ConstantPath.new(name) + + @module_nesting.push(cp.to_s) + end - def after_module(node) + def after_class(_node) @module_nesting.pop end diff --git a/spec/ruby-lint/constant_loader_spec.rb b/spec/ruby-lint/constant_loader_spec.rb index e4acf40..e67704d 100644 --- a/spec/ruby-lint/constant_loader_spec.rb +++ b/spec/ruby-lint/constant_loader_spec.rb @@ -85,7 +85,7 @@ end context 'loading scoped constants' do - it 'loads a constant from a scope' do + before do @registry.register('Foo') do |defs| defs.define_constant('Foo') do |klass| klass.inherits(defs.constant_proxy('Object', @registry)) @@ -99,7 +99,9 @@ klass.define_method('hello_bar') end end + end + it 'loads a constant from a module scope' do code = <<-CODE module Foo class Qux @@ -114,5 +116,21 @@ def hello_qux @loader.run([@ast]) @loader.loaded?('Foo::Bar').should == true end + + it 'loads a constant from a class scope' do + code = <<-CODE +class Foo + class Qux + def hello_qux + Bar.hello_bar + end + end +end + CODE + @ast = parse(code) + + @loader.run([@ast]) + @loader.loaded?('Foo::Bar').should == true + end end end