diff options
author | dave <dave@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-01-02 06:01:12 +0000 |
---|---|---|
committer | dave <dave@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-01-02 06:01:12 +0000 |
commit | 88c127c19be3d12bc5edcb6ceb416985258396c6 (patch) | |
tree | c2d59557f5341202c22bf05448bebaad3df40a19 /lib/rdoc/rdoc.rb | |
parent | eee1377a60de602723599d313e1379ba7d875add (diff) |
Finish documenting internal stuff. See Changelog for other details
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5364 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rdoc/rdoc.rb')
-rw-r--r-- | lib/rdoc/rdoc.rb | 73 |
1 files changed, 63 insertions, 10 deletions
diff --git a/lib/rdoc/rdoc.rb b/lib/rdoc/rdoc.rb index ca9c5da2bf..ddcf217c4b 100644 --- a/lib/rdoc/rdoc.rb +++ b/lib/rdoc/rdoc.rb @@ -31,6 +31,27 @@ require 'ftools' module RDoc + # Name of the dotfile that contains the description of files to be + # processed in the current directory + DOT_DOC_FILENAME = ".document" + + # Simple stats collector + class Stats + attr_accessor :num_files, :num_classes, :num_modules, :num_methods + def initialize + @num_files = @num_classes = @num_modules = @num_methods = 0 + @start = Time.now + end + def print + puts "Files: #@num_files" + puts "Classes: #@num_classes" + puts "Modules: #@num_modules" + puts "Methods: #@num_methods" + puts "Elapsed: " + sprintf("%0.3fs", Time.now - @start) + end + end + + # Exception thrown by any rdoc error. Only the #message part is # of use externally. @@ -110,25 +131,40 @@ module RDoc end + # The .document file contains a list of file and directory name + # patterns, representing candidates for documentation. It may + # also contain comments (starting with '#') + def parse_dot_doc_file(in_dir, filename, options) + # read and strip comments + patterns = File.read(filename).gsub(/#.*/, '') + + result = [] + + patterns.split.each do |patt| + candidates = Dir.glob(File.join(in_dir, patt)) + result.concat(normalized_file_list(options, candidates)) + end + result + end + + # Given a list of files and directories, create a list # of all the Ruby files they contain. - def normalized_file_list(options, *relative_files) + def normalized_file_list(options, relative_files) file_list = [] relative_files.each do |rel_file_name| - case type = File.stat(rel_file_name).ftype when "file" file_list << rel_file_name when "directory" next if options.exclude && options.exclude =~ rel_file_name - Find.find(rel_file_name) do |fn| - next if options.exclude && options.exclude =~ fn - next unless ParserFactory.can_parse(fn) - next unless File.file?(fn) - - file_list << fn.sub(%r{\./}, '') + dot_doc = File.join(rel_file_name, DOT_DOC_FILENAME) + if File.file?(dot_doc) + file_list.concat(parse_dot_doc_file(rel_file_name, dot_doc, options)) + else + file_list.concat(list_files_in_directory(rel_file_name, options)) end else raise RDocError.new("I can't deal with a #{type} #{rel_file_name}") @@ -137,6 +173,16 @@ module RDoc file_list end + # Return a list of the files to be processed in + # a directory. We know that this directory doesn't have + # a .document file, so we're looking for real files. However + # we may well contain subdirectories which must + # be tested for .document files + def list_files_in_directory(dir, options) + normalized_file_list(options, Dir.glob(File.join(dir, "*"))) + end + + # Parse each file on the command line, recursively entering # directories @@ -147,7 +193,7 @@ module RDoc files = options.files files = ["."] if files.empty? - file_list = normalized_file_list(options, *files) + file_list = normalized_file_list(options, files) file_list.each do |fn| $stderr.printf("\n%35s: ", File.basename(fn)) unless options.quiet @@ -155,8 +201,9 @@ module RDoc content = File.open(fn, "r") {|f| f.read} top_level = TopLevel.new(fn) - parser = ParserFactory.parser_for(top_level, fn, content, options) + parser = ParserFactory.parser_for(top_level, fn, content, options, @stats) file_info << parser.scan + @stats.num_files += 1 end file_info @@ -182,6 +229,8 @@ module RDoc TopLevel::reset + @stats = Stats.new + options = Options.instance options.parse(argv, GENERATORS) @@ -211,7 +260,11 @@ module RDoc ensure Dir.chdir(pwd) end + end + unless options.quiet + puts + @stats.print end end end |