Commit 1cbe1c4b authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Fix recursive @inheritdoc logic.

Converting auto-detected properties into configs didn't work in
case where the config was in grandparent.
parent b04bde66
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ module JsDuck
          new_cfgs = []
          cls.all_local_members.each do |member|
            if member[:inheritdoc]
              resolve(member, new_cfgs)
              resolve(cls, member, new_cfgs)
            end
          end
          move_cfgs(cls, new_cfgs) if new_cfgs.length > 0
@@ -28,10 +28,10 @@ module JsDuck
      private

      # Copy over doc/params/return from parent member.
      def resolve(m, new_cfgs)
      def resolve(cls, m, new_cfgs)
        parent = find_parent(m)
        if parent && parent[:inheritdoc]
          resolve(parent, new_cfgs)
          resolve_parent(cls, parent)
        end

        if m[:inheritdoc] && parent
@@ -52,6 +52,12 @@ module JsDuck
        m[:inheritdoc] = nil
      end

      def resolve_parent(cls, parent)
        new_cfgs = []
        resolve(cls, parent, new_cfgs)
        move_cfgs(cls, new_cfgs) if new_cfgs.length > 0
      end

      def inherit(m, parent)
        m[:doc] = parent[:doc] if m[:doc].empty?

+35 −0
Original line number Diff line number Diff line
@@ -73,4 +73,39 @@ describe JsDuck::Aggregator do
    end
  end

  describe "auto-detected property overriding config in grandparent" do
    let(:classes) do
      # The classes are ordered from child to excercise the code that
      # ensure we inherit parent docs before inheriting the child docs
      # from it.
      parse(<<-EOS)
        /** */
        Ext.define("Child", {
            extend: "Parent",
            blah: 8
        });

        /** */
        Ext.define("Parent", {
            extend: "GrandParent",
            blah: 7
        });

        /** */
        Ext.define("GrandParent", {
            /** @cfg */
            blah: 7
        });
      EOS
    end

    it "detects a config in child" do
      classes["Child"][:members][0][:tagname].should == :cfg
    end

    it "detects a config in parent" do
      classes["Parent"][:members][0][:tagname].should == :cfg
    end
  end

end