puppet-strings 0.4.0 → 0.99.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +122 -0
- data/COMMITTERS.md +185 -0
- data/CONTRIBUTING.md +89 -0
- data/Gemfile +38 -0
- data/JSON.md +511 -0
- data/LICENSE +13 -0
- data/README.md +416 -0
- data/Rakefile +49 -0
- data/lib/puppet-strings.rb +63 -0
- data/lib/puppet-strings/json.rb +49 -0
- data/lib/puppet-strings/tasks.rb +10 -0
- data/lib/puppet-strings/tasks/generate.rb +23 -0
- data/lib/puppet-strings/tasks/gh_pages.rb +43 -0
- data/lib/puppet-strings/yard.rb +96 -0
- data/lib/puppet-strings/yard/code_objects.rb +8 -0
- data/lib/puppet-strings/yard/code_objects/base.rb +14 -0
- data/lib/puppet-strings/yard/code_objects/class.rb +59 -0
- data/lib/puppet-strings/yard/code_objects/defined_type.rb +58 -0
- data/lib/puppet-strings/yard/code_objects/function.rb +93 -0
- data/lib/puppet-strings/yard/code_objects/group.rb +30 -0
- data/lib/puppet-strings/yard/code_objects/provider.rb +93 -0
- data/lib/puppet-strings/yard/code_objects/type.rb +146 -0
- data/lib/puppet-strings/yard/handlers.rb +16 -0
- data/lib/puppet-strings/yard/handlers/puppet/base.rb +44 -0
- data/lib/puppet-strings/yard/handlers/puppet/class_handler.rb +23 -0
- data/lib/puppet-strings/yard/handlers/puppet/defined_type_handler.rb +23 -0
- data/lib/puppet-strings/yard/handlers/puppet/function_handler.rb +42 -0
- data/lib/puppet-strings/yard/handlers/ruby/base.rb +38 -0
- data/lib/puppet-strings/yard/handlers/ruby/function_handler.rb +357 -0
- data/lib/puppet-strings/yard/handlers/ruby/provider_handler.rb +113 -0
- data/lib/puppet-strings/yard/handlers/ruby/type_handler.rb +194 -0
- data/lib/puppet-strings/yard/parsers.rb +7 -0
- data/lib/puppet-strings/yard/parsers/puppet/parser.rb +70 -0
- data/lib/puppet-strings/yard/parsers/puppet/statement.rb +146 -0
- data/lib/puppet-strings/yard/tags.rb +6 -0
- data/lib/puppet-strings/yard/tags/overload_tag.rb +109 -0
- data/lib/puppet-strings/yard/tags/parameter_directive.rb +24 -0
- data/lib/puppet-strings/yard/tags/property_directive.rb +24 -0
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_class.erb +9 -0
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_defined_type.erb +9 -0
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_function.erb +10 -0
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_provider.erb +10 -0
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/full_list_puppet_type.erb +9 -0
- data/lib/puppet-strings/yard/templates/default/fulldoc/html/setup.rb +64 -0
- data/lib/puppet-strings/yard/templates/default/layout/html/objects.erb +35 -0
- data/lib/puppet-strings/yard/templates/default/layout/html/setup.rb +172 -0
- data/lib/puppet-strings/yard/templates/default/puppet_class/html/box_info.erb +26 -0
- data/lib/puppet-strings/yard/templates/default/puppet_class/html/header.erb +1 -0
- data/lib/puppet-strings/yard/templates/default/puppet_class/html/overview.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/puppet_class/html/setup.rb +14 -0
- data/lib/puppet-strings/yard/templates/default/puppet_class/html/source.erb +12 -0
- data/lib/puppet-strings/yard/templates/default/puppet_defined_type/html/box_info.erb +10 -0
- data/lib/puppet-strings/yard/templates/default/puppet_defined_type/html/header.erb +1 -0
- data/lib/puppet-strings/yard/templates/default/puppet_defined_type/html/overview.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/puppet_defined_type/html/setup.rb +5 -0
- data/lib/puppet-strings/yard/templates/default/puppet_defined_type/html/source.erb +12 -0
- data/lib/puppet-strings/yard/templates/default/puppet_function/html/box_info.erb +14 -0
- data/lib/puppet-strings/yard/templates/default/puppet_function/html/header.erb +1 -0
- data/lib/puppet-strings/yard/templates/default/puppet_function/html/overview.erb +18 -0
- data/lib/puppet-strings/yard/templates/default/puppet_function/html/setup.rb +5 -0
- data/lib/puppet-strings/yard/templates/default/puppet_function/html/source.erb +12 -0
- data/lib/puppet-strings/yard/templates/default/puppet_provider/html/box_info.erb +14 -0
- data/lib/puppet-strings/yard/templates/default/puppet_provider/html/collection.erb +10 -0
- data/lib/puppet-strings/yard/templates/default/puppet_provider/html/features.erb +12 -0
- data/lib/puppet-strings/yard/templates/default/puppet_provider/html/header.erb +1 -0
- data/lib/puppet-strings/yard/templates/default/puppet_provider/html/overview.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/puppet_provider/html/setup.rb +29 -0
- data/lib/puppet-strings/yard/templates/default/puppet_type/html/box_info.erb +20 -0
- data/lib/puppet-strings/yard/templates/default/puppet_type/html/features.erb +13 -0
- data/lib/puppet-strings/yard/templates/default/puppet_type/html/header.erb +1 -0
- data/lib/puppet-strings/yard/templates/default/puppet_type/html/overview.erb +6 -0
- data/lib/puppet-strings/yard/templates/default/puppet_type/html/parameters.erb +35 -0
- data/lib/puppet-strings/yard/templates/default/puppet_type/html/setup.rb +32 -0
- data/lib/puppet-strings/yard/templates/default/tags/html/puppet_overload.erb +12 -0
- data/lib/puppet-strings/yard/templates/default/tags/setup.rb +15 -0
- data/lib/puppet/application/strings.rb +1 -0
- data/lib/puppet/face/strings.rb +80 -39
- data/spec/acceptance/emit_json_options.rb +41 -0
- data/spec/acceptance/lib/util.rb +15 -0
- data/spec/acceptance/running_strings_generate.rb +54 -0
- data/spec/fixtures/acceptance/modules/test/functions/add.pp +9 -0
- data/spec/fixtures/acceptance/modules/test/lib/puppet/functions/4x_function.rb +5 -0
- data/spec/fixtures/acceptance/modules/test/lib/puppet/parser/functions/function3x.rb +2 -0
- data/spec/fixtures/acceptance/modules/test/lib/puppet/provider/server/linux.rb +9 -0
- data/spec/fixtures/acceptance/modules/test/lib/puppet/type/database.rb +15 -0
- data/spec/fixtures/acceptance/modules/test/manifests/init.pp +27 -0
- data/spec/fixtures/acceptance/modules/test/manifests/triple_nested_classes.pp +27 -0
- data/spec/fixtures/acceptance/modules/test/metadata.json +6 -0
- data/spec/fixtures/unit/json/output.json +348 -0
- data/spec/fixtures/unit/json/output_without_puppet_function.json +301 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/spec_helper_acceptance.rb +27 -0
- data/spec/unit/puppet-strings/json_spec.rb +136 -0
- data/spec/unit/puppet-strings/yard/handlers/puppet/class_handler_spec.rb +155 -0
- data/spec/unit/puppet-strings/yard/handlers/puppet/defined_type_handler_spec.rb +155 -0
- data/spec/unit/puppet-strings/yard/handlers/puppet/function_handler_spec.rb +169 -0
- data/spec/unit/puppet-strings/yard/handlers/ruby/function_handler_spec.rb +613 -0
- data/spec/unit/puppet-strings/yard/handlers/ruby/provider_handler_spec.rb +90 -0
- data/spec/unit/puppet-strings/yard/handlers/ruby/type_handler_spec.rb +214 -0
- data/spec/unit/puppet-strings/yard/parsers/puppet/parser_spec.rb +171 -0
- metadata +115 -92
- data/lib/puppet-strings/rake_tasks.rb +0 -18
- data/lib/puppet_x/puppetlabs/strings.rb +0 -64
- data/lib/puppet_x/puppetlabs/strings/actions.rb +0 -92
- data/lib/puppet_x/puppetlabs/strings/pops/yard_statement.rb +0 -79
- data/lib/puppet_x/puppetlabs/strings/pops/yard_transformer.rb +0 -47
- data/lib/puppet_x/puppetlabs/strings/util.rb +0 -65
- data/lib/puppet_x/puppetlabs/strings/yard/code_objects/defined_type_object.rb +0 -33
- data/lib/puppet_x/puppetlabs/strings/yard/code_objects/host_class_object.rb +0 -22
- data/lib/puppet_x/puppetlabs/strings/yard/code_objects/method_object.rb +0 -62
- data/lib/puppet_x/puppetlabs/strings/yard/code_objects/provider_object.rb +0 -24
- data/lib/puppet_x/puppetlabs/strings/yard/code_objects/puppet_namespace_object.rb +0 -48
- data/lib/puppet_x/puppetlabs/strings/yard/code_objects/type_object.rb +0 -42
- data/lib/puppet_x/puppetlabs/strings/yard/core_ext/yard.rb +0 -40
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/base.rb +0 -13
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/defined_type_handler.rb +0 -31
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/heredoc_helper.rb +0 -80
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/host_class_handler.rb +0 -42
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/provider_handler.rb +0 -95
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/puppet_3x_function_handler.rb +0 -54
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/puppet_4x_function_handler.rb +0 -234
- data/lib/puppet_x/puppetlabs/strings/yard/handlers/type_handler.rb +0 -295
- data/lib/puppet_x/puppetlabs/strings/yard/json_registry_store.rb +0 -85
- data/lib/puppet_x/puppetlabs/strings/yard/monkey_patches.rb +0 -68
- data/lib/puppet_x/puppetlabs/strings/yard/parser.rb +0 -30
- data/lib/puppet_x/puppetlabs/strings/yard/tags/directives.rb +0 -9
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/definedtype/html/docstring.erb +0 -34
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/definedtype/html/header.erb +0 -5
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/definedtype/html/parameter_details.erb +0 -6
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/definedtype/html/setup.rb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/definedtype/setup.rb +0 -49
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/fulldoc/html/full_list_class.erb +0 -2
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/fulldoc/html/full_list_puppet_manifest.erb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/fulldoc/html/full_list_puppet_plugin.erb +0 -21
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/fulldoc/html/full_list_puppet_provider.erb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/fulldoc/html/full_list_puppet_type.erb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/fulldoc/html/setup.rb +0 -82
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/hostclass/html/box_info.erb +0 -22
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/hostclass/html/setup.rb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/hostclass/html/subclasses.erb +0 -4
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/hostclass/setup.rb +0 -21
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/html_helper.rb +0 -139
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/layout/html/setup.rb +0 -18
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/method_details/html/header.erb +0 -17
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/method_details/setup.rb +0 -21
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/method_details/text/header.erb +0 -2
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/command_details.erb +0 -8
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/confine_details.erb +0 -10
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/default_details.erb +0 -10
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/docstring.erb +0 -34
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/feature_details.erb +0 -10
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/header.erb +0 -5
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/html/setup.rb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/provider/setup.rb +0 -50
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/puppetnamespace/html/box_info.erb +0 -11
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/puppetnamespace/html/header.erb +0 -5
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/puppetnamespace/html/method_details_list.erb +0 -53
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/puppetnamespace/html/method_summary.erb +0 -20
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/puppetnamespace/html/setup.rb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/puppetnamespace/setup.rb +0 -91
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/template_helper.rb +0 -192
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/type/html/docstring.erb +0 -34
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/type/html/header.erb +0 -5
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/type/html/parameter_details.erb +0 -12
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/type/html/provider_details.erb +0 -10
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/type/html/setup.rb +0 -1
- data/lib/puppet_x/puppetlabs/strings/yard/templates/default/type/setup.rb +0 -55
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
# Loosely based on the TreeDumper classes in Pops::Model. The responsibility of
|
|
2
|
-
# this class is to walk a Pops::Model and output objects that can be consumed
|
|
3
|
-
# by YARD handlers.
|
|
4
|
-
#
|
|
5
|
-
# @note Currently, this class only extracts node, host class and type
|
|
6
|
-
# definitions.
|
|
7
|
-
class PuppetX::PuppetLabs::Strings::Pops::YARDTransformer
|
|
8
|
-
def initialize
|
|
9
|
-
@transform_visitor = Puppet::Pops::Visitor.new(self, 'transform')
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def transform(o)
|
|
13
|
-
@transform_visitor.visit(o)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
-
def transform_Factory(o)
|
|
19
|
-
transform(o.current)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def transform_Program(o)
|
|
23
|
-
o.definitions.map{|d| transform(d)}
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# Extract comments from type definitions and class definitions. Wrap them
|
|
27
|
-
# into YARDStatement objects that provide an interface for YARD handlers.
|
|
28
|
-
def transform_NamedDefinition(o)
|
|
29
|
-
obj = PuppetX::PuppetLabs::Strings::Pops::YARDStatement.new(o)
|
|
30
|
-
obj.parameters = o.parameters.map do |p|
|
|
31
|
-
param_tuple = [transform(p)]
|
|
32
|
-
param_tuple << ( p.value.nil? ? nil : transform(p.value) )
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
obj
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# Catch-all visitor.
|
|
39
|
-
def transform_Positioned(o)
|
|
40
|
-
PuppetX::PuppetLabs::Strings::Pops::YARDStatement.new(o)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# nil in... nil out!
|
|
44
|
-
def transform_NilClass(o)
|
|
45
|
-
nil
|
|
46
|
-
end
|
|
47
|
-
end
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
require 'puppet_x/puppetlabs/strings/actions'
|
|
2
|
-
|
|
3
|
-
module PuppetX::PuppetLabs::Strings::Util
|
|
4
|
-
MODULE_SOURCEFILES = ['manifests/**/*.pp', 'lib/**/*.rb']
|
|
5
|
-
|
|
6
|
-
def self.generate(args = [])
|
|
7
|
-
yardoc_actions = PuppetX::PuppetLabs::Strings::Actions.new(Puppet[:debug], Puppet[:trace])
|
|
8
|
-
|
|
9
|
-
# The last element of the argument array should be the options hash.
|
|
10
|
-
# We don't have any options yet, so for now just pop the hash off and
|
|
11
|
-
# toss it.
|
|
12
|
-
#
|
|
13
|
-
# NOTE: The Puppet Face will throw 'unrecognized option' errors if any
|
|
14
|
-
# YARD options are passed to it. The best way to approach this problem is
|
|
15
|
-
# by using the `.yardopts` file. YARD will autoload any options placed in
|
|
16
|
-
# that file.
|
|
17
|
-
options = args.pop
|
|
18
|
-
YARD::Config.options = YARD::Config.options.merge(options) if options
|
|
19
|
-
|
|
20
|
-
# For now, assume the remaining positional args are a list of manifest
|
|
21
|
-
# and ruby files to parse.
|
|
22
|
-
yard_args = (args.empty? ? MODULE_SOURCEFILES : args)
|
|
23
|
-
|
|
24
|
-
# If json is going to be emitted to stdout, suppress statistics.
|
|
25
|
-
if options && options[:emit_json_stdout]
|
|
26
|
-
yard_args.push('--no-stats')
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# This line monkeypatches yard's progress indicator so it doesn't write
|
|
30
|
-
# all over the terminal. This should definitely not be in real code, but
|
|
31
|
-
# it's very handy for debugging with pry
|
|
32
|
-
#class YARD::Logger; def progress(*args); end; end
|
|
33
|
-
YARD::Tags::Library.define_directive("puppet.type.param",
|
|
34
|
-
:with_types_and_name,
|
|
35
|
-
PuppetX::PuppetLabs::Strings::YARD::Tags::PuppetTypeParameterDirective)
|
|
36
|
-
|
|
37
|
-
yardoc_actions.generate_documentation(*yard_args)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def self.serve(args = [])
|
|
41
|
-
server_actions = PuppetX::PuppetLabs::Strings::Actions.new(Puppet[:debug], Puppet[:trace])
|
|
42
|
-
|
|
43
|
-
args.pop
|
|
44
|
-
|
|
45
|
-
module_names = args
|
|
46
|
-
|
|
47
|
-
# FIXME: This is pretty inefficient as it forcibly re-generates the YARD
|
|
48
|
-
# indicies each time the server is started. However, it ensures things are
|
|
49
|
-
# generated properly.
|
|
50
|
-
module_list = server_actions.index_documentation_for_modules(module_names, MODULE_SOURCEFILES)
|
|
51
|
-
|
|
52
|
-
module_tuples = server_actions.generate_module_tuples(module_list)
|
|
53
|
-
|
|
54
|
-
module_tuples.map! do |mod|
|
|
55
|
-
[mod[:name], mod[:index_path]]
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# The `-m` flag means a list of name/path pairs will follow. The name is
|
|
59
|
-
# used as the module name and the path indicates which `.yardoc` index to
|
|
60
|
-
# generate documentation from.
|
|
61
|
-
yard_args = %w[-m -q] + module_tuples.flatten
|
|
62
|
-
|
|
63
|
-
server_actions.serve_documentation(*yard_args)
|
|
64
|
-
end
|
|
65
|
-
end
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
require 'json'
|
|
2
|
-
|
|
3
|
-
class PuppetX::PuppetLabs::Strings::YARD::CodeObjects::DefinedTypeObject < PuppetX::PuppetLabs::Strings::YARD::CodeObjects::PuppetNamespaceObject
|
|
4
|
-
# A list of parameters attached to this class.
|
|
5
|
-
# @return [Array<Array(String, String)>]
|
|
6
|
-
attr_accessor :parameters
|
|
7
|
-
attr_accessor :type_info
|
|
8
|
-
|
|
9
|
-
def to_s
|
|
10
|
-
name.to_s
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def to_json(*a)
|
|
14
|
-
{
|
|
15
|
-
"name" => @name,
|
|
16
|
-
"file" => file,
|
|
17
|
-
"line" => line,
|
|
18
|
-
"parameters" => Hash[@parameters],
|
|
19
|
-
"docstring" => Puppet::Util::Docs.scrub(@docstring),
|
|
20
|
-
"signatures" => @type_info.map do |signature|
|
|
21
|
-
signature.map do |key, value|
|
|
22
|
-
{
|
|
23
|
-
"name" => key,
|
|
24
|
-
"type" => value,
|
|
25
|
-
}
|
|
26
|
-
end
|
|
27
|
-
end,
|
|
28
|
-
"examples" => self.tags.map do |tag|
|
|
29
|
-
tag.text if tag.tag_name == 'example'
|
|
30
|
-
end.compact,
|
|
31
|
-
}.to_json(*a)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
class PuppetX::PuppetLabs::Strings::YARD::CodeObjects::HostClassObject < PuppetX::PuppetLabs::Strings::YARD::CodeObjects::DefinedTypeObject
|
|
2
|
-
# The {HostClassObject} that this class inherits from, if any.
|
|
3
|
-
# @return [HostClassObject, Proxy, nil]
|
|
4
|
-
attr_accessor :parent_class
|
|
5
|
-
|
|
6
|
-
# NOTE: `include_mods` is never used as it makes no sense for Puppet, but
|
|
7
|
-
# this is called by `YARD::Registry` and it will pass a parameter.
|
|
8
|
-
def inheritance_tree(include_mods = false)
|
|
9
|
-
if parent_class.is_a?(PuppetX::PuppetLabs::Strings::YARD::CodeObjects::HostClassObject)
|
|
10
|
-
# Cool. We got a host class. Return self + parent inheritance tree.
|
|
11
|
-
[self] + parent_class.inheritance_tree
|
|
12
|
-
elsif parent_class.is_a?(YARD::CodeObjects::Proxy)
|
|
13
|
-
# We have a reference to a parent that has not been created yet. Just
|
|
14
|
-
# return it.
|
|
15
|
-
[self, parent_class]
|
|
16
|
-
else
|
|
17
|
-
# Most likely no parent class. But also possibly an object that we
|
|
18
|
-
# shouldn't inherit from. Just return self.
|
|
19
|
-
[self]
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
class YARD::CodeObjects::MethodObject
|
|
2
|
-
|
|
3
|
-
# Override to_s and to_json methods in Yard's MethodObject so that they
|
|
4
|
-
# return output formatted as I like for puppet 3x and 4x methods.
|
|
5
|
-
def to_s
|
|
6
|
-
if self[:puppet_4x_function] || self[:puppet_3x_function]
|
|
7
|
-
name.to_s
|
|
8
|
-
else
|
|
9
|
-
super
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def to_json(*a)
|
|
14
|
-
if self[:puppet_4x_function]
|
|
15
|
-
{
|
|
16
|
-
"name" => @name,
|
|
17
|
-
"file" => file,
|
|
18
|
-
"line" => line,
|
|
19
|
-
"function_api_version" => 4,
|
|
20
|
-
"docstring" => Puppet::Util::Docs.scrub(@docstring),
|
|
21
|
-
"examples" => self.tags.map do |tag|
|
|
22
|
-
tag.text if tag.tag_name == 'example'
|
|
23
|
-
end.compact,
|
|
24
|
-
"documented_params" => @parameters.map do |tuple|
|
|
25
|
-
{
|
|
26
|
-
"name" => tuple[0],
|
|
27
|
-
"type" => tuple[1],
|
|
28
|
-
}
|
|
29
|
-
end,
|
|
30
|
-
"signatures" => @type_info.map do |signature|
|
|
31
|
-
signature.map do |key, value|
|
|
32
|
-
{
|
|
33
|
-
"name" => key,
|
|
34
|
-
"type" => value,
|
|
35
|
-
}
|
|
36
|
-
end
|
|
37
|
-
end,
|
|
38
|
-
}.to_json(*a)
|
|
39
|
-
elsif self[:puppet_3x_function]
|
|
40
|
-
{
|
|
41
|
-
"name" => @name,
|
|
42
|
-
"file" => file,
|
|
43
|
-
"line" => line,
|
|
44
|
-
"function_api_version" => 3,
|
|
45
|
-
"docstring" => Puppet::Util::Docs.scrub(@docstring),
|
|
46
|
-
"documented_params" => @parameters.map do |tuple|
|
|
47
|
-
{
|
|
48
|
-
"name" => tuple[0],
|
|
49
|
-
"type" => tuple[1],
|
|
50
|
-
}
|
|
51
|
-
end,
|
|
52
|
-
"examples" => self.tags.map do |tag|
|
|
53
|
-
tag.text if tag.tag_name == 'example'
|
|
54
|
-
end.compact,
|
|
55
|
-
}.to_json(*a)
|
|
56
|
-
else
|
|
57
|
-
super
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
class PuppetX::PuppetLabs::Strings::YARD::CodeObjects::ProviderObject < PuppetX::PuppetLabs::Strings::YARD::CodeObjects::PuppetNamespaceObject
|
|
2
|
-
# A list of parameters attached to this class.
|
|
3
|
-
# @return [Array<Array(String, String)>]
|
|
4
|
-
attr_accessor :parameters
|
|
5
|
-
|
|
6
|
-
def to_json(*a)
|
|
7
|
-
{
|
|
8
|
-
"name" => @name,
|
|
9
|
-
"type_name" => @type_name,
|
|
10
|
-
"file" => file,
|
|
11
|
-
"line" => line,
|
|
12
|
-
"docstring" => Puppet::Util::Docs.scrub(@docstring),
|
|
13
|
-
"commands" => @commands,
|
|
14
|
-
"confines" => @confines,
|
|
15
|
-
"defaults" => @defaults,
|
|
16
|
-
"features" => @features,
|
|
17
|
-
"examples" => self.tags.map do |tag|
|
|
18
|
-
tag.text if tag.tag_name == 'example'
|
|
19
|
-
end.compact,
|
|
20
|
-
}.to_json(*a)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
end
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
class PuppetX::PuppetLabs::Strings::YARD::CodeObjects::PuppetNamespaceObject < YARD::CodeObjects::NamespaceObject
|
|
2
|
-
|
|
3
|
-
attr_accessor :type_info
|
|
4
|
-
# NOTE: `YARD::Registry#resolve` requires a method with this signature to
|
|
5
|
-
# be present on all subclasses of `NamespaceObject`.
|
|
6
|
-
def inheritance_tree(include_mods = false)
|
|
7
|
-
[self]
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def to_s
|
|
11
|
-
name.to_s
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def to_json(*a)
|
|
15
|
-
{
|
|
16
|
-
"name" => @name,
|
|
17
|
-
"file" => file,
|
|
18
|
-
"line" => line,
|
|
19
|
-
"docstring" => @docstring,
|
|
20
|
-
"examples" => self.tags.map do |tag|
|
|
21
|
-
tag.text if tag.tag_name == 'example'
|
|
22
|
-
end.compact,
|
|
23
|
-
}.to_json(*a)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# FIXME: We used to override `self.new` to ensure no YARD proxies were
|
|
27
|
-
# created for namespaces segments that did not map to a host class or
|
|
28
|
-
# defined type. Fighting the system in this way turned out to be
|
|
29
|
-
# counter-productive.
|
|
30
|
-
#
|
|
31
|
-
# However, if a proxy is left in, YARD will drop back to namspace-mangling
|
|
32
|
-
# heuristics that are very specific to Ruby and which produce ugly paths in
|
|
33
|
-
# the resulting output. Need to find a way to address this.
|
|
34
|
-
#
|
|
35
|
-
# Tried:
|
|
36
|
-
#
|
|
37
|
-
# - Overriding self.new in the code object. Failed because self.new
|
|
38
|
-
# overrides are gross and difficult to pull off. Especially when
|
|
39
|
-
# replacing an existing override.
|
|
40
|
-
#
|
|
41
|
-
# - Adding functionality to the base handler to ensure something other
|
|
42
|
-
# than a proxy occupies each namespace segment. Failed because once a
|
|
43
|
-
# code object is created with a namespace, it will never update.
|
|
44
|
-
# Unless that namespace is set to a Proxy.
|
|
45
|
-
#
|
|
46
|
-
# def self.new(namespace, name, *args, &block)
|
|
47
|
-
end
|
|
48
|
-
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
class PuppetX::PuppetLabs::Strings::YARD::CodeObjects::TypeObject < PuppetX::PuppetLabs::Strings::YARD::CodeObjects::PuppetNamespaceObject
|
|
2
|
-
# A list of parameters attached to this class.
|
|
3
|
-
# @return [Array<Array(String, String)>]
|
|
4
|
-
attr_accessor :parameters
|
|
5
|
-
|
|
6
|
-
def to_json(*a)
|
|
7
|
-
{
|
|
8
|
-
"name" => @name,
|
|
9
|
-
"file" => file,
|
|
10
|
-
"line" => line,
|
|
11
|
-
"docstring" => Puppet::Util::Docs.scrub(@docstring),
|
|
12
|
-
"parameters" => @parameter_details.map do |obj|
|
|
13
|
-
{
|
|
14
|
-
"allowed_values" => obj[:allowed_values] ? obj[:allowed_values].flatten : [],
|
|
15
|
-
"default" => obj[:default],
|
|
16
|
-
"docstring" => Puppet::Util::Docs.scrub(obj[:desc] || ''),
|
|
17
|
-
"namevar" => obj[:namevar],
|
|
18
|
-
"name" => obj[:name],
|
|
19
|
-
}
|
|
20
|
-
end,
|
|
21
|
-
"examples" => self.tags.map do |tag|
|
|
22
|
-
tag.text if tag.tag_name == 'example'
|
|
23
|
-
end.compact,
|
|
24
|
-
"properties" => @property_details.map do |obj|
|
|
25
|
-
{
|
|
26
|
-
"allowed_values" => obj[:allowed_values] ? obj[:allowed_values].flatten : [],
|
|
27
|
-
"default" => obj[:default],
|
|
28
|
-
"docstring" => Puppet::Util::Docs.scrub(obj[:desc] || ''),
|
|
29
|
-
"name" => obj[:name],
|
|
30
|
-
}
|
|
31
|
-
end,
|
|
32
|
-
"features" => @features.map do |obj|
|
|
33
|
-
{
|
|
34
|
-
"docstring" => Puppet::Util::Docs.scrub(obj[:desc] || ''),
|
|
35
|
-
"methods" => obj[:methods],
|
|
36
|
-
"name" => obj[:name],
|
|
37
|
-
}
|
|
38
|
-
end,
|
|
39
|
-
}.to_json(*a)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
end
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
require 'yard'
|
|
2
|
-
|
|
3
|
-
require 'puppet_x/puppetlabs/strings'
|
|
4
|
-
|
|
5
|
-
# Patch the regular expression used to match namespaces
|
|
6
|
-
# so it will allow namespace segments that begin with
|
|
7
|
-
# both uppercase and lowercase letters (i.e. both
|
|
8
|
-
# Puppet::Namespace and puppet::namespace)
|
|
9
|
-
YARD::CodeObjects.send(:remove_const, :CONSTANTMATCH)
|
|
10
|
-
YARD::CodeObjects::CONSTANTMATCH = /[a-zA-Z]\w*/
|
|
11
|
-
|
|
12
|
-
# This is a temporary hack until a new version of YARD is
|
|
13
|
-
# released. We submitted a patch to YARD to add the
|
|
14
|
-
# CONSTANTSTART constant so that we could patch it and
|
|
15
|
-
# successfully match our own namesapces. However until
|
|
16
|
-
# the next version of the YARD gem is released, we must
|
|
17
|
-
# patch the problematic method itself as it is not yet
|
|
18
|
-
# using the added variable
|
|
19
|
-
if defined? YARD::CodeObjects::CONSTANTSTART
|
|
20
|
-
YARD::CodeObjects.send(:remove_const, :CONSTANTSTART)
|
|
21
|
-
YARD::CodeObjects::CONSTANTSTART = /^[a-zA-Z]/
|
|
22
|
-
else
|
|
23
|
-
class YARD::CodeObjects::Proxy
|
|
24
|
-
def proxy_path
|
|
25
|
-
if @namespace.root?
|
|
26
|
-
(@imethod ? YARD::CodeObjects::ISEP : "") + name.to_s
|
|
27
|
-
elsif @origname
|
|
28
|
-
if @origname =~ /^[a-zA-Z]/
|
|
29
|
-
@origname
|
|
30
|
-
else
|
|
31
|
-
[namespace.path, @origname].join
|
|
32
|
-
end
|
|
33
|
-
elsif name.to_s =~ /^[a-zA-Z]/ # const
|
|
34
|
-
name.to_s
|
|
35
|
-
else # class meth?
|
|
36
|
-
[namespace.path, name.to_s].join(YARD::CodeObjects::CSEP)
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
require 'puppet_x/puppetlabs/strings/yard/core_ext/yard'
|
|
2
|
-
|
|
3
|
-
class PuppetX::PuppetLabs::Strings::YARD::Handlers::Base < ::YARD::Handlers::Base
|
|
4
|
-
# Easy access to Pops model objects for handler matching.
|
|
5
|
-
include Puppet::Pops::Model
|
|
6
|
-
# Easy access to custom code objects from which documentation is generated.
|
|
7
|
-
include PuppetX::PuppetLabs::Strings::YARD::CodeObjects
|
|
8
|
-
|
|
9
|
-
def self.handles?(statement)
|
|
10
|
-
handlers.any? {|h| h == statement.type}
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
end
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
class PuppetX::PuppetLabs::Strings::YARD::Handlers::DefinedTypeHandler < PuppetX::PuppetLabs::Strings::YARD::Handlers:: Base
|
|
2
|
-
handles ResourceTypeDefinition
|
|
3
|
-
|
|
4
|
-
process do
|
|
5
|
-
obj = DefinedTypeObject.new(:root, statement.pops_obj.name) do |o|
|
|
6
|
-
o.parameters = statement.parameters.map do |a|
|
|
7
|
-
param_tuple = [a[0].pops_obj.name]
|
|
8
|
-
param_tuple << ( a[1].nil? ? nil : a[1].source )
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
tp = Puppet::Pops::Types::TypeParser.new
|
|
12
|
-
param_type_info = {}
|
|
13
|
-
statement.pops_obj.parameters.each do |pop_param|
|
|
14
|
-
# If the parameter's type expression is nil, default to Any
|
|
15
|
-
if pop_param.type_expr == nil
|
|
16
|
-
param_type_info[pop_param.name] = Puppet::Pops::Types::TypeFactory.any()
|
|
17
|
-
else
|
|
18
|
-
begin
|
|
19
|
-
param_type_info[pop_param.name] = tp.interpret_any(pop_param.type_expr)
|
|
20
|
-
rescue Puppet::ParseError => e
|
|
21
|
-
# If the type could not be interpreted insert a prominent warning
|
|
22
|
-
param_type_info[pop_param.name] = "Type Error: #{e.message}"
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
obj.type_info = [param_type_info]
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
register obj
|
|
30
|
-
end
|
|
31
|
-
end
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
class HereDocHelper
|
|
2
|
-
# NOTE: The following methods duplicate functionality from
|
|
3
|
-
# Puppet::Util::Reference and Puppet::Parser::Functions.functiondocs
|
|
4
|
-
#
|
|
5
|
-
# However, implementing this natively in YARD is a good test for the
|
|
6
|
-
# feasibility of extracting custom Ruby documentation. In the end, the
|
|
7
|
-
# existing approach taken by Puppet::Util::Reference may be the best due to
|
|
8
|
-
# the heavy use of metaprogramming in Types and Providers.
|
|
9
|
-
|
|
10
|
-
# Extracts the Puppet function name and options hash from the parsed
|
|
11
|
-
# definition.
|
|
12
|
-
#
|
|
13
|
-
# @return [(String, Hash{String => String})]
|
|
14
|
-
def process_parameters(statement)
|
|
15
|
-
# Passing `false` to prameters excludes the block param from the returned
|
|
16
|
-
# list.
|
|
17
|
-
name, opts = statement.parameters(false).compact
|
|
18
|
-
|
|
19
|
-
name = process_element(name)
|
|
20
|
-
|
|
21
|
-
# Don't try to process options if we don't have any
|
|
22
|
-
if !opts.nil?
|
|
23
|
-
opts = opts.map do |tuple|
|
|
24
|
-
# Jump down into the S-Expression that represents a hashrocket, `=>`,
|
|
25
|
-
# and the values on either side of it.
|
|
26
|
-
tuple.jump(:assoc).map{|e| process_element(e)}
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
options = Hash[opts]
|
|
30
|
-
else
|
|
31
|
-
options = {}
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
[name, options]
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Sometimes the YARD parser returns Heredoc strings that start with `<-`
|
|
38
|
-
# instead of `<<-`.
|
|
39
|
-
HEREDOC_START = /^<?<-/
|
|
40
|
-
|
|
41
|
-
def is_heredoc?(str)
|
|
42
|
-
HEREDOC_START.match(str)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Turns an entry in the method parameter list into a string.
|
|
46
|
-
#
|
|
47
|
-
# @param ele [YARD::Parser::Ruby::AstNode]
|
|
48
|
-
# @return [String]
|
|
49
|
-
def process_element(ele)
|
|
50
|
-
ele = ele.jump(:ident, :string_content)
|
|
51
|
-
|
|
52
|
-
case ele.type
|
|
53
|
-
when :ident
|
|
54
|
-
ele.source
|
|
55
|
-
when :string_content
|
|
56
|
-
source = ele.source
|
|
57
|
-
if is_heredoc? source
|
|
58
|
-
process_heredoc(source)
|
|
59
|
-
else
|
|
60
|
-
source
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# Cleans up and formats Heredoc contents parsed by YARD.
|
|
66
|
-
#
|
|
67
|
-
# @param source [String]
|
|
68
|
-
# @return [String]
|
|
69
|
-
def process_heredoc(source)
|
|
70
|
-
source = source.lines.to_a
|
|
71
|
-
|
|
72
|
-
# YARD adds a line of source context on either side of the Heredoc
|
|
73
|
-
# contents.
|
|
74
|
-
source.shift
|
|
75
|
-
source.pop
|
|
76
|
-
|
|
77
|
-
# This utility method normalizes indentation and trims whitespace.
|
|
78
|
-
Puppet::Util::Docs.scrub(source.join)
|
|
79
|
-
end
|
|
80
|
-
end
|