Commit 40486f38 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Rename ClassDocGrouper to ClassDocExpander.

Also refactor the class and have it instanciated when used.
parent 98167cd5
Loading
Loading
Loading
Loading
+31 −9
Original line number Diff line number Diff line
module JsDuck

  # Expands class docset into one or more docsets.
  #
  # The resulting list can contain the following:
  #
  # - the base class docset itself (always present)
  # - configs detected from comment
  # - constructor detected from comment
  # - members detected from code
  #
  class ClassDocExpander

    # Expands class-docset into multiple docsets.
    def expand(docset)
      expand_comment(docset) + expand_code(docset)
    end

    private

    # Handles old syntax where configs and constructor are part of class
    # doc-comment.
  class ClassDocGrouper

    # Takes one docset as input, produces array of one or more docsets
    # as output.
    #
    # Gathers all tags until first @cfg or @constructor into the first
    # bare :class group.  We have a special case for @xtype which in
@@ -17,7 +31,7 @@ module JsDuck
    # configs to be marked with @private or whatever else.
    #
    # Finally gathers tags after @constructor into its group.
    def self.group(docset)
    def expand_comment(docset)
      groups = {
        :class => [],
        :cfg => [],
@@ -47,7 +61,11 @@ module JsDuck
        end
      end

      # Turn groups hash into list of docsets
      groups_to_docsets(groups, docset)
    end

    # Turns groups hash into list of docsets
    def groups_to_docsets(groups, docset)
      results = []
      results << {
        :tagname => :class,
@@ -74,8 +92,13 @@ module JsDuck
          :linenr => docset[:linenr],
        }
      end
      results
    end

      # Turn all auto-detected members into separate docsets
    # Turns auto-detected class members into docsets in their own
    # right.
    def expand_code(docset)
      results = []
      if docset[:code] && docset[:code][:members]
        docset[:code][:members].each do |m|
          results << {
@@ -87,7 +110,6 @@ module JsDuck
          }
        end
      end

      results
    end

+0 −1
Original line number Diff line number Diff line
require 'jsduck/logger'
require 'jsduck/meta_tag_registry'
require 'jsduck/class_doc_grouper'

module JsDuck

+3 −1
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ require 'jsduck/doc_parser'
require 'jsduck/merger'
require 'jsduck/ast'
require 'jsduck/doc_type'
require 'jsduck/class_doc_expander'
require "cgi"

module JsDuck
@@ -26,6 +27,7 @@ module JsDuck
      @links = {}
      @doc_type = DocType.new
      @doc_parser = DocParser.new
      @doc_expander = ClassDocExpander.new

      merger = Merger.new
      merger.filename = @filename
@@ -99,7 +101,7 @@ module JsDuck
          docset[:tagname] = @doc_type.detect(docset[:comment], docset[:code])

          if docset[:tagname] == :class
            ClassDocGrouper.group(docset)
            @doc_expander.expand(docset)
          else
            docset
          end