puppet-lint 2.3.0 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +74 -0
  3. data/.rubocop_todo.yml +89 -0
  4. data/.travis.yml +11 -9
  5. data/CHANGELOG.md +54 -0
  6. data/Gemfile +3 -0
  7. data/Rakefile +14 -3
  8. data/appveyor.yml +1 -4
  9. data/bin/puppet-lint +1 -1
  10. data/lib/puppet-lint.rb +25 -21
  11. data/lib/puppet-lint/bin.rb +15 -19
  12. data/lib/puppet-lint/checkplugin.rb +24 -17
  13. data/lib/puppet-lint/checks.rb +42 -31
  14. data/lib/puppet-lint/configuration.rb +11 -8
  15. data/lib/puppet-lint/data.rb +236 -164
  16. data/lib/puppet-lint/lexer.rb +225 -203
  17. data/lib/puppet-lint/lexer/token.rb +34 -18
  18. data/lib/puppet-lint/optparser.rb +33 -30
  19. data/lib/puppet-lint/plugins.rb +42 -38
  20. data/lib/puppet-lint/plugins/check_classes/arrow_on_right_operand_line.rb +26 -28
  21. data/lib/puppet-lint/plugins/check_classes/autoloader_layout.rb +21 -20
  22. data/lib/puppet-lint/plugins/check_classes/class_inherits_from_params_class.rb +8 -9
  23. data/lib/puppet-lint/plugins/check_classes/code_on_top_scope.rb +9 -8
  24. data/lib/puppet-lint/plugins/check_classes/inherits_across_namespaces.rb +12 -11
  25. data/lib/puppet-lint/plugins/check_classes/names_containing_dash.rb +13 -12
  26. data/lib/puppet-lint/plugins/check_classes/names_containing_uppercase.rb +14 -13
  27. data/lib/puppet-lint/plugins/check_classes/nested_classes_or_defines.rb +9 -10
  28. data/lib/puppet-lint/plugins/check_classes/parameter_order.rb +40 -31
  29. data/lib/puppet-lint/plugins/check_classes/right_to_left_relationship.rb +3 -2
  30. data/lib/puppet-lint/plugins/check_classes/variable_scope.rb +21 -24
  31. data/lib/puppet-lint/plugins/check_comments/slash_comments.rb +3 -2
  32. data/lib/puppet-lint/plugins/check_comments/star_comments.rb +6 -5
  33. data/lib/puppet-lint/plugins/check_conditionals/case_without_default.rb +21 -20
  34. data/lib/puppet-lint/plugins/check_conditionals/selector_inside_resource.rb +10 -13
  35. data/lib/puppet-lint/plugins/check_documentation/documentation.rb +26 -17
  36. data/lib/puppet-lint/plugins/check_nodes/unquoted_node_name.rb +11 -11
  37. data/lib/puppet-lint/plugins/check_resources/duplicate_params.rb +4 -3
  38. data/lib/puppet-lint/plugins/check_resources/ensure_first_param.rb +17 -18
  39. data/lib/puppet-lint/plugins/check_resources/ensure_not_symlink_target.rb +17 -16
  40. data/lib/puppet-lint/plugins/check_resources/file_mode.rb +22 -23
  41. data/lib/puppet-lint/plugins/check_resources/unquoted_file_mode.rb +14 -13
  42. data/lib/puppet-lint/plugins/check_resources/unquoted_resource_title.rb +9 -8
  43. data/lib/puppet-lint/plugins/check_strings/double_quoted_strings.rb +8 -8
  44. data/lib/puppet-lint/plugins/check_strings/only_variable_string.rb +29 -42
  45. data/lib/puppet-lint/plugins/check_strings/puppet_url_without_modules.rb +5 -4
  46. data/lib/puppet-lint/plugins/check_strings/quoted_booleans.rb +3 -2
  47. data/lib/puppet-lint/plugins/check_strings/single_quote_string_with_variables.rb +4 -3
  48. data/lib/puppet-lint/plugins/check_strings/variables_not_enclosed.rb +3 -2
  49. data/lib/puppet-lint/plugins/check_variables/variable_contains_dash.rb +9 -8
  50. data/lib/puppet-lint/plugins/check_variables/variable_is_lowercase.rb +9 -8
  51. data/lib/puppet-lint/plugins/check_whitespace/140chars.rb +9 -9
  52. data/lib/puppet-lint/plugins/check_whitespace/2sp_soft_tabs.rb +4 -3
  53. data/lib/puppet-lint/plugins/check_whitespace/80chars.rb +10 -10
  54. data/lib/puppet-lint/plugins/check_whitespace/arrow_alignment.rb +23 -22
  55. data/lib/puppet-lint/plugins/check_whitespace/hard_tabs.rb +3 -2
  56. data/lib/puppet-lint/plugins/check_whitespace/trailing_whitespace.rb +3 -2
  57. data/lib/puppet-lint/tasks/puppet-lint.rb +3 -3
  58. data/lib/puppet-lint/version.rb +1 -1
  59. data/puppet-lint.gemspec +4 -4
  60. data/spec/puppet-lint/bin_spec.rb +268 -140
  61. data/spec/puppet-lint/checks_spec.rb +229 -0
  62. data/spec/puppet-lint/configuration_spec.rb +10 -9
  63. data/spec/puppet-lint/data_spec.rb +84 -0
  64. data/spec/puppet-lint/ignore_overrides_spec.rb +71 -40
  65. data/spec/puppet-lint/lexer/token_spec.rb +1 -1
  66. data/spec/puppet-lint/lexer_spec.rb +306 -73
  67. data/spec/puppet-lint/plugins/check_classes/arrow_on_right_operand_line_spec.rb +12 -6
  68. data/spec/puppet-lint/plugins/check_classes/autoloader_layout_spec.rb +10 -10
  69. data/spec/puppet-lint/plugins/check_classes/class_inherits_from_params_class_spec.rb +15 -11
  70. data/spec/puppet-lint/plugins/check_classes/code_on_top_scope_spec.rb +26 -21
  71. data/spec/puppet-lint/plugins/check_classes/inherits_across_namespaces_spec.rb +3 -3
  72. data/spec/puppet-lint/plugins/check_classes/name_contains_uppercase_spec.rb +4 -5
  73. data/spec/puppet-lint/plugins/check_classes/names_containing_dash_spec.rb +13 -0
  74. data/spec/puppet-lint/plugins/check_classes/nested_classes_or_defines_spec.rb +33 -25
  75. data/spec/puppet-lint/plugins/check_classes/parameter_order_spec.rb +80 -55
  76. data/spec/puppet-lint/plugins/check_classes/right_to_left_relationship_spec.rb +2 -2
  77. data/spec/puppet-lint/plugins/check_classes/variable_scope_spec.rb +165 -130
  78. data/spec/puppet-lint/plugins/check_comments/slash_comments_spec.rb +2 -2
  79. data/spec/puppet-lint/plugins/check_comments/star_comments_spec.rb +53 -35
  80. data/spec/puppet-lint/plugins/check_conditionals/case_without_default_spec.rb +59 -49
  81. data/spec/puppet-lint/plugins/check_conditionals/selector_inside_resource_spec.rb +18 -14
  82. data/spec/puppet-lint/plugins/check_documentation/documentation_spec.rb +14 -10
  83. data/spec/puppet-lint/plugins/check_nodes/unquoted_node_name_spec.rb +7 -7
  84. data/spec/puppet-lint/plugins/check_resources/duplicate_params_spec.rb +54 -44
  85. data/spec/puppet-lint/plugins/check_resources/ensure_first_param_spec.rb +114 -89
  86. data/spec/puppet-lint/plugins/check_resources/ensure_not_symlink_target_spec.rb +41 -30
  87. data/spec/puppet-lint/plugins/check_resources/file_mode_spec.rb +46 -40
  88. data/spec/puppet-lint/plugins/check_resources/unquoted_file_mode_spec.rb +46 -40
  89. data/spec/puppet-lint/plugins/check_resources/unquoted_resource_title_spec.rb +95 -71
  90. data/spec/puppet-lint/plugins/check_strings/double_quoted_strings_spec.rb +28 -24
  91. data/spec/puppet-lint/plugins/check_strings/only_variable_string_spec.rb +11 -9
  92. data/spec/puppet-lint/plugins/check_strings/puppet_url_without_modules_spec.rb +1 -2
  93. data/spec/puppet-lint/plugins/check_strings/single_quote_string_with_variables_spec.rb +18 -14
  94. data/spec/puppet-lint/plugins/check_variables/variable_contains_dash_spec.rb +1 -1
  95. data/spec/puppet-lint/plugins/check_variables/variable_is_lowercase_spec.rb +1 -1
  96. data/spec/puppet-lint/plugins/check_whitespace/140chars_spec.rb +22 -15
  97. data/spec/puppet-lint/plugins/check_whitespace/2sp_soft_tabs_spec.rb +8 -6
  98. data/spec/puppet-lint/plugins/check_whitespace/80chars_spec.rb +23 -29
  99. data/spec/puppet-lint/plugins/check_whitespace/arrow_alignment_spec.rb +588 -494
  100. data/spec/puppet-lint/plugins/check_whitespace/hard_tabs_spec.rb +1 -1
  101. data/spec/puppet-lint/plugins/check_whitespace/trailing_whitespace_spec.rb +27 -19
  102. data/spec/puppet-lint_spec.rb +2 -12
  103. data/spec/spec_helper.rb +35 -30
  104. metadata +6 -5
  105. data/lib/puppet-lint/monkeypatches.rb +0 -2
  106. data/lib/puppet-lint/monkeypatches/string_percent.rb +0 -52
  107. data/lib/puppet-lint/monkeypatches/string_prepend.rb +0 -13
