summaryrefslogtreecommitdiff
path: root/lib/rdoc
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-13 07:58:47 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-13 07:58:47 +0000
commitd8c7695fbb2944aba9a69dce75f41b6881d1fc12 ()
treebe6a5904c879c9fa9a7c2556031064233e70880b /lib/rdoc
parenta0046fe94972ba4873244a1b985cb69f1685b5f3 (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.rb5
-rw-r--r--lib/rdoc/parser/c.rb66
-rw-r--r--lib/rdoc/rdoc.rb3
-rw-r--r--lib/rdoc/store.rb127
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