Commit 799caf74 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Move processing of several class tags to Tag classes.

Create ClassListTag base class for processing four tags:

- @mixins
- @alternateClassName
- @requires
- @uses
parent ba968b62
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -43,10 +43,7 @@ module JsDuck
        :tagname => :class,
        :name => detect_name(:class, doc_map),
        :doc => detect_doc(docs),
        :alternateClassNames => detect_list(:alternateClassNames, doc_map),
        :aliases => detect_aliases(doc_map),
        :requires => detect_list(:requires, doc_map),
        :uses => detect_list(:uses, doc_map),
        :enum => detect_enum(doc_map),
        :override => extract(doc_map, :override, :class),
      }, doc_map)
@@ -157,15 +154,6 @@ module JsDuck
      extract(doc_map, tagname, :default)
    end

    # for detecting mixins and alternateClassNames
    def detect_list(type, doc_map)
      if doc_map[type]
        doc_map[type].map {|d| d[type] }.flatten
      else
        nil
      end
    end

    def detect_aliases(doc_map)
      if doc_map[:alias]
        doc_map[:alias].map {|tag| tag[:name] }
+3 −13
Original line number Diff line number Diff line
require "jsduck/tag/tag"
require "jsduck/ast_utils"
require "jsduck/tag/class_list_tag"

module JsDuck::Tag
  class AlternateClassNames < Tag
  class AlternateClassNames < ClassListTag
    def initialize
      @pattern = ["alternateClassName", "alternateClassNames"]
      @key = :alternateClassNames
      @ext_define_pattern = "alternateClassName"
      @ext_define_default = {:alternateClassNames => []}
    end

    # @alternateClassNames classname1 classname2 ...
    def parse(p)
      p.add_tag(:alternateClassNames)
      p.classname_list(:alternateClassNames)
    end

    def parse_ext_define(cls, ast)
      cls[:alternateClassNames] = JsDuck::AstUtils.make_string_list(ast)
    end
  end
end
+28 −0
Original line number Diff line number Diff line
require "jsduck/tag/tag"
require "jsduck/ast_utils"

module JsDuck::Tag
  # Base class for tags like @mixins, @uses, etc
  # Which take the following form:
  #
  #     @tagname classname1 classname2 ...
  #
  # Subclasses need to define the @patterns and @key fields for the
  # #parse and #process_doc methods to work. Plus @ext_define_pattern
  # and @ext_define_default for the #parse_ext_define to work.
  #
  class ClassListTag < Tag
    def parse(p)
      p.add_tag(@key)
      p.classname_list(@key)
    end

    def process_doc(tags)
      tags.map {|d| d[@key] }.flatten
    end

    def parse_ext_define(cls, ast)
      cls[@key] = JsDuck::AstUtils.make_string_list(ast)
    end
  end
end
+4 −12
Original line number Diff line number Diff line
require "jsduck/tag/tag"
require "jsduck/tag/class_list_tag"

module JsDuck::Tag
  class Mixins < Tag
  class Mixins < ClassListTag
    def initialize
      @pattern = ["mixin", "mixins"]
      @key = :mixins
@@ -9,16 +9,8 @@ module JsDuck::Tag
      @ext_define_default = {:mixins => []}
    end

    # @mixins classname1 classname2 ...
    def parse(p)
      p.add_tag(:mixins)
      p.classname_list(:mixins)
    end

    def process_doc(tags)
      tags.map {|d| d[@key] }.flatten
    end

    # Override definition in parent class.  In addition to Array
    # literal, mixins can be defined with an object literal.
    def parse_ext_define(cls, ast)
      cls[:mixins] = to_mixins_array(ast)
    end
+3 −13
Original line number Diff line number Diff line
require "jsduck/tag/tag"
require "jsduck/ast_utils"
require "jsduck/tag/class_list_tag"

module JsDuck::Tag
  class Requires < Tag
  class Requires < ClassListTag
    def initialize
      @pattern = "requires"
      @key = :requires
      @ext_define_pattern = "requires"
      @ext_define_default = {:requires => []}
    end

    # @requires classname1 classname2 ...
    def parse(p)
      p.add_tag(:requires)
      p.classname_list(:requires)
    end

    def parse_ext_define(cls, ast)
      cls[:requires] = JsDuck::AstUtils.make_string_list(ast)
    end
  end
end
Loading