@@ -73,17 +73,15 @@ class PuppetLint
73
73
  when :SSTRING
74
74
  "'#{@value}'"
75
75
  when :DQPRE
76
- "\"#{@value}"
76
+ "\"#{@value}#{string_suffix}"
77
77
  when :DQPOST
78
- "#{@value}\""
78
+ "#{string_prefix}#{@value}\""
79
+ when :DQMID
80
+ "#{string_prefix}#{@value}#{string_suffix}"
79
81
  when :VARIABLE
80
82
  enclose_token_types = Set[:DQPRE, :DQMID, :HEREDOC_PRE, :HEREDOC_MID].freeze
81
83
  if !@prev_code_token.nil? && enclose_token_types.include?(@prev_code_token.type)
82
- if @raw.nil?
83
- "${#{@value}}"
84
- else
85
- "${#{@raw}}"
86
- end
84
+ @raw.nil? ? @value : @raw
87
85
  else
88
86
  "$#{@value}"
89
87
  end
@@ -101,13 +99,35 @@ class PuppetLint
101
99
  "@(#{@value})"
102
100
  when :HEREDOC
103
101
  @raw
102
+ when :HEREDOC_PRE
103
+ "#{@value}#{string_suffix}"
104
104
  when :HEREDOC_POST
105
- @raw
105
+ "#{string_prefix}#{@raw}"
106
+ when :HEREDOC_MID
107
+ "#{string_prefix}#{@value}#{string_suffix}"
106
108
  else
