puppet-strings 2.9.0 → 3.0.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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +257 -237
  3. data/README.md +52 -65
  4. data/lib/puppet/face/strings.rb +30 -50
  5. data/lib/puppet/feature/rgen.rb +1 -1
  6. data/lib/puppet/feature/yard.rb +1 -1
  7. data/lib/puppet-strings/describe.rb +18 -18
  8. data/lib/puppet-strings/markdown/base.rb +63 -28
  9. data/lib/puppet-strings/markdown/data_type.rb +4 -0
  10. data/lib/puppet-strings/markdown/defined_type.rb +4 -0
  11. data/lib/puppet-strings/markdown/function.rb +13 -8
  12. data/lib/puppet-strings/markdown/helpers.rb +21 -0
  13. data/lib/puppet-strings/markdown/puppet_class.rb +4 -0
  14. data/lib/puppet-strings/markdown/puppet_plan.rb +4 -0
  15. data/lib/puppet-strings/markdown/puppet_task.rb +4 -1
  16. data/lib/puppet-strings/markdown/resource_type.rb +13 -3
  17. data/lib/puppet-strings/markdown/templates/classes_and_defines.erb +4 -4
  18. data/lib/puppet-strings/markdown/templates/data_type.erb +5 -9
  19. data/lib/puppet-strings/markdown/templates/data_type_function.erb +1 -1
  20. data/lib/puppet-strings/markdown/templates/function.erb +1 -1
  21. data/lib/puppet-strings/markdown/templates/puppet_task.erb +1 -1
  22. data/lib/puppet-strings/markdown/templates/resource_type.erb +6 -6
  23. data/lib/puppet-strings/markdown/templates/table_of_contents.erb +8 -8
  24. data/lib/puppet-strings/markdown.rb +62 -20
  25. data/lib/puppet-strings/monkey_patches/display_object_command.rb +4 -1
  26. data/lib/puppet-strings/tasks/generate.rb +8 -10
  27. data/lib/puppet-strings/tasks/gh_pages.rb +6 -5
  28. data/lib/puppet-strings/tasks/validate.rb +1 -1
  29. data/lib/puppet-strings/tasks.rb +5 -7
  30. data/lib/puppet-strings/version.rb +1 -1
  31. data/lib/puppet-strings/yard/code_objects/class.rb +2 -2
  32. data/lib/puppet-strings/yard/code_objects/data_type.rb +4 -4
  33. data/lib/puppet-strings/yard/code_objects/data_type_alias.rb +1 -1
  34. data/lib/puppet-strings/yard/code_objects/defined_type.rb +2 -2
  35. data/lib/puppet-strings/yard/code_objects/function.rb +11 -11
  36. data/lib/puppet-strings/yard/code_objects/group.rb +1 -1
  37. data/lib/puppet-strings/yard/code_objects/plan.rb +4 -2
  38. data/lib/puppet-strings/yard/code_objects/provider.rb +2 -2
  39. data/lib/puppet-strings/yard/code_objects/task.rb +6 -7
  40. data/lib/puppet-strings/yard/code_objects/type.rb +6 -6
  41. data/lib/puppet-strings/yard/handlers/helpers.rb +3 -4
  42. data/lib/puppet-strings/yard/handlers/json/base.rb +2 -1
  43. data/lib/puppet-strings/yard/handlers/json/task_handler.rb +4 -4
  44. data/lib/puppet-strings/yard/handlers/puppet/base.rb +7 -2
  45. data/lib/puppet-strings/yard/handlers/puppet/function_handler.rb +3 -2
  46. data/lib/puppet-strings/yard/handlers/ruby/base.rb +3 -2
  47. data/lib/puppet-strings/yard/handlers/ruby/data_type_handler.rb +19 -16
  48. data/lib/puppet-strings/yard/handlers/ruby/function_handler.rb +70 -50
  49. data/lib/puppet-strings/yard/handlers/ruby/provider_handler.rb +2 -1
  50. data/lib/puppet-strings/yard/handlers/ruby/rsapi_handler.rb +12 -9
  51. data/lib/puppet-strings/yard/handlers/ruby/type_base.rb +27 -27
  52. data/lib/puppet-strings/yard/handlers/ruby/type_extras_handler.rb +2 -3
  53. data/lib/puppet-strings/yard/handlers/ruby/type_handler.rb +2 -1
  54. data/lib/puppet-strings/yard/parsers/json/parser.rb +3 -2
  55. data/lib/puppet-strings/yard/parsers/json/task_statement.rb +3 -3
  56. data/lib/puppet-strings/yard/parsers/puppet/parser.rb +7 -7
  57. data/lib/puppet-strings/yard/parsers/puppet/statement.rb +16 -23
  58. data/lib/puppet-strings/yard/parsers.rb +1 -0
  59. data/lib/puppet-strings/yard/tags/enum_tag.rb +1 -2
  60. data/lib/puppet-strings/yard/tags/factory.rb +1 -1
  61. data/lib/puppet-strings/yard/tags/overload_tag.rb +7 -7
  62. data/lib/puppet-strings/yard/tags/parameter_directive.rb +2 -2
  63. data/lib/puppet-strings/yard/tags/property_directive.rb +2 -2
  64. data/lib/puppet-strings/yard/tags/summary_tag.rb +1 -2
  65. data/lib/puppet-strings/yard/util.rb +11 -4
  66. data/lib/puppet-strings/yard.rb +6 -6
  67. data/lib/puppet-strings.rb +7 -13
  68. metadata +13 -20
  69. data/lib/puppet-strings/markdown/data_types.rb +0 -43
  70. data/lib/puppet-strings/markdown/defined_types.rb +0 -39
  71. data/lib/puppet-strings/markdown/functions.rb +0 -40
  72. data/lib/puppet-strings/markdown/puppet_classes.rb +0 -39
  73. data/lib/puppet-strings/markdown/puppet_plans.rb +0 -39
  74. data/lib/puppet-strings/markdown/puppet_tasks.rb +0 -36
  75. data/lib/puppet-strings/markdown/resource_types.rb +0 -39
  76. data/lib/puppet-strings/markdown/table_of_contents.rb +0 -26
