From a3d6e1669e70280590f50f0e4e41a58e1882ec5c Mon Sep 17 00:00:00 2001 From: Rene Saarsoo Date: Mon, 6 Feb 2012 16:36:47 -0800 Subject: [PATCH] Ensure extending Object always yields extends == nil. --- lib/jsduck/merger.rb | 10 ++++--- spec/aggregator_classes_spec.rb | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/lib/jsduck/merger.rb b/lib/jsduck/merger.rb index 171b775c..bfcf5b48 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 2e5f8304..35f8974a 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 -- GitLab