From 0ca9b5322117879cf930c88a0473558d9e437ece Mon Sep 17 00:00:00 2001 From: Brice Figureau Date: Wed, 29 Jul 2009 21:21:25 +0200 Subject: Fix #2459 - puppetdoc added namespace classes as RDoc modules instead of classes Puppetdoc while parsing a class name creates intermediate RDoc classes to form a hierarchy. Due to a coding error, those intermediate classes were created as RDoc modules. Later, when puppetdoc was parsing the definition of one of this class, it wasn't finding it in RDoc list of classes (since it was recorded as a module). Puppetdoc was then creating documentation for two objects of the same name. Signed-off-by: Brice Figureau --- lib/puppet/util/rdoc/code_objects.rb | 4 ++++ lib/puppet/util/rdoc/parser.rb | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/puppet/util/rdoc/code_objects.rb b/lib/puppet/util/rdoc/code_objects.rb index 312fe0c9b..6e384e1ea 100644 --- a/lib/puppet/util/rdoc/code_objects.rb +++ b/lib/puppet/util/rdoc/code_objects.rb @@ -102,6 +102,10 @@ module RDoc def is_module? false end + + def superclass=(superclass) + @superclass = superclass + end end # PuppetNode holds a puppet node diff --git a/lib/puppet/util/rdoc/parser.rb b/lib/puppet/util/rdoc/parser.rb index 80b3932ff..554f8cb00 100644 --- a/lib/puppet/util/rdoc/parser.rb +++ b/lib/puppet/util/rdoc/parser.rb @@ -68,7 +68,7 @@ class Parser prev_container = container container = find_object_named(container, name) unless container - container = prev_container.add_module(PuppetClass, name) + container = prev_container.add_class(PuppetClass, name, nil) end end return [container, final_name] @@ -210,6 +210,10 @@ class Parser comment = klass.doc look_for_directives_in(container, comment) unless comment.empty? cls = container.add_class(PuppetClass, name, superclass) + # it is possible we already encountered this class, while parsing some namespaces + # from other classes of other files. But at that time we couldn't know this class superclass + # so, now we know it and force it. + cls.superclass = superclass cls.record_location(@top_level) # scan class code for include -- cgit