summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/util/rdoc/parser.rb36
-rwxr-xr-xspec/unit/util/rdoc/parser.rb24
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