RDoc statistics collector which prints a summary and report of a project's documentation totals.
- CLASS RDoc::Stats::Normal
- CLASS RDoc::Stats::Quiet
- CLASS RDoc::Stats::Verbose
- A
- B
- C
- D
- F
- G
- N
- P
- R
- S
- U
| [R] | coverage_level | Output level for the coverage report |
| [R] | files_so_far | Count of files parsed during parsing |
| [R] | num_files | Total number of files found |
Creates a new Stats that will have
num_files. verbosity defaults to 1 which will
create an RDoc::Stats::Normal outputter.
# File ../ruby/lib/rdoc/stats.rb, line 28 def initialize num_files, verbosity = 1 @files_so_far = 0 @num_files = num_files @coverage_level = 0 @doc_items = nil @fully_documented = false @num_params = 0 @percent_doc = nil @start = Time.now @undoc_params = 0 @display = case verbosity when 0 then Quiet.new num_files when 1 then Normal.new num_files else Verbose.new num_files end end
Records the parsing of an alias as.
Records the parsing of an attribute attribute
Records the parsing of a class klass
Records the parsing of constant
Records the parsing of file
Records the parsing of method
Records the parsing of a module mod
Call this to mark the beginning of parsing for display purposes
Calculates documentation totals and percentages for classes, modules, constants, attributes and methods.
# File ../ruby/lib/rdoc/stats.rb, line 108 def calculate return if @doc_items ucm = RDoc::TopLevel.unique_classes_and_modules constants = [] ucm.each { |cm| constants.concat cm.constants } methods = [] ucm.each { |cm| methods.concat cm.method_list } attributes = [] ucm.each { |cm| attributes.concat cm.attributes } @num_attributes, @undoc_attributes = doc_stats attributes @num_classes, @undoc_classes = doc_stats RDoc::TopLevel.unique_classes @num_constants, @undoc_constants = doc_stats constants @num_methods, @undoc_methods = doc_stats methods @num_modules, @undoc_modules = doc_stats RDoc::TopLevel.unique_modules @num_items = @num_attributes + @num_classes + @num_constants + @num_methods + @num_modules + @num_params @undoc_items = @undoc_attributes + @undoc_classes + @undoc_constants + @undoc_methods + @undoc_modules + @undoc_params @doc_items = @num_items - @undoc_items end
Sets coverage report level. Accepted values are:
- false or nil
-
No report
- 0
-
Classes, modules, constants, attributes, methods
- 1
-
Level 0 + method parameters
Returns the length and number of undocumented items in
collection.
Call this to mark the end of parsing for display purposes
The documentation status of this project. true when 100%,
false when less than 100% and nil when unknown.
A report that says you did a great job!
Calculates the percentage of items documented.
Returns a report on which items are not documented
# File ../ruby/lib/rdoc/stats.rb, line 212 def report if @coverage_level > 0 then require 'rdoc/markup/to_tt_only' require 'rdoc/generator/markup' require 'rdoc/text' extend RDoc::Text end report = [] if @coverage_level.zero? then calculate return great_job if @num_items == @doc_items end ucm = RDoc::TopLevel.unique_classes_and_modules ucm.sort.each do |cm| report << report_class_module(cm) { [ report_constants(cm), report_attributes(cm), report_methods(cm), ].compact } end if @coverage_level > 0 then calculate return great_job if @num_items == @doc_items end report.unshift nil report.unshift 'The following items are not documented:' report.join "\n" end
Returns a report on undocumented attributes in ClassModule cm
Returns a report on undocumented items in ClassModule cm
# File ../ruby/lib/rdoc/stats.rb, line 272 def report_class_module cm return if cm.fully_documented? and @coverage_level.zero? report = [] if cm.in_files.empty? then report << "# #{cm.definition} is referenced but empty." report << '#' report << '# It probably came from another project. ' "I'm sorry I'm holding it against you." report << nil return report elsif cm.documented? then documented = true report << "#{cm.definition} # is documented" else report << '# in files:' cm.in_files.each do |file| report << "# #{file.full_name}" end report << nil report << "#{cm.definition}" end body = yield.flatten # HACK remove #flatten return if body.empty? and documented report << nil << body unless body.empty? report << 'end' report << nil report end
Returns a report on undocumented constants in ClassModule cm
# File ../ruby/lib/rdoc/stats.rb, line 315 def report_constants cm return if cm.constants.empty? report = [] cm.each_constant do |constant| # TODO constant aliases are listed in the summary but not reported # figure out what to do here next if constant.documented? || constant.is_alias_for report << " # in file #{constant.file.full_name}" report << " #{constant.name} = nil" end report end
Returns a report on undocumented methods in ClassModule cm
# File ../ruby/lib/rdoc/stats.rb, line 334 def report_methods cm return if cm.method_list.empty? report = [] cm.each_method do |method| next if method.documented? and @coverage_level.zero? if @coverage_level > 0 then params, undoc = undoc_params method @num_params += params unless undoc.empty? then @undoc_params += undoc.length undoc = undoc.map do |param| "+#{param}+" end param_report = " # #{undoc.join ', '} is not documented" end end next if method.documented? and not param_report report << " # in file #{method.file.full_name}" report << param_report if param_report report << " def #{method.name}#{method.params}; end" report << nil end report end
Returns a summary of the collected statistics.
# File ../ruby/lib/rdoc/stats.rb, line 368 def summary calculate num_width = [@num_files, @num_items].max.to_s.length undoc_width = [ @undoc_attributes, @undoc_classes, @undoc_constants, @undoc_items, @undoc_methods, @undoc_modules, @undoc_params, ].max.to_s.length report = [] report << 'Files: %*d' % [num_width, @num_files] report << nil report << 'Classes: %*d (%*d undocumented)' % [ num_width, @num_classes, undoc_width, @undoc_classes] report << 'Modules: %*d (%*d undocumented)' % [ num_width, @num_modules, undoc_width, @undoc_modules] report << 'Constants: %*d (%*d undocumented)' % [ num_width, @num_constants, undoc_width, @undoc_constants] report << 'Attributes: %*d (%*d undocumented)' % [ num_width, @num_attributes, undoc_width, @undoc_attributes] report << 'Methods: %*d (%*d undocumented)' % [ num_width, @num_methods, undoc_width, @undoc_methods] report << 'Parameters: %*d (%*d undocumented)' % [ num_width, @num_params, undoc_width, @undoc_params] if @coverage_level > 0 report << nil report << 'Total: %*d (%*d undocumented)' % [ num_width, @num_items, undoc_width, @undoc_items] report << '%6.2f%% documented' % percent_doc report << nil report << 'Elapsed: %0.1fs' % (Time.now - @start) report.join "\n" end
Determines which parameters in method were not documented.
Returns a total parameter count and an Array of undocumented methods.
# File ../ruby/lib/rdoc/stats.rb, line 417 def undoc_params method @formatter ||= RDoc::Markup::ToTtOnly.new params = method.param_list return 0, [] if params.empty? document = parse method.comment tts = document.accept @formatter undoc = params - tts [params.length, undoc] end