From 6282582a2a1e8527381a34947a4b426e4c31bb84 Mon Sep 17 00:00:00 2001 From: Rene Saarsoo Date: Tue, 27 Nov 2012 16:45:27 +0200 Subject: [PATCH] Allow for anonymous overrides. That is, allow to use the @override tag without accompaning @class tag to give a name for the override. --- lib/jsduck/doc_type.rb | 3 +-- lib/jsduck/override.rb | 16 ++++++++++++---- spec/aggregator_overrides_spec.rb | 32 +++++++++++++++++++++++++++++-- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/lib/jsduck/doc_type.rb b/lib/jsduck/doc_type.rb index dded4172..5eb1cab4 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 5d207a55..61499e83 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 d35919e0..942028ed 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 -- GitLab