@@ -8,18 +8,18 @@ require 'puppet-strings/yard/util'
8
8
  # Implements the handler for Puppet functions written in Ruby.
9
9
  class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard::Handlers::Ruby::Base
10
10
  # Represents the list of Puppet 4.x function API methods to support.
11
- DISPATCH_METHOD_NAMES = %w(
12
- param
13
- required_param
14
- optional_param
15
- repeated_param
16
- optional_repeated_param
17
- required_repeated_param
18
- block_param
19
- required_block_param
20
- optional_block_param
21
- return_type
22
- ).freeze
11
+ DISPATCH_METHOD_NAMES = [
12
+ 'param',
13
+ 'required_param',
14
+ 'optional_param',
15
+ 'repeated_param',
16
+ 'optional_repeated_param',
17
+ 'required_repeated_param',
18
+ 'block_param',
19
+ 'required_block_param',
20
+ 'optional_block_param',
21
+ 'return_type',
22
+ ].freeze
23
23
 
24
24
  namespace_only
25
25
  handles method_call(:create_function)
@@ -33,13 +33,13 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
33
33
  return unless statement.count > 1
34
34
 
35
35
  module_name = statement[0].source
36
- return unless module_name == 'Puppet::Functions' || module_name == 'Puppet::Parser::Functions' || module_name == 'newfunction'
36
+ return unless ['Puppet::Functions', 'Puppet::Parser::Functions', 'newfunction'].include?(module_name)
37
37
 
38
38
  # Create and register the function object
39
- is_3x = module_name == 'Puppet::Parser::Functions' || module_name == 'newfunction'
39
+ is_3x = ['Puppet::Parser::Functions', 'newfunction'].include?(module_name)
40
40
  object = PuppetStrings::Yard::CodeObjects::Function.new(
41
41
  get_name(statement, 'Puppet::Functions.create_function'),
42
- is_3x ? PuppetStrings::Yard::CodeObjects::Function::RUBY_3X : PuppetStrings::Yard::CodeObjects::Function::RUBY_4X
42
+ is_3x ? PuppetStrings::Yard::CodeObjects::Function::RUBY_3X : PuppetStrings::Yard::CodeObjects::Function::RUBY_4X,
43
43
  )
44
44
  object.source = statement
45
45
  register object
@@ -56,7 +56,7 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
56
56
  end
57
57
 
58
58
  # Populate the parameters and the return tag
59
- object.parameters = object.tags(:param).map{ |p| [p.name, nil] }
59
+ object.parameters = object.tags(:param).map { |p| [p.name, nil] }
60
60
  add_return_tag(object, statement.file, statement.line)
61
61
  else
62
62
  # For 4x, auto generate tags based on dispatch docstrings
@@ -71,11 +71,27 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
71
71
  end
72
72
 
73
73
  private
74
+
74
75
  def add_tags(object)
75
76
  log.warn "Missing documentation for Puppet function '#{object.name}' at #{statement.file}:#{statement.line}." if object.docstring.empty? && object.tags.empty?