107
109
  @value
108
110
  end
109
111
  end
110
112
 
113
+ def string_suffix
114
+ no_enclose_tokens = Set.new([:UNENC_VARIABLE, :DQMID, :DQPOST, :HEREDOC_MID, :HEREDOC_POST])
115
+ if next_token && no_enclose_tokens.include?(next_token.type)
116
+ ''
117
+ else
118
+ '${'
119
+ end
120
+ end
121
+
122
+ def string_prefix
123
+ no_enclose_tokens = Set.new([:UNENC_VARIABLE, :DQPRE, :DQMID, :HEREDOC_PRE, :HEREDOC_MID])
124
+ if prev_token && no_enclose_tokens.include?(prev_token.type)
125
+ ''
126
+ else
127
+ '}'
128
+ end
129
+ end
130
+
111
131
  # Public: Search from this token to find the next token of a given type.
112
132
  #
113
133
  # type - A Symbol type of the token to find, or an Array of Symbols.
@@ -154,18 +174,14 @@ class PuppetLint
154
174
  opts[:skip_blocks] ||= true
155
175
  to_find = Array[*type]
156
176
 
157
- token_iter = self.send("#{direction}_token".to_sym)
158
- while !token_iter.nil?
159
- if to_find.include? token_iter.type
160
- if opts[:value]
161
- return token_iter if token_iter.value == opts[:value]
162
- else
163
- return token_iter
164
- end
177
+ token_iter = send("#{direction}_token".to_sym)
178
+ until token_iter.nil?
179
+ if to_find.include?(token_iter.type)
180
+ return token_iter if opts[:value].nil? || token_iter.value == opts[:value]
165
181
  end
