Class: YARD::CLI::Stats

Inherits:
Yardoc show all
Includes:
Templates::Helpers::BaseHelper
Defined in:
lib/yard/cli/stats.rb

Overview

Since:

  • 0.6.0

Constant Summary collapse

STATS_ORDER =

Maintains the order in which stats_for_ statistics methods should be printed.

See Also:

Since:

  • 0.6.0

[:files, :modules, :classes, :constants, :attributes, :methods]

Instance Attribute Summary collapse

Attributes included from Templates::Helpers::BaseHelper

#object, #owner, #serializer

Instance Method Summary collapse

Methods included from Templates::Helpers::BaseHelper

#format_object_title, #format_object_type, #format_source, #format_types, #globals, #h, #link_file, #link_include_file, #link_include_object, #link_object, #link_url, #linkify, #run_verifier

Constructor Details

#initialize(parse = true) ⇒ Stats

Returns a new instance of Stats

Since:

  • 0.6.0



17
18
19
20
21
22
# File 'lib/yard/cli/stats.rb', line 17

def initialize(parse = true)
  super()
  @parse = parse
  @undoc_list = nil
  @compact = false
end

Instance Attribute Details

#parseBoolean

Returns whether to parse and load registry

Since:

  • 0.6.0



14
15
16
# File 'lib/yard/cli/stats.rb', line 14

def parse
  @parse
end

Instance Method Details

#all_objectsArray<CodeObjects::Base>

Returns all the parsed objects in the registry, removing any objects that are not visible (private, protected) depending on the arguments passed to the command.

Since:

  • 0.6.0



102
103
104
# File 'lib/yard/cli/stats.rb', line 102

def all_objects
  @all_objects ||= run_verifier Registry.all
end

#descriptionObject

Since:

  • 0.6.0



24
25
26
# File 'lib/yard/cli/stats.rb', line 24

def description
  "Prints documentation statistics on a set of files"
end

#output(name, data, undoc = nil) ⇒ void

This method returns an undefined value.

Prints a statistic to standard out. This method is optimized for getting Integer values, though it allows any data to be printed.

Since:

  • 0.6.0



156
157
158
159
160
161
162
163
164
165
# File 'lib/yard/cli/stats.rb', line 156

def output(name, data, undoc = nil)
  @total += data if data.is_a?(Integer) && undoc
  @undocumented += undoc if undoc.is_a?(Integer)
  if undoc
    data = ("%5s (% 5d undocumented)" % [data, undoc])
  else
    data = "%5s" % data
  end
  log.puts("%-12s %s" % [name + ":", data])
end

Prints statistics for different object types

To add statistics for a specific type, add a method #stats_for_TYPE to this class that calls #output.

Since:

  • 0.6.0



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/yard/cli/stats.rb', line 51

def print_statistics
  @total, @undocumented = 0, 0
  meths = methods.map {|m| m.to_s }.grep(/^stats_for_/)
  STATS_ORDER.each do |meth|
    mname = "stats_for_#{meth}"
    if meths.include?(mname)
      send(mname)
      meths.delete(mname)
    end
  end
  meths.each {|m| send(m) }

  if @undocumented == 0
    total = 100
  elsif @total == 0
    total = 0
  else
    total = (@total - @undocumented).to_f / @total.to_f * 100
  end
  log.puts("% 3.2f%% documented" % total)
end

Prints list of undocumented objects

Since:

  • 0.6.0



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/yard/cli/stats.rb', line 74

def print_undocumented_objects
  return if !@undoc_list || @undoc_list.empty?
  log.puts
  log.puts "Undocumented Objects:"

  objects = @undoc_list.sort_by {|o| o.file.to_s }
  max = objects.sort_by {|o| o.path.length }.last.path.length
  if @compact
    objects.each do |object|
      log.puts("%-#{max}s     (%s)" % [object.path,
        [object.file || "-unknown-", object.line].compact.join(":")])
    end
  else
    last_file = nil
    objects.each do |object|
      if object.file != last_file
        log.puts
        log.puts "(in file: #{object.file || "-unknown-"})"
      end
      log.puts object.path
      last_file = object.file
    end
  end
end

#run(*args) ⇒ void

This method returns an undefined value.

Runs the commandline utility, parsing arguments and generating output if set.

Since:

  • 0.6.0



33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/yard/cli/stats.rb', line 33

def run(*args)
  parse_arguments(*args)

  if use_cache
    Registry.load!
  elsif parse
    YARD.parse(files, excluded)
    Registry.save(use_cache) if save_yardoc
  end

  print_statistics
  print_undocumented_objects
end

#stats_for_attributesObject

Statistics for attributes

Since:

  • 0.6.0



129
130
131
132
133
134
135
# File 'lib/yard/cli/stats.rb', line 129

def stats_for_attributes
  objs = all_objects.select {|m| m.type == :method && m.is_attribute? }
  objs.uniq! {|m| m.name.to_s.gsub(/=$/, '') }
  undoc = objs.select {|m| m.docstring.blank? }
  @undoc_list |= undoc if @undoc_list
  output "Attributes", objs.size, undoc.size
end

#stats_for_classesObject

Statistics for classes

Since:

  • 0.6.0



119
120
121
# File 'lib/yard/cli/stats.rb', line 119

def stats_for_classes
  output "Classes", *type_statistics(:class)
end

#stats_for_constantsObject

Statistics for constants

Since:

  • 0.6.0



124
125
126
# File 'lib/yard/cli/stats.rb', line 124

def stats_for_constants
  output "Constants", *type_statistics(:constant)
end

#stats_for_filesObject

Statistics for files

Since:

  • 0.6.0



107
108
109
110
111
# File 'lib/yard/cli/stats.rb', line 107

def stats_for_files
  files = []
  all_objects.each {|o| files |= [o.file] }
  output "Files", files.size
end

#stats_for_methodsObject

Statistics for methods

Since:

  • 0.6.0



138
139
140
141
142
143
144
145
# File 'lib/yard/cli/stats.rb', line 138

def stats_for_methods
  objs = all_objects.select {|m| m.type == :method }
  objs.reject! {|m| m.is_alias? }
  objs.reject! {|m| m.is_attribute? }
  undoc = objs.select {|m| m.docstring.blank? }
  @undoc_list |= undoc if @undoc_list
  output "Methods", objs.size, undoc.size
end

#stats_for_modulesObject

Statistics for modules

Since:

  • 0.6.0



114
115
116
# File 'lib/yard/cli/stats.rb', line 114

def stats_for_modules
  output "Modules", *type_statistics(:module)
end