diff options
author | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-13 07:58:47 +0000 |
---|---|---|
committer | drbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-13 07:58:47 +0000 |
commit | d8c7695fbb2944aba9a69dce75f41b6881d1fc12 () | |
tree | be6a5904c879c9fa9a7c2556031064233e70880b /lib/rdoc | |
parent | a0046fe94972ba4873244a1b985cb69f1685b5f3 (diff) |
* lib/rdoc/class_module.rb: Fixed duplicate comments for classes and
modules from C. * test/rdoc/test_rdoc_class_module.rb: Test for the above. * lib/rdoc/parser/c.rb: Reload C variable names to allow proper updates of an ri store for C files. * lib/rdoc/rdoc.rb: ditto. * lib/rdoc/store.rb: ditto. * test/rdoc/test_rdoc_parser_c.rb: Test for the above. * test/rdoc/test_rdoc_store.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38362 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | lib/rdoc/class_module.rb | 5 | ||||
-rw-r--r-- | lib/rdoc/parser/c.rb | 66 | ||||
-rw-r--r-- | lib/rdoc/rdoc.rb | 3 | ||||
-rw-r--r-- | lib/rdoc/store.rb | 127 |
4 files changed, 168 insertions, 33 deletions
@@ -31,7 +31,7 @@ class RDoc::ClassModule < RDoc::Context ## # Comment and the location it came from. Use #add_comment to add comments - attr_reader :comment_location attr_accessor :diagram # :nodoc: @@ -134,6 +134,9 @@ class RDoc::ClassModule < RDoc::Context else normalize_comment comment end @comment_location << [comment, location] self.comment = original @@ -123,6 +123,11 @@ class RDoc::Parser::C < RDoc::Parser include RDoc::Text ## # C file the parser is parsing attr_accessor :content @@ -150,16 +155,23 @@ class RDoc::Parser::C < RDoc::Parser attr_reader :singleton_classes ## - # Prepare to parse a C file - def initialize(top_level, file_name, content, options, stats) super @known_classes = RDoc::KNOWN_CLASSES.dup - @content = handle_tab_width handle_ifdefs_in(@content) - @classes = {} - @singleton_classes = {} - @file_dir = File.dirname(@file_name) # missing variable => [handle_class_module arguments] @missing_dependencies = {} @@ -386,13 +398,12 @@ class RDoc::Parser::C < RDoc::Parser def do_includes @content.scan(/rb_include_module\s*\(\s*(\w+?),\s*(\w+?)\s*\)/) do |c,m| - if cls = @classes[c] - m = @known_classes[m] || m - comment = RDoc::Comment.new '', @top_level - incl = cls.add_include RDoc::Include.new(m, comment) - incl.record_location @top_level - end end end @@ -801,7 +812,7 @@ class RDoc::Parser::C < RDoc::Parser parent_name = @known_classes[parent] || parent if in_module then - enclosure = @classes[in_module] || @store.c_enclosure_classes[in_module] if enclosure.nil? and enclosure = @known_classes[in_module] then enc_type = /^rb_m/ =~ in_module ? :module : :class @@ -848,8 +859,8 @@ class RDoc::Parser::C < RDoc::Parser end @classes[var_name] = cm - @store.c_enclosure_classes[var_name] = cm @known_classes[var_name] = cm.full_name end ## @@ -1005,6 +1016,30 @@ class RDoc::Parser::C < RDoc::Parser end ## # Look for directives in a normal comment block: # # /* @@ -1136,6 +1171,9 @@ class RDoc::Parser::C < RDoc::Parser do_includes do_aliases do_attrs @top_level end @@ -476,9 +476,12 @@ The internal error was: @store.dry_run = @options.dry_run @store.main = @options.main_page @store.title = @options.title @start_time = Time.now file_info = parse_files @options.files @options.default_title = "RDoc Documentation" @@ -69,7 +69,19 @@ class RDoc::Store # Stores the name of the C variable a class belongs to. This helps wire up # classes defined from C across files. - attr_reader :c_enclosure_classes ## # If true this Store will not write any files @@ -114,15 +126,17 @@ class RDoc::Store @type = type @cache = { - :ancestors => {}, - :attributes => {}, - :class_methods => {}, - :encoding => @encoding, - :instance_methods => {}, - :main => nil, - :modules => [], - :pages => [], - :title => nil, } @classes_hash = {} @@ -130,12 +144,35 @@ class RDoc::Store @files_hash = {} @c_enclosure_classes = {} @unique_classes = nil @unique_modules = nil end ## # Adds the file with +name+ as an RDoc::TopLevel to the store. Returns the # created RDoc::TopLevel. @@ -305,6 +342,28 @@ class RDoc::Store end ## # Finds the class with +name+ in all discovered classes def find_class_named name @@ -500,22 +559,26 @@ class RDoc::Store @encoding = load_enc unless @encoding - @cache[:pages] ||= [] - @cache[:main] ||= nil @cache rescue Errno::ENOENT end ## - # Loads ri data for +klass_name+ def load_class klass_name - file = class_file klass_name - - obj = open file, 'rb' do |io| - Marshal.load io.read - end obj.store = self @@ -525,6 +588,17 @@ class RDoc::Store when RDoc::NormalModule then @modules_hash[klass_name] = obj end rescue Errno::ENOENT => e error = MissingFileError.new(self, file, klass_name) error.set_backtrace e.backtrace @@ -584,6 +658,20 @@ class RDoc::Store end ## # Path to the ri data for +method_name+ in +klass_name+ def method_file klass_name, method_name @@ -688,6 +776,9 @@ class RDoc::Store @cache[:encoding] = @encoding # this gets set twice due to assert_cache return if @dry_run marshal = Marshal.dump @cache |