76
- log.warn "The docstring for Puppet 4.x function '#{object.name}' contains @param tags near #{object.file}:#{object.line}: parameter documentation should be made on the dispatch call." unless object.tags(:param).empty?
77
- log.warn "The docstring for Puppet 4.x function '#{object.name}' contains @return tags near #{object.file}:#{object.line}: return value documentation should be made on the dispatch call." unless object.tags(:return).empty?
78
- log.warn "The docstring for Puppet 4.x function '#{object.name}' contains @overload tags near #{object.file}:#{object.line}: overload tags are automatically generated from the dispatch calls." unless object.tags(:overload).empty?
77
+
78
+ unless object.tags(:param).empty?
79
+ log.warn "The docstring for Puppet 4.x function '#{object.name}' "\
80
+ "contains @param tags near #{object.file}:#{object.line}: parameter "\
81
+ 'documentation should be made on the dispatch call.'
82
+ end
83
+
84
+ unless object.tags(:return).empty?
85
+ log.warn "The docstring for Puppet 4.x function '#{object.name}' "\
86
+ "contains @return tags near #{object.file}:#{object.line}: return "\
87
+ 'value documentation should be made on the dispatch call.'
88
+ end
89
+
90
+ unless object.tags(:overload).empty?
91
+ log.warn "The docstring for Puppet 4.x function '#{object.name}' "\
92
+ "contains @overload tags near #{object.file}:#{object.line}: overload "\
93
+ 'tags are automatically generated from the dispatch calls.'
94
+ end
79
95
 
80
96
  # Delete any existing param/return/overload tags
81
97
  object.docstring.delete_tags(:param)
@@ -106,12 +122,11 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
106
122
  end
107
123
 
108
124
  # If there's only one overload, move the tags to the object itself
109
- if overloads.count == 1
110
- overload = overloads.first
111
- object.parameters = overload.parameters
112
- object.add_tag(*overload.tags)
113
- object.docstring.delete_tags(:overload)
114
- end
125
+ return unless overloads.length == 1
126
+ overload = overloads.first
127
+ object.parameters = overload.parameters
128
+ object.add_tag(*overload.tags)
129
+ object.docstring.delete_tags(:overload)
115
130
  end
116
131
 
117
132
  def add_overload_tag(object, node)
@@ -169,7 +184,7 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
169
184
  node_as_string(parameters[0]),
170
185
  nil, # TODO: determine default from corresponding Ruby method signature?
171
186
  method_name.include?('optional'),
172
- method_name.include?('repeated')
187
+ method_name.include?('repeated'),
173
188
  )
174
189
  end
175
190
 
@@ -200,7 +215,7 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
200
215
  nil, # TODO: determine default from corresponding Ruby method signature?
201
216
  block.method_name.source.include?('optional'),
202
217
  false, # Not repeated
203
- true # Is block
218
+ true, # Is block
204
219
  )
205
220
  end
206
221
  end
@@ -223,29 +238,29 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
223
238
  # Populate the required parameters
224
239
  params = parameters.unnamed_required_params
225
240
  params&.each do |parameter|
226
- add_param_tag(
227
- overload_tag,
228
- param_tags,
229
- parameter.source,
230
- parameter.file,
231
- parameter.line
232
- )
233
- end
241
+ add_param_tag(
242
+ overload_tag,
243
+ param_tags,
244
+ parameter.source,
245
+ parameter.file,
246
+ parameter.line,
247
+ )
248
+ end
234
249
 
235
250
  # Populate the optional parameters
236
251
  params = parameters.unnamed_optional_params
237
252
  params&.each do |parameter|
238
- add_param_tag(
239
- overload_tag,
240
- param_tags,
241
- parameter[0].source,
242
- parameter.file,
243
- parameter.line,
244
- nil,
245
- parameter[1].source,
246
- true
247
- )
248
- end
253
+ add_param_tag(
254
+ overload_tag,
255
+ param_tags,
256
+ parameter[0].source,
257
+ parameter.file,
258
+ parameter.line,
259
+ nil,
260
+ parameter[1].source,
261
+ true,
262
+ )
263
+ end
249
264
 
250
265
  # Populate the splat parameter
251
266
  param = parameters.splat_param
@@ -259,7 +274,7 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
259
274
  nil,
260
275
  nil,
261
276
  false,
262
- true
277
+ true,
263
278
  )
264
279
  end
265
280
 
@@ -276,7 +291,7 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
276
291
  nil,
277
292
  false,
278
293
  false,
279
- true
294
+ true,
280
295
  )
281
296
  end
282
297
 
