Commit 4f49d4e0 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Implement merging of @extends inside Tag class.

parent 1f3fe6df
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
require 'jsduck/class'
require 'jsduck/tag_registry'

module JsDuck

@@ -40,9 +41,6 @@ module JsDuck
        :singleton => false,
      })

      # Ignore extending of the Object class
      h[:extends] = nil if h[:extends] == "Object"

      h[:aliases] = build_aliases_hash(h[:aliases] || [])

      # Used by Aggregator to determine if we're dealing with Ext4 code
@@ -52,6 +50,10 @@ module JsDuck

      h[:members] = []

      TagRegistry.mergers(:class).each do |tag|
        tag.merge(h, docs, code)
      end

      h
    end

+7 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ module JsDuck::Tag
      @key = :extends
      @ext_define_pattern = "extend"
      @ext_define_default = {:extends => "Ext.Base"}
      @merge_context = :class
    end

    # @extends classname
@@ -25,5 +26,11 @@ module JsDuck::Tag
    def parse_ext_define(cls, ast)
      cls[:extends] = JsDuck::Js::Utils.make_string(ast)
    end

    # Ignore extending of the Object class
    def merge(h, docs, code)
      h[:extends] = docs[:extends] || code[:extends]
      h[:extends] = nil if h[:extends] == "Object"
    end
  end
end
+12 −0
Original line number Diff line number Diff line
@@ -69,6 +69,18 @@ module JsDuck::Tag
    def parse_ext_define(cls, ast)
    end

    # In the context of which members or classes invoke the #merge
    # method.  Possible values are:
    #
    # - :class
    # - :member
    #
    attr_reader :merge_context

    # Merges documentation and code hashes into the result hash.
    def merge(hash, docs, code)
    end

    # Whether to render the tag before other content (:top) or after
    # it (:bottom).  Must be defined together with #to_html method.
    attr_accessor :html_position
+10 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ module JsDuck
      @ext_define_patterns = {}
      @ext_define_defaults = {}
      @keys = {}
      @mergers = {:class => [], :member => []}
      @signatures = []
      @html_renderers = {:top => [], :bottom => []}
      @member_types = []
@@ -41,6 +42,9 @@ module JsDuck
        if tag.key
          @keys[tag.key] = tag
        end
        if tag.merge_context
          @mergers[tag.merge_context] << tag
        end
        if tag.member_type
          @member_types << tag.member_type
        end
@@ -78,6 +82,12 @@ module JsDuck
      @member_type_regex = Regexp.new("(?:(" + TagRegistry.member_types.join("|") + ")-)")
    end

    # Returns tags for doing the merging in a particular context.
    # See Tag::Tag#merge_context for details.
    def mergers(context)
      @mergers[context] || []
    end

    # Returns tags for rendering HTML.  One can ask for tags for
    # rendering either :top or :bottom section.  By default renderers
    # for both sections are returned.