Loading jsduck.rb +66 −56 Original line number Diff line number Diff line Loading @@ -235,65 +235,69 @@ module JsDuck end def JsDuck.parse(input) lex = Lexer.new(input) docs = [] while !lex.empty? do if lex.look(:doc_comment) then doc = lex.next if lex.look("function", :ident) then lex.next class Parser def initialize(input) @lex = Lexer.new(input) @docs = [] end def parse while !@lex.empty? do if @lex.look(:doc_comment) then doc = @lex.next if @lex.look("function", :ident) then @lex.next # function name(){ doc.set_default(:function, {:name => lex.next}) doc.set_default_params(parse_params(lex)) elsif lex.look("var", :ident, "=", "function") then lex.next doc.set_default(:function, {:name => @lex.next}) doc.set_default_params(parse_params) elsif @lex.look("var", :ident, "=", "function") then @lex.next # var name = function(){ doc.set_default(:function, {:name => lex.next}) lex.next # = lex.next # function lex.next if lex.look(:ident) # optional anonymous function name doc.set_default_params(parse_params(lex)) elsif lex.look(:ident, "=", "function") || lex.look(:ident, ":", "function") || lex.look(:string, ":", "function") then doc.set_default(:function, {:name => @lex.next}) @lex.next # = @lex.next # function @lex.next if @lex.look(:ident) # optional anonymous function name doc.set_default_params(parse_params) elsif @lex.look(:ident, "=", "function") || @lex.look(:ident, ":", "function") || @lex.look(:string, ":", "function") then # name: function(){ doc.set_default(:function, {:name => lex.next}) lex.next # : or = lex.next # function lex.next if lex.look(:ident) # optional anonymous function name doc.set_default_params(parse_params(lex)) elsif lex.look(:ident, ".") then doc.set_default(:function, {:name => @lex.next}) @lex.next # : or = @lex.next # function @lex.next if @lex.look(:ident) # optional anonymous function name doc.set_default_params(parse_params) elsif @lex.look(:ident, ".") then # some.long.prototype.chain = function() { lex.next while lex.look(".", :ident) do lex.next name = lex.next if lex.look("=", "function") then @lex.next while @lex.look(".", :ident) do @lex.next name = @lex.next if @lex.look("=", "function") then doc.set_default(:function, {:name => name}) lex.next # = lex.next # function lex.next if lex.look(:ident) # optional anonymous function name doc.set_default_params(parse_params(lex)) @lex.next # = @lex.next # function @lex.next if @lex.look(:ident) # optional anonymous function name doc.set_default_params(parse_params) end end end docs << doc @docs << doc else lex.next @lex.next end end return docs @docs end def JsDuck.parse_params(lex) def parse_params params = [] if lex.look("(") then lex.next while lex.look(:ident) do params << {:name => lex.next} if lex.look(",") then lex.next if @lex.look("(") then @lex.next while @lex.look(:ident) do params << {:name => @lex.next} if @lex.look(",") then @lex.next else break end Loading @@ -301,6 +305,12 @@ module JsDuck end params end end def JsDuck.parse(input) Parser.new(input).parse end end Loading Loading
jsduck.rb +66 −56 Original line number Diff line number Diff line Loading @@ -235,65 +235,69 @@ module JsDuck end def JsDuck.parse(input) lex = Lexer.new(input) docs = [] while !lex.empty? do if lex.look(:doc_comment) then doc = lex.next if lex.look("function", :ident) then lex.next class Parser def initialize(input) @lex = Lexer.new(input) @docs = [] end def parse while !@lex.empty? do if @lex.look(:doc_comment) then doc = @lex.next if @lex.look("function", :ident) then @lex.next # function name(){ doc.set_default(:function, {:name => lex.next}) doc.set_default_params(parse_params(lex)) elsif lex.look("var", :ident, "=", "function") then lex.next doc.set_default(:function, {:name => @lex.next}) doc.set_default_params(parse_params) elsif @lex.look("var", :ident, "=", "function") then @lex.next # var name = function(){ doc.set_default(:function, {:name => lex.next}) lex.next # = lex.next # function lex.next if lex.look(:ident) # optional anonymous function name doc.set_default_params(parse_params(lex)) elsif lex.look(:ident, "=", "function") || lex.look(:ident, ":", "function") || lex.look(:string, ":", "function") then doc.set_default(:function, {:name => @lex.next}) @lex.next # = @lex.next # function @lex.next if @lex.look(:ident) # optional anonymous function name doc.set_default_params(parse_params) elsif @lex.look(:ident, "=", "function") || @lex.look(:ident, ":", "function") || @lex.look(:string, ":", "function") then # name: function(){ doc.set_default(:function, {:name => lex.next}) lex.next # : or = lex.next # function lex.next if lex.look(:ident) # optional anonymous function name doc.set_default_params(parse_params(lex)) elsif lex.look(:ident, ".") then doc.set_default(:function, {:name => @lex.next}) @lex.next # : or = @lex.next # function @lex.next if @lex.look(:ident) # optional anonymous function name doc.set_default_params(parse_params) elsif @lex.look(:ident, ".") then # some.long.prototype.chain = function() { lex.next while lex.look(".", :ident) do lex.next name = lex.next if lex.look("=", "function") then @lex.next while @lex.look(".", :ident) do @lex.next name = @lex.next if @lex.look("=", "function") then doc.set_default(:function, {:name => name}) lex.next # = lex.next # function lex.next if lex.look(:ident) # optional anonymous function name doc.set_default_params(parse_params(lex)) @lex.next # = @lex.next # function @lex.next if @lex.look(:ident) # optional anonymous function name doc.set_default_params(parse_params) end end end docs << doc @docs << doc else lex.next @lex.next end end return docs @docs end def JsDuck.parse_params(lex) def parse_params params = [] if lex.look("(") then lex.next while lex.look(:ident) do params << {:name => lex.next} if lex.look(",") then lex.next if @lex.look("(") then @lex.next while @lex.look(:ident) do params << {:name => @lex.next} if @lex.look(",") then @lex.next else break end Loading @@ -301,6 +305,12 @@ module JsDuck end params end end def JsDuck.parse(input) Parser.new(input).parse end end Loading