@@ -290,9 +305,14 @@ class PuppetStrings::Yard::Handlers::Ruby::FunctionHandler < PuppetStrings::Yard
290
305
  end
291
306
 
292
307
  def add_param_tag(object, tags, name, file, line, type = nil, default = nil, optional = false, repeated = false, block = false)
293
- tag = tags.find { |tag| tag.name == name } if tags
308
+ tag = tags.find { |t| t.name == name } if tags
294
309
  log.warn "Missing @param tag for parameter '#{name}' near #{file}:#{line}." unless tag || object.docstring.all.empty?
295
- log.warn "The @param tag for parameter '#{name}' should not contain a type specification near #{file}:#{line}: ignoring in favor of dispatch type information." if type && tag && tag.types && !tag.types.empty?
310
+
311
+ if type && tag && tag.types && !tag.types.empty?
312
+ log.warn "The @param tag for parameter '#{name}' should not contain a "\
313
+ "type specification near #{file}:#{line}: ignoring in favor of "\
314
+ 'dispatch type information.'
315
+ end
296
316
 
297
317
  if repeated
298
318
  name = '*' + name
@@ -44,6 +44,7 @@ class PuppetStrings::Yard::Handlers::Ruby::ProviderHandler < PuppetStrings::Yard
44
44
  end
45
45
 
46
46
  private
47
+
47
48
  def register_provider_docstring(object)
48
49
  # Walk the tree searching for assignments or calls to desc/doc=
49
50
  statement.traverse do |child|
@@ -93,7 +94,7 @@ class PuppetStrings::Yard::Handlers::Ruby::ProviderHandler < PuppetStrings::Yard
93
94
 
94
95
  object.add_confine(node_as_string(kvp[0]) || kvp[0].source, node_as_string(kvp[1]) || kvp[1].source)
95
96
  end
96
- elsif method_name == 'has_feature' || method_name == 'has_features'
97
+ elsif ['has_feature', 'has_features'].include?(method_name)
97
98
  # Add the features to the object
98
99
  parameters.each do |parameter|
99
100
  object.add_feature(node_as_string(parameter) || parameter.source)
@@ -52,11 +52,15 @@ class PuppetStrings::Yard::Handlers::Ruby::RsapiHandler < PuppetStrings::Yard::H
52
52
 
53
53
  # check that the params of the register_type call are key/value pairs.
54
54
  def kv_arg_list?(params)
55
- params.type == :list && params.children.count > 0 && params.children.first.type == :list && params.children.first.children.count > 0 && statement.parameters.children.first.children.first.type == :assoc
55
+ params.type == :list &&
56
+ params.children.count > 0 &&
57
+ params.children.first.type == :list &&
58
+ params.children.first.children.count > 0 &&
59
+ statement.parameters.children.first.children.first.type == :assoc
56
60
  end
57
61
 
58
62
  def extract_schema
59
- raise_parse_error("Expected list of key/value pairs as argument") unless kv_arg_list?(statement.parameters)
63
+ raise_parse_error('Expected list of key/value pairs as argument') unless kv_arg_list?(statement.parameters)
60
64
  hash_from_node(statement.parameters.children.first)
61
65
  end
62
66
 
@@ -84,7 +88,7 @@ class PuppetStrings::Yard::Handlers::Ruby::RsapiHandler < PuppetStrings::Yard::H
84
88
  def array_from_node(node)
85
89
  return nil unless node
86
90
 
87
- arr = node.children.collect do |assoc|
91
+ node.children.map do |assoc|
88
92
  value_from_node(assoc.children[0])
89
93
  end
90
94
  end
@@ -94,7 +98,7 @@ class PuppetStrings::Yard::Handlers::Ruby::RsapiHandler < PuppetStrings::Yard::H
94
98
 
95
99
  # puts "hash from #{node.inspect}"
96
100
 
97
- kv_pairs = node.children.collect do |assoc|
101
+ kv_pairs = node.children.map do |assoc|
98
102
  [value_from_node(assoc.children[0]), value_from_node(assoc.children[1])]
99
103
  end
100
104
  Hash[kv_pairs]
@@ -107,20 +111,19 @@ class PuppetStrings::Yard::Handlers::Ruby::RsapiHandler < PuppetStrings::Yard::H
107
111
 
108
112
  if node.children.first.type == :kw
109
113
  case node.children.first.source
110
- when "false"
114
+ when 'false'
111
115
  return false
112
- when "true"
116
+ when 'true'
113
117
  return true
114
- when "nil"
118
+ when 'nil'
115
119
  return nil
116
120
  else
