Commit b8706f9b authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Separate treatment for static members.

All static members are now exported in separate "statics" section,
alongside "members" section.

Rendering static members in separate section in class overview
page, and added "static" label to distinguish static members in menus.
parent dd59c168
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -73,19 +73,23 @@ module JsDuck
    def add_member(node)
      if node[:owner]
        if @classes[node[:owner]]
          @classes[node[:owner]][:members][node[:tagname]] << node
          add_to_class(@classes[node[:owner]], node)
        else
          add_orphan(node)
        end
      elsif @current_class
        node[:owner] = @current_class[:name]
        @current_class[:members][ node[:tagname] ] << node
        add_to_class(@current_class, node)
      else
        add_orphan(node)
      end
      @aliases << node if node[:alias]
    end

    def add_to_class(cls, member)
      cls[member[:static] ? :statics : :members][member[:tagname]] << member
    end

    def add_orphan(node)
      @orphans << node
    end
@@ -151,6 +155,7 @@ module JsDuck
        :mixins => [],
        :alternateClassNames => [],
        :members => Class.default_members_hash,
        :statics => Class.default_members_hash,
        :filename => "",
        :html_filename => "",
        :linenr => 0,
+6 −6
Original line number Diff line number Diff line
@@ -71,8 +71,8 @@ module JsDuck
    # For methods the the constructor is listed first.
    #
    # See members_hash for details.
    def members(type)
      ms = members_hash(type).values.sort {|a,b| a[:name] <=> b[:name] }
    def members(type, context=:members)
      ms = members_hash(type, context).values.sort {|a,b| a[:name] <=> b[:name] }
      type == :method ? constructor_first(ms) : ms
    end

@@ -93,14 +93,14 @@ module JsDuck
    #
    # When parent and child have members with same name,
    # member from child overrides tha parent member.
    def members_hash(type)
      all_members = parent ? parent.members_hash(type) : {}
    def members_hash(type, context=:members)
      all_members = parent ? parent.members_hash(type, context) : {}

      mixins.each do |mix|
        all_members.merge!(mix.members_hash(type))
        all_members.merge!(mix.members_hash(type, context))
      end

      (@doc[:members][type] || []).each do |m|
      (@doc[context][type] || []).each do |m|
        all_members[m[:name]] = m if !m[:private]
      end

+8 −8
Original line number Diff line number Diff line
@@ -17,14 +17,11 @@ module JsDuck
    # Returns all data in Class object as hash.
    def export(cls)
      h = cls.to_hash
      h[:members] = {
        :cfg => cls.members(:cfg),
        :property => cls.members(:property),
        :method => cls.members(:method),
        :event => cls.members(:event),
        :cssVar => cls.members(:css_var),
        :cssMixin => cls.members(:css_mixin),
      }
      h[:members] = {}
      Class.default_members_hash.each_key do |key|
        h[:members][key] = cls.members(key)
        h[:statics][key] = cls.members(key, :statics)
      end
      h[:component] = cls.inherits_from?("Ext.Component")
      h[:superclasses] = cls.superclasses.collect {|c| c.full_name }
      h[:subclasses] = @relations.subclasses(cls).collect {|c| c.full_name }
@@ -41,6 +38,9 @@ module JsDuck
      c[:members].each_pair do |type, members|
        c[:members][type] = members.map {|m| format_member(m) }
      end
      c[:statics].each_pair do |type, members|
        c[:statics][type] = members.map {|m| format_member(m) }
      end
      c
    end

+1 −0
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ module JsDuck
      groups = group_class_docs(docs)
      result = create_bare_class(groups[:class], code)
      result[:members] = create_class_members(groups, result[:name])
      result[:statics] = Class.default_members_hash
      result
    end

+0 −16
Original line number Diff line number Diff line
@@ -231,22 +231,6 @@ describe JsDuck::Aggregator do
    it_should_behave_like "cfg or property String type"
  end

  describe "property with @static" do
    before do
      @doc = parse(<<-EOS)[0]
        /**
         * @property
         * @static
         */
        foo: "",
      EOS
    end
    it_should_behave_like "property"
    it "detects property as static" do
      @doc[:static].should == true
    end
  end

  describe "comma-first style" do
    before do
      @doc = parse(<<-EOS)[0]
Loading