Loading jsduck.rb +19 −9 Original line number Diff line number Diff line Loading @@ -101,13 +101,18 @@ module JsDuck end # Sets the name property of the default at-tag. # When name begins with uppercase it's considered to be class name, # otherwise a function name. def set_default_name(name) # # When name begins with uppercase it's considered to be class # name, otherwise a function name. # # When the name consists of several parts like foo.bar.baz, then # the parts should be passed as multiple arguments. def set_default_name(*name_chain) name = name_chain.last tagname = (name[0,1] == name[0,1].upcase) ? :class : :function if !@tags[:class] && !@tags[:function] then @tags[tagname] = {:name => name} @tags[tagname] = {:name => (tagname == :function) ? name : name_chain.join(".")} @tags[tagname][:doc] = @tags[:default][:doc] end end Loading Loading @@ -176,7 +181,7 @@ module JsDuck @current_tag = @tags[:class] = {:doc => ""} skip_white if look(/\w/) then @current_tag[:name] = ident @current_tag[:name] = ident_chain end skip_white end Loading @@ -190,7 +195,7 @@ module JsDuck @current_tag = @tags[:class] skip_white if look(/\w/) then @current_tag[:extends] = ident @current_tag[:extends] = ident_chain end skip_white end Loading Loading @@ -245,6 +250,11 @@ module JsDuck return name end # matches chained.identifier.name and returns it def ident_chain @input.scan(/[\w.]+/) end # matches identifier and returns its name def ident @input.scan(/\w+/) Loading Loading @@ -298,12 +308,12 @@ module JsDuck doc.set_default_params(parse_anonymous_function_params) elsif @lex.look(:ident, ".") then # some.long.prototype.chain = function() { @lex.next name_chain = [@lex.next] while @lex.look(".", :ident) do @lex.next name = @lex.next name_chain << @lex.next if @lex.look("=", "function") then doc.set_default_name(name) doc.set_default_name(*name_chain) @lex.next # = doc.set_default_params(parse_anonymous_function_params) end Loading tc_jsduck.rb +15 −4 Original line number Diff line number Diff line Loading @@ -205,12 +205,12 @@ function f(foo, bar){} def test_explicit_class_name docs = JsDuck.parse(" /** * @class Foo * @class my.package.Foo * My class */ function Bar(){} ") assert_equal("Foo", docs[0][:class][:name]) assert_equal("my.package.Foo", docs[0][:class][:name]) assert_equal("My class", docs[0][:class][:doc]) end Loading @@ -225,16 +225,27 @@ function Foo(){} assert_equal("My class", docs[0][:class][:doc]) end def test_uppercase_name_at_chain_end_implies_class_name docs = JsDuck.parse(" /** * My class */ some.namespace.ClassName = function(){} ") assert_equal("some.namespace.ClassName", docs[0][:class][:name]) assert_equal("My class", docs[0][:class][:doc]) end def test_explicit_extends docs = JsDuck.parse(" /** * @class Foo * @extends Bar * @extends some.namespace.Bar * My class */ ") assert_equal("Foo", docs[0][:class][:name]) assert_equal("Bar", docs[0][:class][:extends]) assert_equal("some.namespace.Bar", docs[0][:class][:extends]) assert_equal("My class", docs[0][:class][:doc]) end Loading Loading
jsduck.rb +19 −9 Original line number Diff line number Diff line Loading @@ -101,13 +101,18 @@ module JsDuck end # Sets the name property of the default at-tag. # When name begins with uppercase it's considered to be class name, # otherwise a function name. def set_default_name(name) # # When name begins with uppercase it's considered to be class # name, otherwise a function name. # # When the name consists of several parts like foo.bar.baz, then # the parts should be passed as multiple arguments. def set_default_name(*name_chain) name = name_chain.last tagname = (name[0,1] == name[0,1].upcase) ? :class : :function if !@tags[:class] && !@tags[:function] then @tags[tagname] = {:name => name} @tags[tagname] = {:name => (tagname == :function) ? name : name_chain.join(".")} @tags[tagname][:doc] = @tags[:default][:doc] end end Loading Loading @@ -176,7 +181,7 @@ module JsDuck @current_tag = @tags[:class] = {:doc => ""} skip_white if look(/\w/) then @current_tag[:name] = ident @current_tag[:name] = ident_chain end skip_white end Loading @@ -190,7 +195,7 @@ module JsDuck @current_tag = @tags[:class] skip_white if look(/\w/) then @current_tag[:extends] = ident @current_tag[:extends] = ident_chain end skip_white end Loading Loading @@ -245,6 +250,11 @@ module JsDuck return name end # matches chained.identifier.name and returns it def ident_chain @input.scan(/[\w.]+/) end # matches identifier and returns its name def ident @input.scan(/\w+/) Loading Loading @@ -298,12 +308,12 @@ module JsDuck doc.set_default_params(parse_anonymous_function_params) elsif @lex.look(:ident, ".") then # some.long.prototype.chain = function() { @lex.next name_chain = [@lex.next] while @lex.look(".", :ident) do @lex.next name = @lex.next name_chain << @lex.next if @lex.look("=", "function") then doc.set_default_name(name) doc.set_default_name(*name_chain) @lex.next # = doc.set_default_params(parse_anonymous_function_params) end Loading
tc_jsduck.rb +15 −4 Original line number Diff line number Diff line Loading @@ -205,12 +205,12 @@ function f(foo, bar){} def test_explicit_class_name docs = JsDuck.parse(" /** * @class Foo * @class my.package.Foo * My class */ function Bar(){} ") assert_equal("Foo", docs[0][:class][:name]) assert_equal("my.package.Foo", docs[0][:class][:name]) assert_equal("My class", docs[0][:class][:doc]) end Loading @@ -225,16 +225,27 @@ function Foo(){} assert_equal("My class", docs[0][:class][:doc]) end def test_uppercase_name_at_chain_end_implies_class_name docs = JsDuck.parse(" /** * My class */ some.namespace.ClassName = function(){} ") assert_equal("some.namespace.ClassName", docs[0][:class][:name]) assert_equal("My class", docs[0][:class][:doc]) end def test_explicit_extends docs = JsDuck.parse(" /** * @class Foo * @extends Bar * @extends some.namespace.Bar * My class */ ") assert_equal("Foo", docs[0][:class][:name]) assert_equal("Bar", docs[0][:class][:extends]) assert_equal("some.namespace.Bar", docs[0][:class][:extends]) assert_equal("My class", docs[0][:class][:doc]) end Loading