Loading lib/jsduck/ast.rb +4 −2 Original line number Diff line number Diff line Loading @@ -230,7 +230,9 @@ module JsDuck each_pair_in_object_expression(ast["arguments"][1]) do |key, value, pair| case key when "extend" cls[:extends] = make_extends(value) cls[:extends] = make_string(value) when "override" cls[:override] = make_string(value) when "requires" cls[:requires] = make_string_list(value) when "uses" Loading Loading @@ -288,7 +290,7 @@ module JsDuck end end def make_extends(cfg_value) def make_string(cfg_value) return nil unless cfg_value parent = to_value(cfg_value) Loading lib/jsduck/override.rb +8 −4 Original line number Diff line number Diff line Loading @@ -36,7 +36,7 @@ module JsDuck # Combine comments of classes if override[:doc].length > 0 target[:doc] += "\n\n**From override #{override[:name]}:** " + override[:doc] add_doc(target, "**From override #{override[:name]}:** " + override[:doc]) end target[:files] += override[:files] Loading @@ -52,14 +52,14 @@ module JsDuck ex = existing[m[:id]] if ex if m[:doc].length > 0 ex[:doc] += "\n\n**From override #{override[:name]}:** " + m[:doc] add_doc(ex, "**From override #{override[:name]}:** " + m[:doc]) else ex[:doc] += "\n\n**Overridden in #{override[:name]}.**" add_doc(ex, "**Overridden in #{override[:name]}.**") end ex[:files] += m[:files] else add_member(target, m) m[:doc] += "\n\n**Defined in override #{override[:name]}.**" add_doc(m, "**Defined in override #{override[:name]}.**") end end end Loading @@ -77,6 +77,10 @@ module JsDuck def add_member(cls, m) cls[m[:static] ? :statics : :members][m[:tagname]] << m end def add_doc(m, doc) m[:doc] = (m[:doc] + "\n\n" + doc).strip end end end spec/aggregator_overrides_spec.rb +28 −0 Original line number Diff line number Diff line Loading @@ -193,5 +193,33 @@ describe JsDuck::Aggregator do methods["foobar"][:doc].should == "Original comment.\n\n**Overridden in FooOverride.**" end end describe "auto-detected override: in Ext.define" do let(:classes) do parse(<<-EOF) /** */ Ext.define("Foo", { foobar: function(){} }); /** */ Ext.define("FooOverride", { override: "Foo", bar: function(){}, foobar: function(){ return true; } }); EOF end let(:methods) { create_members_map(classes["Foo"]) } it "adds member to overridden class" do methods["bar"].should_not == nil end it "adds note to docs about member being overridden" do methods["foobar"][:doc].should == "**Overridden in FooOverride.**" end end end Loading
lib/jsduck/ast.rb +4 −2 Original line number Diff line number Diff line Loading @@ -230,7 +230,9 @@ module JsDuck each_pair_in_object_expression(ast["arguments"][1]) do |key, value, pair| case key when "extend" cls[:extends] = make_extends(value) cls[:extends] = make_string(value) when "override" cls[:override] = make_string(value) when "requires" cls[:requires] = make_string_list(value) when "uses" Loading Loading @@ -288,7 +290,7 @@ module JsDuck end end def make_extends(cfg_value) def make_string(cfg_value) return nil unless cfg_value parent = to_value(cfg_value) Loading
lib/jsduck/override.rb +8 −4 Original line number Diff line number Diff line Loading @@ -36,7 +36,7 @@ module JsDuck # Combine comments of classes if override[:doc].length > 0 target[:doc] += "\n\n**From override #{override[:name]}:** " + override[:doc] add_doc(target, "**From override #{override[:name]}:** " + override[:doc]) end target[:files] += override[:files] Loading @@ -52,14 +52,14 @@ module JsDuck ex = existing[m[:id]] if ex if m[:doc].length > 0 ex[:doc] += "\n\n**From override #{override[:name]}:** " + m[:doc] add_doc(ex, "**From override #{override[:name]}:** " + m[:doc]) else ex[:doc] += "\n\n**Overridden in #{override[:name]}.**" add_doc(ex, "**Overridden in #{override[:name]}.**") end ex[:files] += m[:files] else add_member(target, m) m[:doc] += "\n\n**Defined in override #{override[:name]}.**" add_doc(m, "**Defined in override #{override[:name]}.**") end end end Loading @@ -77,6 +77,10 @@ module JsDuck def add_member(cls, m) cls[m[:static] ? :statics : :members][m[:tagname]] << m end def add_doc(m, doc) m[:doc] = (m[:doc] + "\n\n" + doc).strip end end end
spec/aggregator_overrides_spec.rb +28 −0 Original line number Diff line number Diff line Loading @@ -193,5 +193,33 @@ describe JsDuck::Aggregator do methods["foobar"][:doc].should == "Original comment.\n\n**Overridden in FooOverride.**" end end describe "auto-detected override: in Ext.define" do let(:classes) do parse(<<-EOF) /** */ Ext.define("Foo", { foobar: function(){} }); /** */ Ext.define("FooOverride", { override: "Foo", bar: function(){}, foobar: function(){ return true; } }); EOF end let(:methods) { create_members_map(classes["Foo"]) } it "adds member to overridden class" do methods["bar"].should_not == nil end it "adds note to docs about member being overridden" do methods["foobar"][:doc].should == "**Overridden in FooOverride.**" end end end