166
182
 
167
- opening_token = direction == :next ? "L" : "R"
168
- closing_token = direction == :next ? "R" : "L"
183
+ opening_token = direction == :next ? 'L' : 'R'
184
+ closing_token = direction == :next ? 'R' : 'L'
169
185
 
170
186
  if opts[:skip_blocks]
171
187
  case token_iter.type
@@ -3,7 +3,7 @@ require 'optparse'
3
3
  # Public: Contains the puppet-lint option parser so that it can be used easily
4
4
  # in multiple places.
5
5
  class PuppetLint::OptParser
6
- HELP_TEXT = <<-EOF
6
+ HELP_TEXT = <<-EOF.freeze
7
7
  puppet-lint
8
8
 
9
9
  Basic Command Line Usage:
@@ -41,8 +41,11 @@ class PuppetLint::OptParser
41
41
  PuppetLint.configuration.fail_on_warnings = true
42
42
  end
43
43
 
44
- opts.on('--error-level LEVEL', [:all, :warning, :error],
45
- 'The level of error to return (warning, error or all).') do |el|
44
+ opts.on(
45
+ '--error-level LEVEL',
46
+ [:all, :warning, :error],
47
+ 'The level of error to return (warning, error or all).',
48
+ ) do |el|
46
49
  PuppetLint.configuration.error_level = el
47
50
  end
48
51
 
@@ -55,13 +58,13 @@ class PuppetLint::OptParser
55
58
  end
56
59
 
57
60
  opts.on('-l', '--load FILE', 'Load a file containing custom puppet-lint checks.') do |f|
58
- load f
61
+ load(f)
59
62
  end
60
63
 
61
64
  opts.on('--load-from-puppet MODULEPATH', 'Load plugins from the given Puppet module path.') do |path|
62
65
  path.split(':').each do |p|
63
66
  Dir["#{p}/*/lib/puppet-lint/plugins/*.rb"].each do |file|
64
- load file
67
+ load(file)
65
68
  end
66
69
  end
67
70
  end
@@ -70,18 +73,19 @@ class PuppetLint::OptParser
70
73
  PuppetLint.configuration.fix = true
71
74
  end
72
75
 
