Commit 6282582a authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Allow for anonymous overrides.

That is, allow to use the @override tag without accompaning @class
tag to give a name for the override.
parent 83cc1b88
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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
+12 −4
Original line number Diff line number Diff line
@@ -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
+30 −2
Original line number Diff line number Diff line
@@ -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

  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