117
121
  raise_parse_error("unexpected keyword '#{node.children.first.source}'")
118
122
  end
119
123
  end
120
- raise_parse_error("unexpected variable")
124
+ raise_parse_error('unexpected variable')
121
125
  end
122
126
 
123
-
124
127
  def populate_type_data(object, schema)
125
128
  return if schema['attributes'].nil?
126
129
 
@@ -2,17 +2,19 @@
2
2
 
3
3
  require 'puppet-strings/yard/handlers/ruby/base'
4
4
 
5
+ # Base class for all Puppet resource type handlers.
5
6
  class PuppetStrings::Yard::Handlers::Ruby::TypeBase < PuppetStrings::Yard::Handlers::Ruby::Base
6
7
  protected
8
+
7
9
  def get_type_yard_object(name)
8
- #Have to guess the path - if we create the object to get the true path from the code,
9
- #it also shows up in the .at call - self registering?
10
+ # Have to guess the path - if we create the object to get the true path from the code,
11
+ # it also shows up in the .at call - self registering?
10
12
  guess_path = "puppet_types::#{name}"
11
13
  object = YARD::Registry.at(guess_path)
12
14
 
13
15
  return object unless object.nil?
14
16
 
15
- #Didn't find, create instead
17
+ # Didn't find, create instead
16
18
  object = PuppetStrings::Yard::CodeObjects::Type.new(name)
17
19
  register object
18
20
  object
@@ -32,8 +34,8 @@ class PuppetStrings::Yard::Handlers::Ruby::TypeBase < PuppetStrings::Yard::Handl
32
34
  elsif child.is_a?(YARD::Parser::Ruby::MethodCallNode)
33
35
  # Look for a call to a dispatch method with a block
34
36
  next unless child.method_name &&
35
- (child.method_name.source == 'desc' || child.method_name.source == 'doc=') &&
36
- child.parameters(false).count == 1
37
+ (child.method_name.source == 'desc' || child.method_name.source == 'doc=') &&
38
+ child.parameters(false).count == 1
37
39
 
38
40
  docstring = node_as_string(child.parameters[0])
39
41
  log.error "Failed to parse docstring for #{kind} near #{child.file}:#{child.line}." and return nil unless docstring
@@ -100,27 +102,25 @@ class PuppetStrings::Yard::Handlers::Ruby::TypeBase < PuppetStrings::Yard::Handl
100
102
  parameters = node.parameters(false)
101
103
 
102
104
  if parameters.count >= 2
103
- kvps = parameters[1].find_all { |kvp| kvp.count == 2 }
105
+ kvps = parameters[1].select { |kvp| kvp.count == 2 }
104
106
  required_features_kvp = kvps.find { |kvp| node_as_string(kvp[0]) == 'required_features' }
105
107
  object.required_features = node_as_string(required_features_kvp[1]) unless required_features_kvp.nil?
106
108
  end
107
109
 
108
- if object.is_a? PuppetStrings::Yard::CodeObjects::Type::Parameter
109
- # Process the options for parameter base types
110
- if parameters.count >= 2
111
- parameters[1].each do |kvp|
112
- next unless kvp.count == 2
113
- next unless node_as_string(kvp[0]) == 'parent'
114
-
115
- if kvp[1].source == 'Puppet::Parameter::Boolean'
116
- object.add('true') unless object.values.include? 'true' # rubocop:disable Performance/InefficientHashSearch Not supported on Ruby 2.1
117
- object.add('false') unless object.values.include? 'false' # rubocop:disable Performance/InefficientHashSearch Not supported on Ruby 2.1
118
- object.add('yes') unless object.values.include? 'yes' # rubocop:disable Performance/InefficientHashSearch Not supported on Ruby 2.1
119
- object.add('no') unless object.values.include? 'no' # rubocop:disable Performance/InefficientHashSearch Not supported on Ruby 2.1
120
- end
121
- break
122
- end
110
+ return unless object.is_a? PuppetStrings::Yard::CodeObjects::Type::Parameter
111
+ # Process the options for parameter base types
112
+ return unless parameters.count >= 2
113
+ parameters[1].each do |kvp|
114
+ next unless kvp.count == 2
115
+ next unless node_as_string(kvp[0]) == 'parent'
116
+
117
+ if kvp[1].source == 'Puppet::Parameter::Boolean'
118
+ object.add('true') unless object.values.include? 'true'
119
+ object.add('false') unless object.values.include? 'false'
120
+ object.add('yes') unless object.values.include? 'yes'
121
+ object.add('no') unless object.values.include? 'no'
123
122
  end
123
+ break
124
124
  end
125
125
  end