73
- opts.on('--log-format FORMAT',
74
- 'Change the log format.', 'Overrides --with-filename.',
75
- 'The following placeholders can be used:',
76
- '%{filename} - Filename without path.',
77
- '%{path} - Path as provided to puppet-lint.',
78
- '%{fullpath} - Expanded path to the file.',
79
- '%{line} - Line number.',
80
- '%{column} - Column number.',
81
- '%{kind} - The kind of message (warning, error).',
82
- '%{KIND} - Uppercase version of %{kind}.',
83
- '%{check} - The name of the check.',
84
- '%{message} - The message.'
76
+ opts.on(
77
+ '--log-format FORMAT',
78
+ 'Change the log format.', 'Overrides --with-filename.',
79
+ 'The following placeholders can be used:',
80
+ '%{filename} - Filename without path.',
81
+ '%{path} - Path as provided to puppet-lint.',
82
+ '%{fullpath} - Expanded path to the file.',
83
+ '%{line} - Line number.',
84
+ '%{column} - Column number.',
85
+ '%{kind} - The kind of message (warning, error).',
86
+ '%{KIND} - Uppercase version of %{kind}.',
87
+ '%{check} - The name of the check.',
88
+ '%{message} - The message.'
85
89
  ) do |format|
86
90
  PuppetLint.configuration.log_format = format
87
91
  end
@@ -90,13 +94,13 @@ class PuppetLint::OptParser
90
94
  PuppetLint.configuration.json = true
91
95
  end
92
96
 
93
- opts.separator ''
94
- opts.separator ' Checks:'
97
+ opts.separator('')
98
+ opts.separator(' Checks:')
95
99
 
96
100
  opts.on('--only-checks CHECKS', 'A comma separated list of checks that should be run') do |checks|
97
101
  enable_checks = checks.split(',').map(&:to_sym)
98
- (PuppetLint.configuration.checks).each do |check|
99
- if enable_checks.include? check
102
+ PuppetLint.configuration.checks.each do |check|
103
+ if enable_checks.include?(check)
100
104
  PuppetLint.configuration.send("enable_#{check}")
101
105
  else
102
106
  PuppetLint.configuration.send("disable_#{check}")
@@ -108,19 +112,18 @@ class PuppetLint::OptParser
108
112
  opts.on("--no-#{check}-check", "Skip the #{check} check.") do
109
113
  PuppetLint.configuration.send("disable_#{check}")
110
114
  end
111
- unless PuppetLint.configuration.send("#{check}_enabled?")
112
- opts.on("--#{check}-check", "Enable the #{check} check.") do
113
- PuppetLint.configuration.send("enable_#{check}")
114
- end
115
+
116
+ next if PuppetLint.configuration.send("#{check}_enabled?")
117
+
118
+ opts.on("--#{check}-check", "Enable the #{check} check.") do
119
+ PuppetLint.configuration.send("enable_#{check}")
115
120
  end
116
121
  end
117
122
 
118
123
  opts.load('/etc/puppet-lint.rc')
119
- begin
120
- opts.load(File.expand_path('~/.puppet-lint.rc')) if ENV['HOME']
121
- rescue Errno::EACCES
122
- # silently skip loading this file if HOME is set to a directory that
123
- # the user doesn't have read access to.
124
+ if ENV.key?('HOME') && File.readable?(ENV['HOME'])
125
+ home_dotfile_path = File.expand_path('~/.puppet-lint.rc')
126
+ opts.load(home_dotfile_path) if File.readable?(home_dotfile_path)
124
127
  end
125
128
  opts.load('.puppet-lint.rc')
126
129
  end
@@ -14,8 +14,8 @@ class PuppetLint
14
14
  gem_directories.select { |path|
15
15
  (path + 'puppet-lint/plugins').directory?
16
16
  }.each do |gem_path|
17
- Dir["#{(gem_path + 'puppet-lint/plugins').to_s}/*.rb"].each do |file|
18
- load file
17
+ Dir["#{gem_path + 'puppet-lint/plugins'}/*.rb"].each do |file|
18
+ load(file)
19
19
  end
20
20
  end
21
21
  end
@@ -25,49 +25,53 @@ class PuppetLint
25
25
  # Returns nothings.
26
26
  def self.load_spec_helper
27
27
  gemspec = gemspecs.select { |spec| spec.name == 'puppet-lint' }.first
28
- load Pathname.new(gemspec.full_gem_path) + 'spec/spec_helper.rb'
29
- end
30
- private
31
- # Internal: Check if RubyGems is loaded and available.
32
- #
33
- # Returns true if RubyGems is available, false if not.
34
- def self.has_rubygems?
35
- defined? ::Gem
28
+ load(Pathname.new(gemspec.full_gem_path) + 'spec/spec_helper.rb')
36
29
  end
37
30
 
38
- # Internal: Retrieve a list of avaliable gemspecs.
39
- #
40
- # Returns an Array of Gem::Specification objects.
41
- def self.gemspecs
42
- @gemspecs ||= if Gem::Specification.respond_to?(:latest_specs)
43
- Gem::Specification.latest_specs(load_prerelease_plugins?)
44
- else
45
- Gem.searcher.init_gemspecs
31
+ class << self
32
+ private
33
+
34
+ # Internal: Check if RubyGems is loaded and available.
35
+ #
36
+ # Returns true if RubyGems is available, false if not.
37
+ def rubygems?
38
+ defined?(::Gem)
46
39
  end
47
- end
48
40
 
49
- # Internal: Determine whether to load plugins that contain a letter in their version number.
50
- #
51
- # Returns true if the configuration is set to load "prerelease" gems, false otherwise.
52
- def self.load_prerelease_plugins?
53
- # Load prerelease plugins (which ruby defines as any gem which has a letter in its version number).
54
- # Can't use puppet-lint configuration object here because this code executes before the command line is parsed.
55
- if ENV['PUPPET_LINT_LOAD_PRERELEASE_PLUGINS']
56
- return %w(true yes).include?(ENV['PUPPET_LINT_LOAD_PRERELEASE_PLUGINS'].downcase)
41
+ # Internal: Retrieve a list of avaliable gemspecs.
42
+ #
43
+ # Returns an Array of Gem::Specification objects.
44
+ def gemspecs
45
+ @gemspecs ||= if Gem::Specification.respond_to?(:latest_specs)
46
+ Gem::Specification.latest_specs(load_prerelease_plugins?)
47
+ else
48
+ Gem.searcher.init_gemspecs
49
+ end
57
50
  end
58
- false
59
- end
60
51
 
61
- # Internal: Retrieve a list of available gem paths from RubyGems.
62
- #
63
- # Returns an Array of Pathname objects.
64
- def self.gem_directories
65
- if has_rubygems?
66
- gemspecs.reject { |spec| spec.name == 'puppet-lint' }.map do |spec|
67
- Pathname.new(spec.full_gem_path) + 'lib'
52
+ # Internal: Determine whether to load plugins that contain a letter in their version number.
53
+ #
54
+ # Returns true if the configuration is set to load "prerelease" gems, false otherwise.
55
+ def load_prerelease_plugins?
56
+ # Load prerelease plugins (which ruby defines as any gem which has a letter in its version number).
57
+ # Can't use puppet-lint configuration object here because this code executes before the command line is parsed.
58
+ if ENV['PUPPET_LINT_LOAD_PRERELEASE_PLUGINS']
59
+ return %w[true yes].include?(ENV['PUPPET_LINT_LOAD_PRERELEASE_PLUGINS'].downcase)
60
+ end
61
+ false
62
+ end
63
+
64
+ # Internal: Retrieve a list of available gem paths from RubyGems.
65
+ #
66
+ # Returns an Array of Pathname objects.
67
+ def gem_directories
68
+ if rubygems?
69
+ gemspecs.reject { |spec| spec.name == 'puppet-lint' }.map do |spec|
70
+ Pathname.new(spec.full_gem_path) + 'lib'
71
+ end
72
+ else
73
+ []
68
74
  end
69
- else
70
- []
71
75
  end
72
76
  end
73
77
  end
@@ -5,42 +5,40 @@
5
5
  PuppetLint.new_check(:arrow_on_right_operand_line) do
6
6
  def check
7
7
  tokens.select { |r| Set[:IN_EDGE, :IN_EDGE_SUB].include?(r.type) }.each do |token|
8
- if token.next_code_token.line != token.line
9
- notify :warning, {
10
- :message => 'arrow should be on the right operand\'s line',
11
- :line => token.line,
12
- :column => token.column,
13
- :token => token,
14
- }
15
- end
8
+ next if token.next_code_token.line == token.line
9
+
10
+ notify(
11
+ :warning,
12
+ :message => 'arrow should be on the right operand\'s line',
13
+ :line => token.line,
14
+ :column => token.column,
15
+ :token => token,
16
+ )
16
17
  end
17
18
  end
18
19
 
19
20
  def fix(problem)
20
21
  token = problem[:token]
21
- tokens.delete(token)
22
22
 
23
- # remove any excessive whitespace on the line
24
- temp_token = token.prev_code_token
25
- while (temp_token = temp_token.next_token)
26
- tokens.delete(temp_token) if whitespace?(temp_token)
27
- break if temp_token.type == :NEWLINE
28
- end
23
+ prev_code_token = token.prev_code_token
24
+ next_code_token = token.next_code_token
25
+ indent_token = prev_code_token.prev_token_of(:INDENT)
29
26
 
30
- temp_token.next_token = token
31
- token.prev_token = temp_token
32
- index = tokens.index(token.next_code_token)
33
- tokens.insert(index, token)
27
+ # Delete all tokens between the two code tokens the anchor is between
28
+ temp_token = prev_code_token
29
+ while (temp_token = temp_token.next_token) && (temp_token != next_code_token)
30
+ remove_token(temp_token) unless temp_token == token
31
+ end
34
32
 
35
- whitespace_token = PuppetLint::Lexer::Token.new(:WHITESPACE, ' ', temp_token.line + 1, 3)
36
- whitespace_token.prev_token = token
37
- token.next_token = whitespace_token
38
- whitespace_token.next_token = tokens[index + 1]
39
- tokens[index + 1].prev_token = whitespace_token
40
- tokens.insert(index + 1, whitespace_token)
41
- end
33
+ # Insert a newline and an indent before the arrow
34
+ index = tokens.index(token)
35
+ newline_token = PuppetLint::Lexer::Token.new(:NEWLINE, "\n", token.line, 0)
36
+ add_token(index, newline_token)
37
+ add_token(index + 1, indent_token) if indent_token
42
38
 
43
- def whitespace?(token)
44
- Set[:INDENT, :WHITESPACE].include?(token.type)
39
+ # Insert a space between the arrow and the following code token
40
+ index = tokens.index(token)
41
+ whitespace_token = PuppetLint::Lexer::Token.new(:WHITESPACE, ' ', token.line, 3)
42
+ add_token(index + 1, whitespace_token)
45
43
  end
46
44
  end
@@ -5,29 +5,30 @@
5
5
  # https://docs.puppet.com/guides/style_guide.html#separate-files
6
6
  PuppetLint.new_check(:autoloader_layout) do
7
7
  def check
8
- unless fullpath.nil? || fullpath == ''
9
- (class_indexes + defined_type_indexes).each do |class_idx|
10
- title_token = class_idx[:name_token]
11
- split_title = title_token.value.split('::')
12
- mod = split_title.first
13
- if split_title.length > 1
14
- expected_path = "/#{mod}/manifests/#{split_title[1..-1].join('/')}.pp"
15
- else
16
- expected_path = "/#{title_token.value}/manifests/init.pp"
17
- end
8
+ return if fullpath.nil? || fullpath == ''
18
9
 
19
- if PuppetLint.configuration.relative
20
- expected_path = expected_path.gsub(/^\//,'').split('/')[1..-1].join('/')
21
- end
10
+ (class_indexes + defined_type_indexes).each do |class_idx|
11
+ title_token = class_idx[:name_token]
12
+ split_title = title_token.value.split('::')
13
+ mod = split_title.first
14
+ expected_path = if split_title.length > 1
15
+ "/#{mod}/manifests/#{split_title[1..-1].join('/')}.pp"
16
+ else
17
+ "/#{title_token.value}/manifests/init.pp"
18
+ end
22
19
 
23
- unless fullpath.end_with? expected_path
24
- notify :error, {
25
- :message => "#{title_token.value} not in autoload module layout",
26
- :line => title_token.line,
27
- :column => title_token.column,
28
- }
29
- end
20
+ if PuppetLint.configuration.relative
21
+ expected_path = expected_path.gsub(%r{^/}, '').split('/')[1..-1].join('/')
30
22
  end
23
+
24
+ next if fullpath.end_with?(expected_path)
25
+
26
+ notify(
27
+ :error,
28
+ :message => "#{title_token.value} not in autoload module layout",
29
+ :line => title_token.line,
30
+ :column => title_token.column,
31
+ )
31
32
  end
32
33
  end
33
34
  end
@@ -5,15 +5,14 @@
5
5
  PuppetLint.new_check(:class_inherits_from_params_class) do
6
6
  def check
7
7
  class_indexes.each do |class_idx|
8
- unless class_idx[:inherited_token].nil?
9
- if class_idx[:inherited_token].value.end_with? '::params'
10
- notify :warning, {
11
- :message => 'class inheriting from params class',
12
- :line => class_idx[:inherited_token].line,
13
- :column => class_idx[:inherited_token].column,
14
- }
15
- end
16
- end
8
+ next unless class_idx[:inherited_token] && class_idx[:inherited_token].value.end_with?('::params')
9
+
10
+ notify(
11
+ :warning,
12
+ :message => 'class inheriting from params class',
13
+ :line => class_idx[:inherited_token].line,
14
+ :column => class_idx[:inherited_token].column,
15
+ )
17
16
  end
18
17
  end
19
18
  end
@@ -7,14 +7,15 @@ PuppetLint.new_check(:code_on_top_scope) do
7
7
  top_scope = tokens - class_scope
8
8
 
9
9
  top_scope.each do |token|
10
- unless formatting_tokens.include? token.type
11
- notify :warning, {
12
- :message => "code outside of class or define block - #{token.value}",
13
- :line => token.line,
14
- :column => token.column
15
- }
16
- end
10
+ next if formatting_tokens.include?(token.type)
11
+
12
+ notify(
13
+ :warning,
14
+ :message => "code outside of class or define block - #{token.value}",
15
+ :line => token.line,
16
+ :column => token.column,
17
+ )
17
18
  end
18
19
  end
19
20
  end
20
- PuppetLint.configuration.send("disable_code_on_top_scope")
21
+ PuppetLint.configuration.send('disable_code_on_top_scope')