97 lines
3.0 KiB
Ruby
97 lines
3.0 KiB
Ruby
require 'yard'
|
|
|
|
# Module for YARD related functionality.
|
|
module PuppetStrings::Yard
|
|
require 'puppet-strings/yard/code_objects'
|
|
require 'puppet-strings/yard/handlers'
|
|
require 'puppet-strings/yard/tags'
|
|
require 'puppet-strings/yard/parsers'
|
|
|
|
# Sets up YARD for use with puppet-strings.
|
|
# @return [void]
|
|
def self.setup!
|
|
# Register the template path
|
|
YARD::Templates::Engine.register_template_path(File.join(File.dirname(__FILE__), 'yard', 'templates'))
|
|
|
|
# Register the Puppet parser
|
|
YARD::Parser::SourceParser.register_parser_type(:puppet, PuppetStrings::Yard::Parsers::Puppet::Parser, ['pp'])
|
|
|
|
# Register our handlers
|
|
YARD::Handlers::Processor.register_handler_namespace(:puppet, PuppetStrings::Yard::Handlers::Puppet)
|
|
YARD::Handlers::Processor.register_handler_namespace(:puppet_ruby, PuppetStrings::Yard::Handlers::Ruby)
|
|
|
|
# Register the tag directives
|
|
PuppetStrings::Yard::Tags::ParameterDirective.register!
|
|
PuppetStrings::Yard::Tags::PropertyDirective.register!
|
|
|
|
# Ignore documentation on Puppet DSL calls
|
|
# This prevents the YARD DSL parser from emitting warnings for Puppet's Ruby DSL
|
|
YARD::Handlers::Ruby::DSLHandlerMethods::IGNORE_METHODS['create_function'] = true
|
|
YARD::Handlers::Ruby::DSLHandlerMethods::IGNORE_METHODS['newtype'] = true
|
|
end
|
|
end
|
|
|
|
# Monkey patch YARD::CLI::Yardoc#all_objects to return our custom code objects.
|
|
# @private
|
|
class YARD::CLI::Yardoc
|
|
def all_objects
|
|
YARD::Registry.all(
|
|
:root,
|
|
:module,
|
|
:class,
|
|
:puppet_class,
|
|
:puppet_defined_type,
|
|
:puppet_type,
|
|
:puppet_provider,
|
|
:puppet_function
|
|
)
|
|
end
|
|
end
|
|
|
|
# Monkey patch the stats object to return statistics for our objects.
|
|
# This is the recommended way to add custom stats.
|
|
# @private
|
|
class YARD::CLI::Stats
|
|
def stats_for_puppet_classes
|
|
output 'Puppet Classes', *type_statistics_all(:puppet_class)
|
|
end
|
|
|
|
def stats_for_puppet_defined_types
|
|
output 'Puppet Defined Types', *type_statistics_all(:puppet_defined_type)
|
|
end
|
|
|
|
def stats_for_puppet_types
|
|
output 'Puppet Types', *type_statistics_all(:puppet_type)
|
|
end
|
|
|
|
def stats_for_puppet_providers
|
|
output 'Puppet Providers', *type_statistics_all(:puppet_provider)
|
|
end
|
|
|
|
def stats_for_puppet_functions
|
|
output 'Puppet Functions', *type_statistics_all(:puppet_function)
|
|
end
|
|
|
|
def output(name, data, undoc = nil)
|
|
# Monkey patch output to accommodate our larger header widths
|
|
@total += data if data.is_a?(Integer) && undoc
|
|
@undocumented += undoc if undoc.is_a?(Integer)
|
|
data =
|
|
if undoc
|
|
('%5s (% 5d undocumented)' % [data, undoc])
|
|
else
|
|
'%5s' % data
|
|
end
|
|
log.puts('%-21s %s' % [name + ':', data])
|
|
end
|
|
|
|
# This differs from the YARD implementation in that it considers
|
|
# a docstring without text but with tags to be undocumented.
|
|
def type_statistics_all(type)
|
|
objs = all_objects.select {|m| m.type == type }
|
|
undoc = objs.find_all {|m| m.docstring.all.empty? }
|
|
@undoc_list |= undoc if @undoc_list
|
|
[objs.size, undoc.size]
|
|
end
|
|
end
|