Commit 9be0542f authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Support for detecting override: in Ext.define.

parent 53d7469a
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -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"
@@ -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)
+8 −4
Original line number Diff line number Diff line
@@ -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]

@@ -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
@@ -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
+28 −0
Original line number Diff line number Diff line
@@ -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