126
126
 
@@ -129,15 +129,15 @@ class PuppetStrings::Yard::Handlers::Ruby::TypeBase < PuppetStrings::Yard::Handl
129
129
 
130
130
  default = nil
131
131
  object.properties&.each do |property|
132
- return nil if property.isnamevar
132
+ return nil if property.isnamevar
133
133
 
134
- default = property if property.name == 'name'
135
- end
134
+ default = property if property.name == 'name'
135
+ end
136
136
  object.parameters&.each do |parameter|
137
- return nil if parameter.isnamevar
137
+ return nil if parameter.isnamevar
138
138
 
139
- default ||= parameter if parameter.name == 'name'
140
- end
139
+ default ||= parameter if parameter.name == 'name'
140
+ end
141
141
  default.isnamevar = true if default
142
142
  end
143
143
  end
@@ -16,7 +16,6 @@ class PuppetStrings::Yard::Handlers::Ruby::TypeExtrasHandler < PuppetStrings::Ya
16
16
  handles method_call(:ensurable)
17
17
 
18
18
  process do
19
-
20
19
  # Our entry point is a type newproperty/newparam compound statement like this:
21
20
  # "Puppet::Type.type(:file).newparam(:content) do"
22
21
  # We want to
@@ -36,7 +35,7 @@ class PuppetStrings::Yard::Handlers::Ruby::TypeExtrasHandler < PuppetStrings::Ya
36
35
  return unless (statement.count > 1) && (statement[0].children.count > 2)
37
36
 
38
37
  module_name = statement[0].children[0].source
39
- method1_name = statement[0].children.drop(1).find{ |c| c.type == :ident }.source
38
+ method1_name = statement[0].children.drop(1).find { |c| c.type == :ident }.source
40
39
  return unless ['Type', 'Puppet::Type'].include?(module_name) && method1_name == 'type'
41
40
 
42
41
  # ensurable is syntatic sugar for newproperty
@@ -52,7 +51,7 @@ class PuppetStrings::Yard::Handlers::Ruby::TypeExtrasHandler < PuppetStrings::Ya
52
51
  typeobject = get_type_yard_object(typename)
53
52
 
54
53
  # node - what should it be here?
55
- node = statement #?? not sure... test...
54
+ node = statement # ?? not sure... test...
56
55
 
57
56
  if method2_name == 'newproperty'
58
57
  typeobject.add_property(create_property(propertyname, node))
@@ -18,7 +18,7 @@ class PuppetStrings::Yard::Handlers::Ruby::TypeHandler < PuppetStrings::Yard::Ha
18
18
  return unless statement.count > 1
19
19
 
20
20
  module_name = statement[0].source
21
- return unless module_name == 'Puppet::Type' || module_name == 'Type'
21
+ return unless ['Puppet::Type', 'Type'].include?(module_name)
22
22
 
23
23
  object = get_type_yard_object(get_name(statement, 'Puppet::Type.newtype'))
24
24
 
@@ -39,6 +39,7 @@ class PuppetStrings::Yard::Handlers::Ruby::TypeHandler < PuppetStrings::Yard::Ha
39
39
  end
40
40
 
41
41
  private
42
+
42
43
  def populate_type_data(object)
43
44
  # Traverse the block looking for properties/parameters/features
44
45
  block = statement.block
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'puppet-strings/yard/parsers/json/task_statement'
4
4
 
5
+ # Implementas a JSON parser.
5
6
  class PuppetStrings::Yard::Parsers::JSON::Parser < YARD::Parser::Base
6
7
  attr_reader :file, :source
7
8
 
@@ -9,7 +10,7 @@ class PuppetStrings::Yard::Parsers::JSON::Parser < YARD::Parser::Base
9
10
  # @param [String] source The source being parsed.
10
11
  # @param [String] filename The file name of the file being parsed.
11
12
  # @return [void]
12
- def initialize(source, filename)
13
+ def initialize(source, filename) # rubocop:disable Lint/MissingSuper
13
14
  @file = filename
14
15
  @source = source
15
16
  @statements = []
@@ -27,7 +28,7 @@ class PuppetStrings::Yard::Parsers::JSON::Parser < YARD::Parser::Base
27
28
  # TODO: this should compare json to a Task metadata json-schema or perform some other hueristics
28
29
  # to determine what type of statement it represents
29
30
  @statements.push(PuppetStrings::Yard::Parsers::JSON::TaskStatement.new(json, @source, @file)) unless json.empty?
30
- rescue # rubocop:disable Style/RescueStandardError Just catch everything
31
+ rescue
31
32
  log.error "Failed to parse #{@file}: "
