Loading lib/jsduck.rb +11 −1 Original line number Diff line number Diff line Loading @@ -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 Loading lib/jsduck/merger.rb +4 −1 Original line number Diff line number Diff line Loading @@ -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 Loading test/tc_jsduck.rb +69 −1 Original line number Diff line number Diff line Loading @@ -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]) Loading Loading @@ -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 Loading
lib/jsduck.rb +11 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
lib/jsduck/merger.rb +4 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
test/tc_jsduck.rb +69 −1 Original line number Diff line number Diff line Loading @@ -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]) Loading Loading @@ -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