diff --git a/lib/jsduck/merger.rb b/lib/jsduck/merger.rb index 171b775c60505eae4318bcdff4645f43a9b8a673..bfcf5b484526f288bae529452ac6a59d9767a0a8 100644 --- a/lib/jsduck/merger.rb +++ b/lib/jsduck/merger.rb @@ -290,14 +290,16 @@ module JsDuck def detect_extends(doc_map, code) if doc_map[:extends] cls = doc_map[:extends].first[:extends] - # Ignore extending of the Object class - cls == "Object" ? nil : cls elsif code[:type] == :assignment && code[:right] && code[:right][:type] == :ext_extend - code[:right][:extend].join(".") + cls = code[:right][:extend].join(".") elsif code[:type] == :ext_define # Classes defined with Ext.define will automatically inherit from Ext.Base - code[:extend] || "Ext.Base" + cls = code[:extend] || "Ext.Base" + else + cls = nil end + # Ignore extending of the Object class + cls == "Object" ? nil : cls end def detect_default(tagname, doc_map, code) diff --git a/spec/aggregator_classes_spec.rb b/spec/aggregator_classes_spec.rb index 2e5f8304a555ba153bc48e4eab116ff5057108d4..35f8974abbc69ccfe5d026257cdf223354680c9a 100644 --- a/spec/aggregator_classes_spec.rb +++ b/spec/aggregator_classes_spec.rb @@ -548,4 +548,52 @@ describe JsDuck::Aggregator do @classes.length.should == 1 end end + + + shared_examples_for "extending Object" do + it "has extends == nil" do + @doc[:extends].should == nil + end + end + + describe "Class explicitly extending Object" do + before do + @doc = parse(<<-EOS)[0] + /** + * @class Foo + * @extends Object + */ + EOS + end + it_should_behave_like "extending Object" + end + + describe "Ext.define extending Object" do + before do + @doc = parse(<<-EOS)[0] + /** */ + Ext.define("Foo", {extend: "Object"}); + EOS + end + it_should_behave_like "extending Object" + end + + describe "Ext.extend extending Object" do + before do + @doc = parse(<<-EOS)[0] + /** */ + Foo = Ext.extend(Object, { }); + EOS + end + it_should_behave_like "extending Object" + end + + describe "Explicit class without @extends" do + before do + @doc = parse(<<-EOS)[0] + /** @class Foo */ + EOS + end + it_should_behave_like "extending Object" + end end