diff options
| -rw-r--r-- | lib/puppet/util/rdoc/parser.rb | 36 | ||||
| -rwxr-xr-x | spec/unit/util/rdoc/parser.rb | 24 |
2 files changed, 44 insertions, 16 deletions
diff --git a/lib/puppet/util/rdoc/parser.rb b/lib/puppet/util/rdoc/parser.rb index d7e1c30fa..61c08b464 100644 --- a/lib/puppet/util/rdoc/parser.rb +++ b/lib/puppet/util/rdoc/parser.rb @@ -183,20 +183,24 @@ class Parser scan_for_resource(container,stmt.children) if stmt.is_a?(Puppet::Parser::AST::ASTArray) if stmt.is_a?(Puppet::Parser::AST::Resource) and !stmt.type.nil? - type = stmt.type.split("::").collect { |s| s.capitalize }.join("::") - title = stmt.title.is_a?(Puppet::Parser::AST::ASTArray) ? stmt.title.to_s.gsub(/\[(.*)\]/,'\1') : stmt.title.to_s - Puppet.debug "rdoc: found resource: %s[%s]" % [type,title] - - param = [] - stmt.params.children.each do |p| - res = {} - res["name"] = p.param - res["value"] = "#{p.value.to_s}" unless p.value.nil? - - param << res + begin + type = stmt.type.split("::").collect { |s| s.capitalize }.join("::") + title = stmt.title.is_a?(Puppet::Parser::AST::ASTArray) ? stmt.title.to_s.gsub(/\[(.*)\]/,'\1') : stmt.title.to_s + Puppet.debug "rdoc: found resource: %s[%s]" % [type,title] + + param = [] + stmt.params.children.each do |p| + res = {} + res["name"] = p.param + res["value"] = "#{p.value.to_s}" unless p.value.nil? + + param << res + end + + container.add_resource(PuppetResource.new(type, title, stmt.doc, param)) + rescue => detail + raise Puppet::ParseError, "impossible to parse resource in #{stmt.file} at line #{stmt.line}: #{detail}" end - - container.add_resource(PuppetResource.new(type, title, stmt.doc, param)) end end end @@ -228,6 +232,8 @@ class Parser end cls.comment = comment + rescue => detail + raise Puppet::ParseError, "impossible to parse class '#{name}' in #{klass.file} at line #{klass.line}: #{detail}" end # create documentation for a node @@ -250,6 +256,8 @@ class Parser end n.comment = comment + rescue => detail + raise Puppet::ParseError, "impossible to parse node '#{name}' in #{node.file} at line #{node.line}: #{detail}" end # create documentation for a define @@ -287,6 +295,8 @@ class Parser meth.visibility = :public meth.document_self = true meth.singleton = false + rescue => detail + raise Puppet::ParseError, "impossible to parse definition '#{name}' in #{define.file} at line #{define.line}: #{detail}" end # Traverse the AST tree and produce code-objects node diff --git a/spec/unit/util/rdoc/parser.rb b/spec/unit/util/rdoc/parser.rb index de11832b2..558dac470 100755 --- a/spec/unit/util/rdoc/parser.rb +++ b/spec/unit/util/rdoc/parser.rb @@ -213,7 +213,7 @@ describe RDoc::Parser do describe "when documenting definition" do before(:each) do - @define = stub_everything 'define', :arguments => [], :doc => "mydoc" + @define = stub_everything 'define', :arguments => [], :doc => "mydoc", :file => "file", :line => 42 @class = stub_everything 'class' @parser.stubs(:get_class_or_module).returns([@class, "mydef"]) end @@ -228,12 +228,18 @@ describe RDoc::Parser do @parser.document_define("mydef", @define, @class) end + + it "should produce a better error message on unhandled exception" do + @class.expects(:add_method).raises(ArgumentError) + + lambda { @parser.document_define("mydef", @define, @class) }.should raise_error(Puppet::ParseError, /in file at line 42/) + end end describe "when documenting nodes" do before :each do @code = stub_everything 'code' - @node = stub_everything 'node', :doc => "mydoc", :parentclass => "parent", :code => @code + @node = stub_everything 'node', :doc => "mydoc", :parentclass => "parent", :code => @code, :file => "file", :line => 42 @rdoc_node = stub_everything 'rdocnode' @class = stub_everything 'class' @@ -265,12 +271,18 @@ describe RDoc::Parser do @parser.expects(:scan_for_resource).with(@rdoc_node, @code) @parser.document_node("mynode", @node, @class) end + + it "should produce a better error message on unhandled exception" do + @class.stubs(:add_node).raises(ArgumentError) + + lambda { @parser.document_node("mynode", @node, @class) }.should raise_error(Puppet::ParseError, /in file at line 42/) + end end describe "when documenting classes" do before :each do @code = stub_everything 'code' - @class = stub_everything 'class', :doc => "mydoc", :parentclass => "parent", :code => @code + @class = stub_everything 'class', :doc => "mydoc", :parentclass => "parent", :code => @code, :file => "file", :line => 42 @rdoc_class = stub_everything 'rdoc-class' @module = stub_everything 'class' @@ -303,6 +315,12 @@ describe RDoc::Parser do @parser.expects(:scan_for_resource).with(@rdoc_class, @code) @parser.document_class("mynode", @class, @module) end + + it "should produce a better error message on unhandled exception" do + @module.stubs(:add_class).raises(ArgumentError) + + lambda { @parser.document_class("mynode", @class, @module) }.should raise_error(Puppet::ParseError, /in file at line 42/) + end end describe "when scanning for includes and requires" do |
