Commit 0270ab77 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Mergeing members after class to the class.

Class member arrays are now named the same as their tagnames.
So we access class configs with  class[:cfg]  rather than with
class[:cfgs]
parent dd691d63
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -12,9 +12,19 @@ module JsDuck
    doc_parser = DocCommentParser.new
    merger = Merger.new
    documentation = []
    current_class = nil

    Parser.new(input).parse.each do |docset|
      documentation << merger.merge(doc_parser.parse(docset[:comment]), docset[:code])
      node = merger.merge(doc_parser.parse(docset[:comment]), docset[:code])
      # all methods, cfgs, ... following a class will be added to that class
      if node[:tagname] == :class
        current_class = node
        documentation << node
      elsif current_class
        current_class[ node[:tagname] ] << node
      else
        documentation << node
      end
    end

    documentation
+4 −1
Original line number Diff line number Diff line
@@ -55,8 +55,11 @@ module JsDuck
    def create_class(docs, code)
      groups = group_class_docs(docs)
      result = create_bare_class(groups[:class], code)
      result[:cfgs] = groups[:cfg].map { |tags| create_cfg(tags, {}) }
      result[:cfg] = groups[:cfg].map { |tags| create_cfg(tags, {}) }
      result[:constructor] = create_method(groups[:constructor], {}) if groups[:constructor].length
      result[:property] = []
      result[:method] = []
      result[:event] = []
      result
    end

+69 −1
Original line number Diff line number Diff line
@@ -311,7 +311,7 @@ MyClass = Ext.extend(Ext.util.Observable, {
    assert_equal("Bar", docs[0][:extends])
    assert_equal("Comment here.", docs[0][:doc])

    cfgs = docs[0][:cfgs]
    cfgs = docs[0][:cfg]
    assert_equal(2, cfgs.length)

    assert_equal(:cfg, cfgs[0][:tagname])
@@ -400,5 +400,73 @@ foo: true,
    end
  end

  def test_member_docs_following_class
    docs = JsDuck.parse("
/**
 * @class
 */
var MyPanel = Ext.extend(Ext.Panel, {
  /**
   * @cfg
   */
  fast: false,
  /**
   * @property
   */
  length: 0,
  /**
   */
  doStuff: function() {
    this.addEvents(
      /**
       * @event
       */
      'touch'
    );
  }
});
")
    assert_equal(:class, docs[0][:tagname])
    assert_equal("MyPanel", docs[0][:name])

    cfgs = docs[0][:cfg]
    assert_equal(1, cfgs.length)
    assert_equal(:cfg, cfgs[0][:tagname])
    assert_equal("fast", cfgs[0][:name])

    props = docs[0][:property]
    assert_equal(1, props.length)
    assert_equal(:property, props[0][:tagname])
    assert_equal("length", props[0][:name])

    methods = docs[0][:method]
    assert_equal(1, methods.length)
    assert_equal(:method, methods[0][:tagname])
    assert_equal("doStuff", methods[0][:name])

    events = docs[0][:event]
    assert_equal(1, events.length)
    assert_equal(:event, events[0][:tagname])
    assert_equal("touch", events[0][:name])
  end

  def test_multiple_classes
    docs = JsDuck.parse("
/**
 * @class
 */
function Foo(){}
/**
 * @class
 */
function Bar(){}
")
    assert_equal(2, docs.length)
    assert_equal(:class, docs[0][:tagname])
    assert_equal("Foo", docs[0][:name])
    assert_equal(:class, docs[1][:tagname])
    assert_equal("Bar", docs[1][:name])
  end

end