Commit 7600bc80 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Store all class members inside :members sub-hash.

Instead of putting them directly to class hash, we create a sub-hash
for members.  This way we don't have to list all the member types
in every place where we want to loop over all the types - we just
loop over the :members hash.

Additionally it will make easier in the future to add a separate
group of static members.
parent 685f559d
Loading
Loading
Loading
Loading
+9 −12
Original line number Diff line number Diff line
require 'jsduck/class'

module JsDuck

  # Combines JavaScript Parser, DocParser and Merger.
@@ -56,7 +58,7 @@ module JsDuck
        old[tag] = old[tag] + new[tag]
      end
      old[:doc] = old[:doc].length > 0 ? old[:doc] : new[:doc]
      old[:cfg] = old[:cfg] + new[:cfg]
      old[:members][:cfg] = old[:members][:cfg] + new[:members][:cfg]
    end

    # Tries to place members into classes where they belong.
@@ -71,13 +73,13 @@ module JsDuck
    def add_member(node)
      if node[:owner]
        if @classes[node[:owner]]
          @classes[node[:owner]][node[:tagname]] << node
          @classes[node[:owner]][:members][node[:tagname]] << node
        else
          add_orphan(node)
        end
      elsif @current_class
        node[:owner] = @current_class[:name]
        @current_class[ node[:tagname] ] << node
        @current_class[:members][ node[:tagname] ] << node
      else
        add_orphan(node)
      end
@@ -92,7 +94,7 @@ module JsDuck
    def insert_orphans(cls)
      members = @orphans.find_all {|node| node[:owner] == cls[:name] }
      members.each do |node|
        cls[node[:tagname]] << node
        cls[:members][node[:tagname]] << node
        @orphans.delete(node)
      end
    end
@@ -125,7 +127,7 @@ module JsDuck

    def get_member(cls_name, member_name)
      cls = @classes[cls_name]
      return cls[:method].find {|m| m[:name] == member_name }
      return cls[:members][:method].find {|m| m[:name] == member_name }
    end

    # Creates class with name "global" and inserts all the remaining
@@ -148,12 +150,7 @@ module JsDuck
        :doc => doc,
        :mixins => [],
        :alternateClassNames => [],
        :cfg => [],
        :property => [],
        :method => [],
        :event => [],
        :css_var => [],
        :css_mixin => [],
        :members => Class.default_members_hash,
        :filename => "",
        :html_filename => "",
        :linenr => 0,
@@ -169,7 +166,7 @@ module JsDuck
        :doc => "The options object passed to {@link Ext.util.Observable#addListener}."
      }
      @classes.each_value do |cls|
        cls[:event].each {|e| e[:params] << options }
        cls[:members][:event].each {|e| e[:params] << options }
      end
    end

+3 −3
Original line number Diff line number Diff line
@@ -150,7 +150,7 @@ module JsDuck
    def warn_globals(relations)
      global = relations["global"]
      return unless global
      [:cfg, :property, :method, :event].each do |type|
      global[:members].each_key do |type|
        global.members(type).each do |member|
          name = member[:name]
          file = member[:filename]
@@ -163,8 +163,8 @@ module JsDuck
    # print warning for each member with no name
    def warn_unnamed(relations)
      relations.each do |cls|
        [:cfg, :property, :method, :event].each do |type|
          cls[type].each do |member|
        cls[:members].each_pair do |type, members|
          members.each do |member|
            if !member[:name] || member[:name] == ""
              file = member[:filename]
              line = member[:linenr]
+14 −2
Original line number Diff line number Diff line
@@ -105,7 +105,7 @@ module JsDuck
        all_members.merge!(mix.members_hash(type))
      end

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

@@ -119,7 +119,7 @@ module JsDuck
      # build hash of all members
      unless @type_map
        @type_map = {}
        [:cfg, :property, :method, :event, :css_var, :css_mixin].each do |type|
        @doc[:members].each_key do |type|
          @type_map.merge!(members_hash(type))
        end
      end
@@ -170,6 +170,18 @@ module JsDuck
      end
      short
    end

    # Returns default hash that has empty array for each member type
    def self.default_members_hash
      return {
        :cfg => [],
        :property => [],
        :method => [],
        :event => [],
        :css_var => [],
        :css_mixin => [],
      }
    end
  end

end
+10 −10
Original line number Diff line number Diff line
@@ -17,14 +17,14 @@ module JsDuck
    # Returns all data in Class object as hash.
    def export(cls)
      h = cls.to_hash
      h[:cfg] = cls.members(:cfg)
      h[:property] = cls.members(:property)
      h[:method] = cls.members(:method)
      h[:event] = cls.members(:event)
      h[:cssVar] = cls.members(:css_var)
      h.delete(:css_var)
      h[:cssMixin] = cls.members(:css_mixin)
      h.delete(:css_mixin)
      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[: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 }
@@ -38,8 +38,8 @@ module JsDuck
      @formatter.class_context = c[:name]
      @formatter.doc_context = c
      c[:doc] = @formatter.format(c[:doc]) if c[:doc]
      [:cfg, :property, :method, :event, :cssVar, :cssMixin].each do |type|
        c[type] = c[type].map {|m| format_member(m) }
      c[:members].each_pair do |type, members|
        c[:members][type] = members.map {|m| format_member(m) }
      end
      c
    end
+12 −11
Original line number Diff line number Diff line
@@ -66,17 +66,7 @@ module JsDuck
    def create_class(docs, code)
      groups = group_class_docs(docs)
      result = create_bare_class(groups[:class], code)
      result[:cfg] = groups[:cfg].map { |tags| create_cfg(tags, {}, result[:name]) }
      result[:method] = []
      if groups[:constructor].length > 0
        constr = create_method(groups[:constructor], {})
        constr[:owner] = result[:name]
        result[:method] << constr
      end
      result[:property] = []
      result[:event] = []
      result[:css_var] = []
      result[:css_mixin] = []
      result[:members] = create_class_members(groups, result[:name])
      result
    end

@@ -128,6 +118,17 @@ module JsDuck
      }, doc_map)
    end

    def create_class_members(groups, owner)
      members = Class.default_members_hash
      members[:cfg] = groups[:cfg].map { |tags| create_cfg(tags, {}, owner) }
      if groups[:constructor].length > 0
        constr = create_method(groups[:constructor], {})
        constr[:owner] = owner
        members[:method] << constr
      end
      members
    end

    def create_method(docs, code)
      doc_map = build_doc_map(docs)
      name = detect_name(:method, doc_map, code)
Loading