32
33
  @statements = []
33
34
  end
@@ -3,7 +3,7 @@
3
3
  module PuppetStrings::Yard::Parsers::JSON
4
4
  # Represents the Puppet Task statement.
5
5
  class TaskStatement
6
- attr_reader :line, :comments, :comments_range, :json, :file, :source, :docstring
6
+ attr_reader :line, :comments_range, :json, :file, :source, :docstring
7
7
 
8
8
  def initialize(json, source, file)
9
9
  @file = file
@@ -23,7 +23,7 @@ module PuppetStrings::Yard::Parsers::JSON
23
23
  end
24
24
 
25
25
  def show
26
- ""
26
+ ''
27
27
  end
28
28
 
29
29
  def comments
@@ -31,7 +31,7 @@ module PuppetStrings::Yard::Parsers::JSON
31
31
  end
32
32
 
33
33
  def name
34
- File.basename(@file).gsub('.json','') || ""
34
+ File.basename(@file).gsub('.json', '') || ''
35
35
  end
36
36
  end
37
37
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # rubocop:disable Naming/MethodName
4
+
3
5
  require 'puppet'
4
6
  require 'puppet/pops'
5
7
  require 'puppet-strings/yard/parsers/puppet/statement'
@@ -12,7 +14,7 @@ class PuppetStrings::Yard::Parsers::Puppet::Parser < YARD::Parser::Base
12
14
  # @param [String] source The source being parsed.
13
15
  # @param [String] filename The file name of the file being parsed.
14
16
  # @return [void]
15
- def initialize(source, filename)
17
+ def initialize(source, filename) # rubocop:disable Lint/MissingSuper
16
18
  @source = source
17
19
  @file = filename
18
20
  @visitor = ::Puppet::Pops::Visitor.new(self, 'transform')
@@ -22,13 +24,11 @@ class PuppetStrings::Yard::Parsers::Puppet::Parser < YARD::Parser::Base
22
24
  # @return [void]
23
25
  def parse
24
26
  begin
