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 lib/rdoc/stats.rb, line 26 def initialize store, num_files, verbosity = 1 @num_files = num_files @store = store @coverage_level = 0 @doc_items = nil @files_so_far = 0 @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 lib/rdoc/stats.rb, line 107 def calculate return if @doc_items ucm = @store.unique_classes_and_modules classes = @store.unique_classes.reject { |cm| cm.full_name == 'Object' } 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 classes @num_constants, @undoc_constants = doc_stats constants @num_methods, @undoc_methods = doc_stats methods @num_modules, @undoc_modules = doc_stats @store.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 lib/rdoc/stats.rb, line 215 def report if @coverage_level > 0 then extend RDoc::Text end report = [] if @coverage_level.zero? then calculate return great_job if @num_items == @doc_items end ucm = @store.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
# File lib/rdoc/stats.rb, line 255 def report_attributes cm return if cm.attributes.empty? report = [] cm.each_attribute do |attr| next if attr.documented? line = attr.line ? ":#{attr.line}" : nil report << " #{attr.definition} :#{attr.name} # in file #{attr.file.full_name}#{line}" end report end
Returns a report on undocumented items in ClassModule cm
# File lib/rdoc/stats.rb, line 272 def report_class_module cm return if cm.fully_documented? and @coverage_level.zero? return unless cm.display? 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 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 line = constant.line ? ":#{constant.line}" : line report << " # in file #{constant.file.full_name}#{line}" report << " #{constant.name} = nil" end report end
Returns a report on undocumented methods in ClassModule cm
# File lib/rdoc/stats.rb, line 336 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 line = method.line ? ":#{method.line}" : nil scope = method.singleton ? 'self.' : nil report << " # in file #{method.file.full_name}#{line}" report << param_report if param_report report << " def #{scope}#{method.name}#{method.params}; end" report << nil end report end
Returns a summary of the collected statistics.
# File lib/rdoc/stats.rb, line 374 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.