diff --git a/lib/jsduck/doc_type.rb b/lib/jsduck/doc_type.rb index dded417265a43ecdb29b8d9d3a10394792174ca2..5eb1cab4c49e8cc38de482a2565575d28a06baff 100644 --- a/lib/jsduck/doc_type.rb +++ b/lib/jsduck/doc_type.rb @@ -12,7 +12,7 @@ module JsDuck def detect(docs, code) doc_map = build_doc_map(docs) - if doc_map[:class] + if doc_map[:class] || doc_map[:override] :class elsif doc_map[:event] :event @@ -57,4 +57,3 @@ module JsDuck end end - diff --git a/lib/jsduck/override.rb b/lib/jsduck/override.rb index 5d207a559771a01788b625f3cf955be015c6e68b..61499e83799dc3b695b82b2a31f19999278f18af 100644 --- a/lib/jsduck/override.rb +++ b/lib/jsduck/override.rb @@ -32,7 +32,7 @@ module JsDuck # Combine comments of classes if override[:doc].length > 0 - add_doc(target, "**From override #{override[:name]}:** " + override[:doc]) + add_doc(target, "**From override #{get_name(override)}:** " + override[:doc]) end target[:files] += override[:files] @@ -48,14 +48,14 @@ module JsDuck ex = existing[m[:id]] if ex if m[:doc].length > 0 - add_doc(ex, "**From override #{override[:name]}:** " + m[:doc]) + add_doc(ex, "**From override #{get_name(override)}:** " + m[:doc]) else - add_doc(ex, "**Overridden in #{override[:name]}.**") + add_doc(ex, "**Overridden in #{get_name(override)}.**") end ex[:files] += m[:files] else add_member(target, m) - add_doc(m, "**Defined in override #{override[:name]}.**") + add_doc(m, "**Defined in override #{get_name(override)}.**") m[:owner] = target[:name] end end @@ -63,6 +63,14 @@ module JsDuck # helpers + def get_name(override) + if override[:name] != "" + override[:name] + else + override[:files][0][:filename] + end + end + def each_member(cls) cls[:members].each {|m| yield m } end diff --git a/spec/aggregator_overrides_spec.rb b/spec/aggregator_overrides_spec.rb index d35919e0a0dca9c43ce7bb42543fcc8c4dd492ed..942028edb4fb5449daab8fcc460549e800cf17ae 100644 --- a/spec/aggregator_overrides_spec.rb +++ b/spec/aggregator_overrides_spec.rb @@ -6,7 +6,7 @@ require "jsduck/relations" describe JsDuck::Aggregator do def parse(string) agr = JsDuck::Aggregator.new - agr.aggregate(JsDuck::Source::File.new(string)) + agr.aggregate(JsDuck::Source::File.new(string, "blah.js")) agr.process_overrides JsDuck::Relations.new(agr.result.map {|cls| JsDuck::Class.new(cls) }) end @@ -229,5 +229,33 @@ describe JsDuck::Aggregator do methods["foobar"][:doc].should == "**Overridden in FooOverride.**" end end -end + describe "use of @override tag without @class" do + let(:classes) do + parse(<<-EOF) + /** */ + Ext.define("Foo", { + foobar: function(){} + }); + + /** @override Foo */ + Ext.apply(Foo.prototype, { + /** */ + 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 blah.js.**" + end + end +end