25
- if @file.to_s.match(/^plans|\/plans\//)
26
- if Puppet::Util::Package.versioncmp(Puppet.version, "5.0.0") < 0
27
- log.warn "Skipping #{@file}: Puppet Plans require Puppet 5 or greater."
28
- return
29
- end
30
- Puppet[:tasks] = true if Puppet.settings.include?(:tasks)
27
+ if @file.to_s.match?(%r{^plans|/plans/}) && Puppet::Util::Package.versioncmp(Puppet.version, '5.0.0') < 0
28
+ log.warn "Skipping #{@file}: Puppet Plans require Puppet 5 or greater."
29
+ return
31
30
  end
31
+ Puppet[:tasks] = true if Puppet.settings.include?(:tasks)
32
32
  @statements ||= (@visitor.visit(::Puppet::Pops::Parser::Parser.new.parse_string(source)) || []).compact
33
33
  rescue ::Puppet::ParseError => e
34
34
  log.error "Failed to parse #{@file}: #{e.message}"
@@ -7,7 +7,7 @@ module PuppetStrings::Yard::Parsers::Puppet
7
7
  # Represents the base Puppet language statement.
8
8
  class Statement
9
9
  # The pattern for parsing docstring comments.
10
- COMMENT_REGEX = /^\s*#+\s?/
10
+ COMMENT_REGEX = %r{^\s*#+\s?}.freeze
11
11
 
12
12
  attr_reader :source
13
13
  attr_reader :file
@@ -21,9 +21,8 @@ module PuppetStrings::Yard::Parsers::Puppet
21
21
  def initialize(object, file)
22
22
  @file = file
23
23
 
24
- adapter = ::Puppet::Pops::Adapters::SourcePosAdapter.adapt(object)
25
- @source = adapter.extract_text
26
- @line = adapter.line
24
+ @source = PuppetStrings::Yard::Util.ast_to_text(object)
25
+ @line = object.line
27
26
  @comments_range = nil
28
27
  end
29
28
 
@@ -32,7 +31,7 @@ module PuppetStrings::Yard::Parsers::Puppet
32
31
  # @return [void]
33
32
  def extract_docstring(lines)
34
33
  comment = []
35
- (0..@line-2).reverse_each do |index|
34
+ (0..@line - 2).reverse_each do |index|
36
35
  break unless index <= lines.count
37
36
 
38
37
  line = lines[index].strip
@@ -66,8 +65,9 @@ module PuppetStrings::Yard::Parsers::Puppet
66
65
  end
67
66
 
68
67
  private
68
+
69
69
  def first_line
70
- @source.split(/\r?\n/).first.strip
70
+ @source.split(%r{\r?\n}).first.strip
71
71
  end
72
72
  end
73
73
 
@@ -85,14 +85,11 @@ module PuppetStrings::Yard::Parsers::Puppet
85
85
  @name = parameter.name
86
86
  # Take the exact text for the type expression
87
87
  if parameter.type_expr
88
- adapter = ::Puppet::Pops::Adapters::SourcePosAdapter.adapt(parameter.type_expr)
89
- @type = adapter.extract_text
88
+ @type = PuppetStrings::Yard::Util.ast_to_text(parameter.type_expr)
90
89
  end
91
90
  # Take the exact text for the default value expression
92
- if parameter.value
93
- adapter = ::Puppet::Pops::Adapters::SourcePosAdapter.adapt(parameter.value)
94
- @value = adapter.extract_text
95
- end
91
+ return unless parameter.value
92
+ @value = PuppetStrings::Yard::Util.ast_to_text(parameter.value)
96
93
  end
97
94
  end
98
95
 
@@ -146,13 +143,10 @@ module PuppetStrings::Yard::Parsers::Puppet
146
143
  def initialize(object, file)
147
144
  super(object, file)
148
145
  @name = object.name
149
- if object.respond_to? :return_type
150
- type = object.return_type
151
- if type
152
- adapter = ::Puppet::Pops::Adapters::SourcePosAdapter.adapt(type)
153
- @type = adapter.extract_text.gsub('>> ', '')
154
- end
155
- end
146
+ return unless object.respond_to? :return_type
147
+ type = object.return_type
148
+ return unless type
149
+ @type = PuppetStrings::Yard::Util.ast_to_text(type).gsub('>> ', '')
156
150
  end
157
151
  end
158
152
 
@@ -184,12 +178,11 @@ module PuppetStrings::Yard::Parsers::Puppet
184
178
  case type_expr
185
179
  when Puppet::Pops::Model::AccessExpression
186
180
  # TODO: I don't like rebuilding the source from the AST, but AccessExpressions don't expose the original source
187
- @alias_of = ::Puppet::Pops::Adapters::SourcePosAdapter.adapt(type_expr.left_expr).extract_text + '['
188
- @alias_of << type_expr.keys.map { |key| ::Puppet::Pops::Adapters::SourcePosAdapter.adapt(key).extract_text }.join(', ')
181
+ @alias_of = PuppetStrings::Yard::Util.ast_to_text(type_expr.left_expr) + '['
182
+ @alias_of << type_expr.keys.map { |key| PuppetStrings::Yard::Util.ast_to_text(key) }.join(', ')
189
183
  @alias_of << ']'
190
184
  else
191
- adapter = ::Puppet::Pops::Adapters::SourcePosAdapter.adapt(type_expr)
192
- @alias_of = adapter.extract_text
185
+ @alias_of = PuppetStrings::Yard::Util.ast_to_text(type_expr)
193
186
  end
194
187
  @name = object.name
195
188
  end
@@ -6,6 +6,7 @@ module PuppetStrings::Yard::Parsers
6
6
  module JSON
7
7
  require 'puppet-strings/yard/parsers/json/parser'
8
8
  end
9
+
9
10
  # The module for custom YARD parsers for the Puppet language.
10
11
  module Puppet
11
12
  require 'puppet-strings/yard/parsers/puppet/parser'
@@ -3,12 +3,11 @@
3
3
  require 'yard/tags/option_tag'
4
4
 
5
5
  # Implements an enum tag for describing enumerated value data types
6
-
7
6
  class PuppetStrings::Yard::Tags::EnumTag < YARD::Tags::OptionTag
8
7
  # Registers the tag with YARD.
9
8
  # @return [void]
10
9
  def self.register!
11
- YARD::Tags::Library.define_tag("puppet.enum", :enum, :with_enums)
10
+ YARD::Tags::Library.define_tag('puppet.enum', :enum, :with_enums)
12
11
  YARD::Tags::Library.visible_tags.place(:enum).after(:option)
13
12
  end
14
13
  end
@@ -3,8 +3,8 @@
3
3
  require 'yard/tags/default_factory'
4
4
  require 'puppet-strings/yard/tags/enum_tag'
5
5
 
6
+ # Factory for creating tags.
6
7
  class PuppetStrings::Yard::Tags::Factory < YARD::Tags::DefaultFactory
7
-
8
8
  # Parses tag text and creates a new enum tag type. Modeled after
9
9
  # the parse_tag_with_options method in YARD::Tags::DefaultFactory.
10
10
  #