Hello community,
here is the log from the commit of package rubygem-puppet-lint for
openSUSE:Factory checked in at 2016-09-21 18:46:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-puppet-lint (Old)
and /work/SRC/openSUSE:Factory/.rubygem-puppet-lint.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-puppet-lint"
Changes:
--------
--- /work/SRC/openSUSE:Factory/rubygem-puppet-lint/rubygem-puppet-lint.changes
2014-11-28 08:44:52.000000000 +0100
+++
/work/SRC/openSUSE:Factory/.rubygem-puppet-lint.new/rubygem-puppet-lint.changes
2016-09-21 18:46:56.000000000 +0200
@@ -1,0 +2,6 @@
+Sat Jul 30 08:36:07 UTC 2016 - [email protected]
+
+- Version bump 2.0.0
+ see
https://github.com/rodjek/puppet-lint/blob/master/CHANGELOG.md#200-2016-06-22
+
+-------------------------------------------------------------------
Old:
----
puppet-lint-1.1.0.gem
New:
----
puppet-lint-2.0.0.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-puppet-lint.spec ++++++
--- /var/tmp/diff_new_pack.yQrh13/_old 2016-09-21 18:46:58.000000000 +0200
+++ /var/tmp/diff_new_pack.yQrh13/_new 2016-09-21 18:46:58.000000000 +0200
@@ -1,7 +1,7 @@
#
# spec file for package rubygem-puppet-lint
#
-# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,7 +16,7 @@
#
Name: rubygem-puppet-lint
-Version: 1.1.0
+Version: 2.0.0
Release: 0
%define mod_name puppet-lint
%define mod_full_name %{mod_name}-%{version}
++++++ puppet-lint-1.1.0.gem -> puppet-lint-2.0.0.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore 1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore 1970-01-01 01:00:00.000000000 +0100
@@ -6,3 +6,4 @@
vendor/gems
coverage/
*.swp
+/_site/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md 1970-01-01 01:00:00.000000000 +0100
+++ new/README.md 1970-01-01 01:00:00.000000000 +0100
@@ -38,7 +38,7 @@
config.ignore_paths = ['modules/apt', 'modules/stdlib']
# List of checks to disable
- config.disable_checks = ['documentation', '80chars']
+ config.disable_checks = ['documentation', '140chars']
# Should puppet-lint prefix it's output with the file being checked,
# defaults to true
@@ -59,6 +59,9 @@
# Show ignored problems in the output, defaults to false
config.show_ignored = true
+
+ # Compare module layout relative to the module root
+ config.relative = true
end
## Implemented tests
@@ -70,7 +73,7 @@
* Must use two-space soft tabs.
* Must not use literal tab characters.
* Must not contain trailing white space.
- * Should not exceed an 80 character line width
+ * Should not exceed an 140 character line width
* An exception has been made for `source => 'puppet://...'` lines as
splitting these over multiple lines decreases the readability of the
manifests.
@@ -121,10 +124,10 @@
You can disable any of the checks when running the `puppet-lint` command by
adding a `--no-<check name>-check` flag to the command. For example, if you
-wanted to skip the 80 character check, you would run
+wanted to skip the 140 character check, you would run
```
-puppet-lint --no-80chars-check /path/to/my/manifest.pp
+puppet-lint --no-140chars-check /path/to/my/manifest.pp
```
puppet-lint will also check for a `.puppet-lint.rc` file in the current
@@ -152,10 +155,10 @@
PuppetLint.configuration.send("disable_<check name>")
```
-So, to disable the 80 character check, you would add:
+So, to disable the 140 character check, you would add:
``` ruby
-PuppetLint.configuration.send("disable_80chars")
+PuppetLint.configuration.send("disable_140chars")
```
The Rake task also supports ignoring certain paths
Files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/checkplugin.rb
new/lib/puppet-lint/checkplugin.rb
--- old/lib/puppet-lint/checkplugin.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-lint/checkplugin.rb 1970-01-01 01:00:00.000000000 +0100
@@ -35,7 +35,7 @@
#
# Returns an Array of problem Hashes.
def fix_problems
- @problems.each do |problem|
+ @problems.reject { |problem| problem[:kind] == :ignored }.each do |problem|
if self.respond_to?(:fix)
begin
fix(problem)
@@ -90,6 +90,14 @@
PuppetLint::Data.defined_type_indexes
end
+ # Public: Provides positional information for any node definitions in the
+ # tokens array to the check plugins.
+ #
+ # Returns an Array of Hashes containing the position information.
+ def node_indexes
+ PuppetLint::Data.node_indexes
+ end
+
# Public: Provides the expanded path of the file being analysed to check
# plugins.
#
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/checks.rb
new/lib/puppet-lint/checks.rb
--- old/lib/puppet-lint/checks.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-lint/checks.rb 1970-01-01 01:00:00.000000000 +0100
@@ -20,7 +20,7 @@
def load_data(path, content)
lexer = PuppetLint::Lexer.new
PuppetLint::Data.path = path
- PuppetLint::Data.manifest_lines = content.split("\n")
+ PuppetLint::Data.manifest_lines = content.split("\n", -1)
begin
PuppetLint::Data.tokens = lexer.tokenise(content)
PuppetLint::Data.parse_control_comments
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/data.rb new/lib/puppet-lint/data.rb
--- old/lib/puppet-lint/data.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-lint/data.rb 1970-01-01 01:00:00.000000000 +0100
@@ -25,13 +25,23 @@
@resource_indexes = nil
@class_indexes = nil
@defined_type_indexes = nil
+ @function_indexes = nil
+ @array_indexes = nil
+ @hash_indexes = nil
+ @defaults_indexes = nil
end
# Public: Get the tokenised manifest.
#
# Returns an Array of PuppetLint::Lexer::Token objects.
def tokens
- if caller[0][/`.*'/][1..-2] == 'check'
+ calling_method = begin
+ caller[0][/`.*'/][1..-2]
+ rescue NoMethodError
+ caller[1][/`.*'/][1..-2]
+ end
+
+ if calling_method == 'check'
@tokens.dup
else
@tokens
@@ -100,7 +110,7 @@
if tokens[token_idx].type == :COLON
next_token = tokens[token_idx].next_code_token
depth = 1
- if next_token.type != :LBRACE
+ if next_token && next_token.type != :LBRACE
tokens[(token_idx + 1)..-1].each_index do |idx|
real_idx = token_idx + idx + 1
if tokens[real_idx].type == :LBRACE
@@ -179,6 +189,20 @@
@defined_type_indexes ||= definition_indexes(:DEFINE)
end
+ # Internal: Calculate the positions of all node definitions within the
+ # `tokens` Array.
+ #
+ # Returns an Array of Hashes, each containing:
+ # :start - An Integer position in the `tokens` Array pointing to the
+ # first Token of a defined type definition.
+ # :end - An Integer position in the `tokens` Array pointing to the
last
+ # Token of a defined type definition.
+ # :tokens - An Array consisting of all the Token objects that make up the
+ # defined type.
+ def node_indexes
+ @node_indexes ||= definition_indexes(:NODE)
+ end
+
# Internal: Calculate the positions of all the specified defintion types
# within the `tokens` Array.
#
@@ -232,6 +256,161 @@
result
end
+ # Internal: Calculate the positions of all function calls within
+ # `tokens` Array.
+ #
+ # Returns an Array of Hashes, each containing:
+ # :start - An Integer position in the `tokens` Array pointing to the
+ # first Token of a function call
+ # :end - An Integer position in the `tokens` Array pointing to the
last
+ # Token of a function call
+ # :tokens - An Array consisting of all the Token objects that make up the
+ # function call.
+ def function_indexes
+ @function_indexes ||= Proc.new do
+ functions = []
+ tokens.each_with_index do |token, token_idx|
+ if token.type == :NAME && \
+ (token_idx == 0 || (token_idx == 1 && tokens[0].type ==
:WHITESPACE) || token.prev_token.type == :NEWLINE || token.prev_token.type ==
:INDENT || \
+ # function in a function
+ (token.prev_code_token && token.prev_code_token.type == :LPAREN))
+
+ # Hash key
+ next if token.next_code_token && token.next_code_token.type ==
:FARROW
+
+ level = 0
+ real_idx = 0
+ in_paren = false
+ tokens[token_idx+1..-1].each_with_index do |cur_token,
cur_token_idx|
+ break if level == 0 && in_paren
+ break if level == 0 && cur_token.type == :NEWLINE
+
+ if cur_token.type == :LPAREN
+ level += 1
+ in_paren = true
+ end
+ level -= 1 if cur_token.type == :RPAREN
+ real_idx = token_idx + 1 + cur_token_idx
+ end
+
+ functions << {
+ :start => token_idx,
+ :end => real_idx,
+ :tokens => tokens[token_idx..real_idx],
+ }
+ end
+ end
+ functions
+ end.call
+ end
+
+ # Internal: Calculate the positions of all array values within
+ # `tokens` Array.
+ #
+ # Returns an Array of Hashes, each containing:
+ # :start - An Integer position in the `tokens` Array pointing to the
+ # first Token of an array value
+ # :end - An Integer position in the `tokens` Array pointing to the
last
+ # Token of an array value
+ # :tokens - An Array consisting of all the Token objects that make up the
+ # array value.
+ def array_indexes
+ @array_indexes ||= Proc.new do
+ arrays = []
+ tokens.each_with_index do |token, token_idx|
+ if token.type == :LBRACK
+ real_idx = 0
+ tokens[token_idx+1..-1].each_with_index do |cur_token,
cur_token_idx|
+ real_idx = token_idx + 1 + cur_token_idx
+ break if cur_token.type == :RBRACK
+ end
+
+ # Ignore resource references
+ next if token.prev_code_token && \
+ token.prev_code_token.type == :CLASSREF
+ arrays << {
+ :start => token_idx,
+ :end => real_idx,
+ :tokens => tokens[token_idx..real_idx],
+ }
+ end
+ end
+ arrays
+ end.call
+ end
+
+ # Internal: Calculate the positions of all hash values within
+ # `tokens` Array.
+ #
+ # Returns an Array of Hashes, each containing:
+ # :start - An Integer position in the `tokens` Array pointing to the
+ # first Token of an hash value
+ # :end - An Integer position in the `tokens` Array pointing to the
last
+ # Token of an hash value
+ # :tokens - An Array consisting of all the Token objects that make up the
+ # hash value.
+ def hash_indexes
+ @hash_indexes ||= Proc.new do
+ hashes = []
+ tokens.each_with_index do |token, token_idx|
+ next unless token.prev_code_token
+ next unless [:EQUALS, :ISEQUAL, :FARROW, :LPAREN].include?
token.prev_code_token.type
+ if token.type == :LBRACE
+ level = 0
+ real_idx = 0
+ tokens[token_idx+1..-1].each_with_index do |cur_token,
cur_token_idx|
+ real_idx = token_idx + 1 + cur_token_idx
+
+ level += 1 if cur_token.type == :LBRACE
+ level -= 1 if cur_token.type == :RBRACE
+ break if level < 0
+ end
+
+ hashes << {
+ :start => token_idx,
+ :end => real_idx,
+ :tokens => tokens[token_idx..real_idx],
+ }
+ end
+ end
+ hashes
+ end.call
+ end
+
+ # Internal: Calculate the positions of all defaults declarations within
+ # `tokens` Array.
+ #
+ # Returns an Array of Hashes, each containing:
+ # :start - An Integer position in the `tokens` Array pointing to the
+ # first Token of the defaults declaration
+ # :end - An Integer position in the `tokens` Array pointing to the
last
+ # Token of the defaults declaration
+ # :tokens - An Array consisting of all the Token objects that make up the
+ # defaults declaration.
+ def defaults_indexes
+ @defaults_indexes ||= Proc.new do
+ defaults = []
+ tokens.each_with_index do |token, token_idx|
+ if token.type == :CLASSREF && token.next_code_token && \
+ token.next_code_token.type == :LBRACE
+ real_idx = 0
+
+ tokens[token_idx+1..-1].each_with_index do |cur_token,
cur_token_idx|
+ real_idx = token_idx + 1 + cur_token_idx
+ break if cur_token.type == :RBRACE
+ end
+
+ defaults << {
+ :start => token_idx,
+ :end => real_idx,
+ :tokens => tokens[token_idx..real_idx],
+ }
+ end
+ end
+ defaults
+ end.call
+ end
+
# Internal: Finds all the tokens that make up the defined type or class
# definition parameters.
#
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/lexer/token.rb
new/lib/puppet-lint/lexer/token.rb
--- old/lib/puppet-lint/lexer/token.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-lint/lexer/token.rb 1970-01-01 01:00:00.000000000 +0100
@@ -9,6 +9,9 @@
# Public: Returns the String value of the Token.
attr_accessor :value
+ # Public: Returns the raw value of the Token.
+ attr_accessor :raw
+
# Public: Returns the Integer line number of the manifest text where
# the Token can be found.
attr_reader :line
@@ -87,6 +90,8 @@
"##{@value}"
when :REGEX
"/#{@value}/"
+ when :MLCOMMENT
+ @raw
else
@value
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/lexer.rb new/lib/puppet-lint/lexer.rb
--- old/lib/puppet-lint/lexer.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-lint/lexer.rb 1970-01-01 01:00:00.000000000 +0100
@@ -195,11 +195,12 @@
elsif mlcomment = chunk[/\A(\/\*.*?\*\/)/m, 1]
length = mlcomment.size
+ mlcomment_raw = mlcomment.dup
mlcomment.sub!(/\A\/\* ?/, '')
mlcomment.sub!(/ ?\*\/\Z/, '')
- mlcomment.gsub!(/ *\* ?/, '')
- mlcomment.strip!
+ mlcomment.gsub!(/^ *\*/, '')
tokens << new_token(:MLCOMMENT, mlcomment, length)
+ tokens.last.raw = mlcomment_raw
elsif chunk.match(/\A\/.*?\//) && possible_regex?
str_content =
StringScanner.new(code[i+1..-1]).scan_until(/(\A|[^\\])(\\\\)*\//m)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/optparser.rb
new/lib/puppet-lint/optparser.rb
--- old/lib/puppet-lint/optparser.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-lint/optparser.rb 1970-01-01 01:00:00.000000000 +0100
@@ -58,6 +58,14 @@
load f
end
+ opts.on('--load-from-puppet MODULEPATH', 'Load plugins from the given
Puppet module path.') do |path|
+ path.split(':').each do |p|
+ Dir["#{p}/*/lib/puppet-lint/plugins/*.rb"].each do |file|
+ load file
+ end
+ end
+ end
+
opts.on('-f', '--fix', 'Attempt to automatically fix errors') do
PuppetLint.configuration.fix = true
end
@@ -98,7 +106,12 @@
end
opts.load('/etc/puppet-lint.rc')
- opts.load(File.expand_path('~/.puppet-lint.rc')) if ENV['HOME']
+ begin
+ opts.load(File.expand_path('~/.puppet-lint.rc')) if ENV['HOME']
+ rescue Errno::EACCES
+ # silently skip loading this file if HOME is set to a directory that
+ # the user doesn't have read access to.
+ end
opts.load('.puppet-lint.rc')
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/plugins/check_classes.rb
new/lib/puppet-lint/plugins/check_classes.rb
--- old/lib/puppet-lint/plugins/check_classes.rb 1970-01-01
01:00:00.000000000 +0100
+++ new/lib/puppet-lint/plugins/check_classes.rb 1970-01-01
01:00:00.000000000 +0100
@@ -45,7 +45,7 @@
end
# Public: Check the manifest tokens for any classes or defined types that
-# have a dash in their name and record a warning for each instance found.
+# have a dash in their name and record an error for each instance found.
PuppetLint.new_check(:names_containing_dash) do
def check
(class_indexes + defined_type_indexes).each do |class_idx|
@@ -56,7 +56,7 @@
obj_type = 'defined type'
end
- notify :warning, {
+ notify :error, {
:message => "#{obj_type} name containing a dash",
:line => class_idx[:name_token].line,
:column => class_idx[:name_token].column,
@@ -263,17 +263,19 @@
msg = "top-scope variable being used without an explicit namespace"
referenced_variables.each do |token|
unless future_parser_scopes[token.line].nil?
- next if future_parser_scopes[token.line].include?(token.value)
+ next if
future_parser_scopes[token.line].include?(token.value.gsub(/\[.+\]\Z/, ''))
end
unless token.value.include? '::'
- unless variables_in_scope.include? token.value.gsub(/\[.+\]\Z/, '')
- unless token.value =~ /\A\d+\Z/
- notify :warning, {
- :message => msg,
- :line => token.line,
- :column => token.column,
- }
+ unless token.value =~ /^(facts|trusted)\[.+\]/
+ unless variables_in_scope.include? token.value.gsub(/\[.+\]\Z/, '')
+ unless token.value =~ /\A\d+\Z/
+ notify :warning, {
+ :message => msg,
+ :line => token.line,
+ :column => token.column,
+ }
+ end
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/plugins/check_comments.rb
new/lib/puppet-lint/plugins/check_comments.rb
--- old/lib/puppet-lint/plugins/check_comments.rb 1970-01-01
01:00:00.000000000 +0100
+++ new/lib/puppet-lint/plugins/check_comments.rb 1970-01-01
01:00:00.000000000 +0100
@@ -36,7 +36,7 @@
end
def fix(problem)
- comment_lines = problem[:token].value.split("\n")
+ comment_lines = problem[:token].value.strip.split("\n").map(&:strip)
first_line = comment_lines.shift
problem[:token].type = :COMMENT
problem[:token].value = " #{first_line}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/plugins/check_conditionals.rb
new/lib/puppet-lint/plugins/check_conditionals.rb
--- old/lib/puppet-lint/plugins/check_conditionals.rb 1970-01-01
01:00:00.000000000 +0100
+++ new/lib/puppet-lint/plugins/check_conditionals.rb 1970-01-01
01:00:00.000000000 +0100
@@ -46,9 +46,13 @@
end
end
- case_indexes.each do |kase|
+ case_indexes.each_with_index do |kase,kase_index|
case_tokens = tokens[kase[:start]..kase[:end]]
+ case_indexes[(kase_index + 1)..-1].each do |successor_kase|
+ case_tokens -= tokens[successor_kase[:start]..successor_kase[:end]]
+ end
+
unless case_tokens.index { |r| r.type == :DEFAULT }
notify :warning, {
:message => 'case statement without a default case',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/plugins/check_nodes.rb
new/lib/puppet-lint/plugins/check_nodes.rb
--- old/lib/puppet-lint/plugins/check_nodes.rb 1970-01-01 01:00:00.000000000
+0100
+++ new/lib/puppet-lint/plugins/check_nodes.rb 1970-01-01 01:00:00.000000000
+0100
@@ -5,7 +5,8 @@
node_tokens = tokens.select { |token| token.type == :NODE }
node_tokens.each do |node|
node_token_idx = tokens.index(node)
- node_lbrace_idx = tokens.index(tokens.find { |token| token.type ==
:LBRACE })
+ node_lbrace_tok = tokens[node_token_idx..-1].find { |token| token.type
== :LBRACE }
+ node_lbrace_idx = tokens.index(node_lbrace_tok)
tokens[node_token_idx..node_lbrace_idx].select { |token|
token.type == :NAME
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/plugins/check_strings.rb
new/lib/puppet-lint/plugins/check_strings.rb
--- old/lib/puppet-lint/plugins/check_strings.rb 1970-01-01
01:00:00.000000000 +0100
+++ new/lib/puppet-lint/plugins/check_strings.rb 1970-01-01
01:00:00.000000000 +0100
@@ -155,15 +155,20 @@
PuppetLint.new_check(:puppet_url_without_modules) do
def check
tokens.select { |token|
- token.type == :SSTRING && token.value.start_with?('puppet://')
+ (token.type == :SSTRING || token.type == :STRING || token.type ==
:DQPRE) && token.value.start_with?('puppet://')
}.reject { |token|
- token.value[/puppet:\/\/.*?\/(.+)/, 1].start_with?('modules/')
+ token.value[/puppet:\/\/.*?\/(.+)/, 1].start_with?('modules/') unless
token.value[/puppet:\/\/.*?\/(.+)/, 1].nil?
}.each do |token|
notify :warning, {
:message => 'puppet:// URL without modules/ found',
:line => token.line,
:column => token.column,
+ :token => token,
}
end
end
+
+ def fix(problem)
+ problem[:token].value.gsub!(/(puppet:\/\/.*?\/)/, '\1modules/')
+ end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/plugins/check_whitespace.rb
new/lib/puppet-lint/plugins/check_whitespace.rb
--- old/lib/puppet-lint/plugins/check_whitespace.rb 1970-01-01
01:00:00.000000000 +0100
+++ new/lib/puppet-lint/plugins/check_whitespace.rb 1970-01-01
01:00:00.000000000 +0100
@@ -26,7 +26,7 @@
PuppetLint.new_check(:trailing_whitespace) do
def check
tokens.select { |token|
- token.type == :WHITESPACE
+ [:WHITESPACE, :INDENT].include?(token.type)
}.select { |token|
token.next_token.nil? || token.next_token.type == :NEWLINE
}.each do |token|
@@ -48,19 +48,19 @@
end
end
-# Public: Test the raw manifest string for lines containing more than 80
+# Public: Test the raw manifest string for lines containing more than 140
# characters and record a warning for each instance found. The only exceptions
# to this rule are lines containing URLs and template() calls which would hurt
# readability if split.
-PuppetLint.new_check(:'80chars') do
+PuppetLint.new_check(:'140chars') do
def check
manifest_lines.each_with_index do |line, idx|
unless line =~ /:\/\// || line =~ /template\(/
- if line.scan(/./mu).size > 80
+ if line.scan(/./mu).size > 140
notify :warning, {
- :message => 'line has more than 80 characters',
+ :message => 'line has more than 140 characters',
:line => idx + 1,
- :column => 80,
+ :column => 140,
}
end
end
@@ -112,7 +112,8 @@
if token.type == :FARROW
(level_tokens[indent_depth_idx] ||= []) << token
prev_indent_token = resource_tokens[0..idx].rindex { |t| t.type ==
:INDENT }
- indent_length =
resource_tokens[prev_indent_token].to_manifest.length +
token.prev_code_token.to_manifest.length + 2
+ indent_token_length = prev_indent_token.nil? ? 0 :
resource_tokens[prev_indent_token].to_manifest.length
+ indent_length = indent_token_length +
token.prev_code_token.to_manifest.length + 2
if indent_depth[indent_depth_idx] < indent_length
indent_depth[indent_depth_idx] = indent_length
@@ -122,9 +123,9 @@
indent_depth_idx += 1
indent_depth << 0
level_tokens[indent_depth_idx] ||= []
- elsif token.type == :RBRACE
+ elsif token.type == :RBRACE || token.type == :SEMIC
level_tokens[indent_depth_idx].each do |arrow_tok|
- unless arrow_tok.column == indent_depth[indent_depth_idx]
+ unless arrow_tok.column == indent_depth[indent_depth_idx] ||
level_tokens[indent_depth_idx].size == 1
arrows_on_line = level_tokens[indent_depth_idx].select { |t|
t.line == arrow_tok.line }
notify :warning, {
:message => 'indentation of => is not properly aligned',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/tasks/puppet-lint.rb
new/lib/puppet-lint/tasks/puppet-lint.rb
--- old/lib/puppet-lint/tasks/puppet-lint.rb 1970-01-01 01:00:00.000000000
+0100
+++ new/lib/puppet-lint/tasks/puppet-lint.rb 1970-01-01 01:00:00.000000000
+0100
@@ -26,6 +26,7 @@
attr_accessor :with_context
attr_accessor :fix
attr_accessor :show_ignored
+ attr_accessor :relative
# Public: Initialise a new PuppetLint::RakeTask.
#
@@ -49,6 +50,8 @@
task_block.call(*[self, args].slice(0, task_block.arity)) if task_block
+ # clear any (auto-)pre-existing task
+ Rake::Task[@name].clear if Rake::Task.task_defined?(@name)
task @name do
PuppetLint::OptParser.build
@@ -56,11 +59,15 @@
PuppetLint.configuration.send("disable_#{check}")
end
- %w{with_filename fail_on_warnings error_level log_format with_context
fix show_ignored}.each do |config|
+ %w{with_filename fail_on_warnings error_level log_format with_context
fix show_ignored relative}.each do |config|
value = instance_variable_get("@#{config}")
PuppetLint.configuration.send("#{config}=".to_sym, value) unless
value.nil?
end
+ if PuppetLint.configuration.ignore_paths
+ @ignore_paths = PuppetLint.configuration.ignore_paths
+ end
+
RakeFileUtils.send(:verbose, true) do
linter = PuppetLint.new
matched_files = FileList[@pattern]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint/version.rb
new/lib/puppet-lint/version.rb
--- old/lib/puppet-lint/version.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-lint/version.rb 1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +1,3 @@
class PuppetLint
- VERSION = '1.1.0'
+ VERSION = '2.0.0'
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/puppet-lint.rb new/lib/puppet-lint.rb
--- old/lib/puppet-lint.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/lib/puppet-lint.rb 1970-01-01 01:00:00.000000000 +0100
@@ -164,6 +164,12 @@
raise PuppetLint::NoCodeError
end
+ if @code.empty?
+ @problems = []
+ @manifest = []
+ return
+ end
+
linter = PuppetLint::Checks.new
@problems = linter.run(@path, @code)
@problems.each { |problem| @statistics[problem[:kind]] += 1 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 1970-01-01 01:00:00.000000000 +0100
+++ new/metadata 1970-01-01 01:00:00.000000000 +0100
@@ -1,94 +1,80 @@
---- !ruby/object:Gem::Specification
+--- !ruby/object:Gem::Specification
name: puppet-lint
-version: !ruby/object:Gem::Version
- hash: 19
- prerelease:
- segments:
- - 1
- - 1
- - 0
- version: 1.1.0
+version: !ruby/object:Gem::Version
+ version: 2.0.0
platform: ruby
-authors:
+authors:
- Tim Sharpe
autorequire:
bindir: bin
cert_chain: []
-
-date: 2014-09-23 00:00:00 -07:00
-default_executable:
-dependencies:
-- !ruby/object:Gem::Dependency
+date: 2016-06-22 00:00:00.000000000 Z
+dependencies:
+- !ruby/object:Gem::Dependency
name: rake
- prerelease: false
- requirement: &id001 !ruby/object:Gem::Requirement
- none: false
- requirements:
- - - ~>
- - !ruby/object:Gem::Version
- hash: 35
- segments:
- - 10
- - 0
- version: "10.0"
+ requirement: !ruby/object:Gem::Requirement
+ requirements:
+ - - ~>
+ - !ruby/object:Gem::Version
+ version: '10.0'
type: :development
- version_requirements: *id001
-- !ruby/object:Gem::Dependency
- name: rspec
prerelease: false
- requirement: &id002 !ruby/object:Gem::Requirement
- none: false
- requirements:
- - - ~>
- - !ruby/object:Gem::Version
- hash: 7
- segments:
- - 3
- - 0
- version: "3.0"
+ version_requirements: !ruby/object:Gem::Requirement
+ requirements:
+ - - ~>
+ - !ruby/object:Gem::Version
+ version: '10.0'
+- !ruby/object:Gem::Dependency
+ name: rspec
+ requirement: !ruby/object:Gem::Requirement
+ requirements:
+ - - ~>
+ - !ruby/object:Gem::Version
+ version: '3.0'
type: :development
- version_requirements: *id002
-- !ruby/object:Gem::Dependency
- name: rspec-its
prerelease: false
- requirement: &id003 !ruby/object:Gem::Requirement
- none: false
- requirements:
- - - ~>
- - !ruby/object:Gem::Version
- hash: 15
- segments:
- - 1
- - 0
- version: "1.0"
+ version_requirements: !ruby/object:Gem::Requirement
+ requirements:
+ - - ~>
+ - !ruby/object:Gem::Version
+ version: '3.0'
+- !ruby/object:Gem::Dependency
+ name: rspec-its
+ requirement: !ruby/object:Gem::Requirement
+ requirements:
+ - - ~>
+ - !ruby/object:Gem::Version
+ version: '1.0'
type: :development
- version_requirements: *id003
-- !ruby/object:Gem::Dependency
- name: rspec-collection_matchers
prerelease: false
- requirement: &id004 !ruby/object:Gem::Requirement
- none: false
- requirements:
- - - ~>
- - !ruby/object:Gem::Version
- hash: 15
- segments:
- - 1
- - 0
- version: "1.0"
+ version_requirements: !ruby/object:Gem::Requirement
+ requirements:
+ - - ~>
+ - !ruby/object:Gem::Version
+ version: '1.0'
+- !ruby/object:Gem::Dependency
+ name: rspec-collection_matchers
+ requirement: !ruby/object:Gem::Requirement
+ requirements:
+ - - ~>
+ - !ruby/object:Gem::Version
+ version: '1.0'
type: :development
- version_requirements: *id004
+ prerelease: false
+ version_requirements: !ruby/object:Gem::Requirement
+ requirements:
+ - - ~>
+ - !ruby/object:Gem::Version
+ version: '1.0'
description: |-
Checks your Puppet manifests against the Puppetlabs
style guide and alerts you to any discrepancies.
email: [email protected]
-executables:
+executables:
- puppet-lint
extensions: []
-
extra_rdoc_files: []
-
-files:
+files:
- .gitignore
- .travis.yml
- Gemfile
@@ -128,6 +114,7 @@
- spec/fixtures/test/manifests/ignore_reason.pp
- spec/fixtures/test/manifests/init.pp
- spec/fixtures/test/manifests/malformed.pp
+- spec/fixtures/test/manifests/url_interpolation.pp
- spec/fixtures/test/manifests/warning.pp
- spec/puppet-lint/bin_spec.rb
- spec/puppet-lint/configuration_spec.rb
@@ -161,48 +148,37 @@
-
spec/puppet-lint/plugins/check_strings/single_quote_string_with_variables_spec.rb
- spec/puppet-lint/plugins/check_strings/variables_not_enclosed_spec.rb
- spec/puppet-lint/plugins/check_variables/variable_contains_dash_spec.rb
+- spec/puppet-lint/plugins/check_whitespace/140chars_spec.rb
- spec/puppet-lint/plugins/check_whitespace/2sp_soft_tabs_spec.rb
-- spec/puppet-lint/plugins/check_whitespace/80chars_spec.rb
- spec/puppet-lint/plugins/check_whitespace/arrow_alignment_spec.rb
- spec/puppet-lint/plugins/check_whitespace/hard_tabs_spec.rb
- spec/puppet-lint/plugins/check_whitespace/trailing_whitespace_spec.rb
- spec/puppet-lint_spec.rb
- spec/spec_helper.rb
-has_rdoc: true
homepage: https://github.com/rodjek/puppet-lint/
licenses: []
-
+metadata: {}
post_install_message:
rdoc_options: []
-
-require_paths:
+require_paths:
- lib
-required_ruby_version: !ruby/object:Gem::Requirement
- none: false
- requirements:
- - - ">="
- - !ruby/object:Gem::Version
- hash: 3
- segments:
- - 0
- version: "0"
-required_rubygems_version: !ruby/object:Gem::Requirement
- none: false
- requirements:
- - - ">="
- - !ruby/object:Gem::Version
- hash: 3
- segments:
- - 0
- version: "0"
+required_ruby_version: !ruby/object:Gem::Requirement
+ requirements:
+ - - '>='
+ - !ruby/object:Gem::Version
+ version: '0'
+required_rubygems_version: !ruby/object:Gem::Requirement
+ requirements:
+ - - '>='
+ - !ruby/object:Gem::Version
+ version: '0'
requirements: []
-
rubyforge_project:
-rubygems_version: 1.6.2
+rubygems_version: 2.0.14
signing_key:
-specification_version: 3
+specification_version: 4
summary: Ensure your Puppet manifests conform with the Puppetlabs style guide
-test_files:
+test_files:
- spec/fixtures/test/manifests/fail.pp
- spec/fixtures/test/manifests/ignore.pp
- spec/fixtures/test/manifests/ignore_multiple_block.pp
@@ -210,6 +186,7 @@
- spec/fixtures/test/manifests/ignore_reason.pp
- spec/fixtures/test/manifests/init.pp
- spec/fixtures/test/manifests/malformed.pp
+- spec/fixtures/test/manifests/url_interpolation.pp
- spec/fixtures/test/manifests/warning.pp
- spec/puppet-lint/bin_spec.rb
- spec/puppet-lint/configuration_spec.rb
@@ -243,10 +220,11 @@
-
spec/puppet-lint/plugins/check_strings/single_quote_string_with_variables_spec.rb
- spec/puppet-lint/plugins/check_strings/variables_not_enclosed_spec.rb
- spec/puppet-lint/plugins/check_variables/variable_contains_dash_spec.rb
+- spec/puppet-lint/plugins/check_whitespace/140chars_spec.rb
- spec/puppet-lint/plugins/check_whitespace/2sp_soft_tabs_spec.rb
-- spec/puppet-lint/plugins/check_whitespace/80chars_spec.rb
- spec/puppet-lint/plugins/check_whitespace/arrow_alignment_spec.rb
- spec/puppet-lint/plugins/check_whitespace/hard_tabs_spec.rb
- spec/puppet-lint/plugins/check_whitespace/trailing_whitespace_spec.rb
- spec/puppet-lint_spec.rb
- spec/spec_helper.rb
+has_rdoc:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/spec/fixtures/test/manifests/url_interpolation.pp
new/spec/fixtures/test/manifests/url_interpolation.pp
--- old/spec/fixtures/test/manifests/url_interpolation.pp 1970-01-01
01:00:00.000000000 +0100
+++ new/spec/fixtures/test/manifests/url_interpolation.pp 1970-01-01
01:00:00.000000000 +0100
@@ -0,0 +1,12 @@
+file { 'test1':
+ source => 'puppet:///foo'
+}
+file { 'test2':
+ source => "puppet:///foo/${::fqdn}"
+}
+file { 'test3':
+ source => "puppet:///${::fqdn}/foo"
+}
+file { 'test4':
+ source => "puppet:///foo/${::fqdn}/bar"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/spec/puppet-lint/lexer_spec.rb
new/spec/puppet-lint/lexer_spec.rb
--- old/spec/puppet-lint/lexer_spec.rb 1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-lint/lexer_spec.rb 1970-01-01 01:00:00.000000000 +0100
@@ -687,7 +687,7 @@
it 'should match comments on multiple lines' do
token = @lexer.tokenise("/* foo\n * bar\n*/").first
expect(token.type).to eq(:MLCOMMENT)
- expect(token.value).to eq("foo\nbar")
+ expect(token.value).to eq("foo\n bar\n")
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/spec/puppet-lint/plugins/check_classes/names_containing_dash_spec.rb
new/spec/puppet-lint/plugins/check_classes/names_containing_dash_spec.rb
--- old/spec/puppet-lint/plugins/check_classes/names_containing_dash_spec.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-lint/plugins/check_classes/names_containing_dash_spec.rb
1970-01-01 01:00:00.000000000 +0100
@@ -12,8 +12,8 @@
expect(problems).to have(1).problem
end
- it 'should create a warning' do
- expect(problems).to contain_warning(class_msg).on_line(1).in_column(7)
+ it 'should create an error' do
+ expect(problems).to contain_error(class_msg).on_line(1).in_column(7)
end
end
@@ -25,8 +25,8 @@
expect(problems).to have(1).problem
end
- it 'should create a warning' do
- expect(problems).to contain_warning(define_msg).on_line(1).in_column(8)
+ it 'should create an error' do
+ expect(problems).to contain_error(define_msg).on_line(1).in_column(8)
end
end
@@ -38,8 +38,8 @@
expect(problems).to have(1).problem
end
- it 'should create a warning' do
- expect(problems).to contain_warning(class_msg).on_line(1).in_column(7)
+ it 'should create an error' do
+ expect(problems).to contain_error(class_msg).on_line(1).in_column(7)
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/spec/puppet-lint/plugins/check_classes/variable_scope_spec.rb
new/spec/puppet-lint/plugins/check_classes/variable_scope_spec.rb
--- old/spec/puppet-lint/plugins/check_classes/variable_scope_spec.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-lint/plugins/check_classes/variable_scope_spec.rb
1970-01-01 01:00:00.000000000 +0100
@@ -147,16 +147,19 @@
context 'future parser blocks' do
let(:code) { "
class foo() {
- $foo = [1,2]
+ $foo = {1=>2, 3=>4}
$foo.each |$a, $b| {
- $a
- $c
+ $a # should cause no warnings
+ $c # top-scope variable warning
+ }
+ $b # top-scope variable warning
+ $foo.each |$d| {
+ $d[1] # should cause no warnings
}
- $b
}
" }
- it 'should only detect a single problem' do
+ it 'should only detect two problems' do
expect(problems).to have(2).problem
end
@@ -179,4 +182,18 @@
end
end
end
+
+ context 'support the use of facts and trusted facts for Puppet 3.5 onwards'
do
+ let(:code) { "
+ class foo() {
+ if $facts['osfamily'] == 'redhat' or $trusted['osfamily'] == 'redhat' {
+ $redhat = true
+ }
+ }
+ " }
+
+ it 'should not detect any problems' do
+ expect(problems).to have(0).problems
+ end
+ end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/spec/puppet-lint/plugins/check_conditionals/case_without_default_spec.rb
new/spec/puppet-lint/plugins/check_conditionals/case_without_default_spec.rb
---
old/spec/puppet-lint/plugins/check_conditionals/case_without_default_spec.rb
1970-01-01 01:00:00.000000000 +0100
+++
new/spec/puppet-lint/plugins/check_conditionals/case_without_default_spec.rb
1970-01-01 01:00:00.000000000 +0100
@@ -32,6 +32,48 @@
expect(problems).to contain_warning(msg).on_line(2).in_column(7)
end
end
+
+ context 'nested case statements without a default case on the outermost' do
+ let(:code) { "
+ case $foo {
+ case $foop {
+ bar: {}
+ default: {}
+ }
+ }"
+ }
+
+ it 'should only detect a single problem' do
+ expect(problems).to have(1).problem
+ end
+
+ it 'should create a warning' do
+ expect(problems).to contain_warning(msg)
+ end
+ end
+
+ context 'three nested case statements with two missing default cases' do
+ let(:code) { "
+ case $foo {
+ case $foop {
+ bar: {}
+ case $woop {
+ baz: {}
+ }
+ default: {}
+ }
+ }"
+ }
+
+ it 'should detect two problems' do
+ expect(problems).to have(2).problems
+ end
+
+ it 'should create two warnings' do
+ expect(problems).to contain_warning(msg).on_line(2).in_column(7)
+ expect(problems).to contain_warning(msg).on_line(5).in_column(4)
+ end
+ end
context 'issue-117' do
let(:code) { "
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/spec/puppet-lint/plugins/check_nodes/unquoted_node_name_spec.rb
new/spec/puppet-lint/plugins/check_nodes/unquoted_node_name_spec.rb
--- old/spec/puppet-lint/plugins/check_nodes/unquoted_node_name_spec.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-lint/plugins/check_nodes/unquoted_node_name_spec.rb
1970-01-01 01:00:00.000000000 +0100
@@ -66,6 +66,19 @@
expect(problems).to contain_warning(msg).on_line(1).in_column(18)
end
end
+
+ context 'multiple node blocks' do
+ let(:code) { "node foo { } node bar { }" }
+
+ it 'should detect 2 problems' do
+ expect(problems).to have(2).problems
+ end
+
+ it 'should create 2 warnings' do
+ expect(problems).to contain_warning(msg).on_line(1).in_column(6)
+ expect(problems).to contain_warning(msg).on_line(1).in_column(19)
+ end
+ end
end
context 'with fix enabled' do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/spec/puppet-lint/plugins/check_resources/duplicate_params_spec.rb
new/spec/puppet-lint/plugins/check_resources/duplicate_params_spec.rb
--- old/spec/puppet-lint/plugins/check_resources/duplicate_params_spec.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-lint/plugins/check_resources/duplicate_params_spec.rb
1970-01-01 01:00:00.000000000 +0100
@@ -89,4 +89,12 @@
expect(problems).to have(0).problems
end
end
+
+ context 'colon as last token in file' do
+ let(:code) { "}:" }
+
+ it 'should not detect any problems' do
+ expect(problems).to have(0).problems
+ end
+ end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/spec/puppet-lint/plugins/check_strings/puppet_url_without_modules_spec.rb
new/spec/puppet-lint/plugins/check_strings/puppet_url_without_modules_spec.rb
---
old/spec/puppet-lint/plugins/check_strings/puppet_url_without_modules_spec.rb
1970-01-01 01:00:00.000000000 +0100
+++
new/spec/puppet-lint/plugins/check_strings/puppet_url_without_modules_spec.rb
1970-01-01 01:00:00.000000000 +0100
@@ -11,15 +11,52 @@
end
end
- context 'puppet:// url without modules' do
- let(:code) { "'puppet:///foo'" }
+ context 'with fix disabled' do
+ context 'puppet:// url without modules' do
+ let(:code) { "'puppet:///foo'" }
- it 'should only detect a single problem' do
- expect(problems).to have(1).problem
+ it 'should only detect a single problem' do
+ expect(problems).to have(1).problem
+ end
+
+ it 'should create a warning' do
+ expect(problems).to contain_warning(msg).on_line(1).in_column(1)
+ end
+ end
+ end
+
+ context 'with fix enabled' do
+ before do
+ PuppetLint.configuration.fix = true
end
- it 'should create a warning' do
- expect(problems).to contain_warning(msg).on_line(1).in_column(1)
+ after do
+ PuppetLint.configuration.fix = false
end
+
+ context 'puppet:// url without modules' do
+ let(:code) { "'puppet:///foo'" }
+
+ it 'should only detect a single problem' do
+ expect(problems).to have(1).problem
+ end
+
+ it 'should fix the manifest' do
+ expect(problems).to contain_fixed(msg).on_line(1).in_column(1)
+ end
+
+ it 'should insert modules into the path' do
+ expect(manifest).to eq("'puppet:///modules/foo'")
+ end
+ end
+ end
+
+ context 'double string wrapped puppet:// urls' do
+ let(:code) {
File.read('spec/fixtures/test/manifests/url_interpolation.pp') }
+
+ it 'should detect several problems' do
+ expect(problems).to have(4).problem
+ end
+
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/spec/puppet-lint/plugins/check_whitespace/140chars_spec.rb
new/spec/puppet-lint/plugins/check_whitespace/140chars_spec.rb
--- old/spec/puppet-lint/plugins/check_whitespace/140chars_spec.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-lint/plugins/check_whitespace/140chars_spec.rb
1970-01-01 01:00:00.000000000 +0100
@@ -0,0 +1,54 @@
+# encoding: utf-8
+require 'spec_helper'
+
+describe '140chars' do
+ let(:msg) { 'line has more than 140 characters' }
+
+ context 'file resource with a source line > 140c' do
+ let(:code) { "
+ file {
+ source =>
'puppet:///modules/certificates/etc/ssl/private/wildcard.example.com.crt',
+ }"
+ }
+
+ it 'should not detect any problems' do
+ expect(problems).to have(0).problems
+ end
+ end
+
+ context 'file resource with a template line > 140c' do
+ let(:code) { "
+ file {
+ content =>
template('mymodule/this/is/a/truely/absurdly/long/path/that/should/make/you/feel/bad'),
+ }"
+ }
+
+ it 'should not detect any problems' do
+ expect(problems).to have(0).problems
+ end
+ end
+
+ context 'length of lines with UTF-8 characters' do
+ let(:code) { "
+ # ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
+ # ┃ Configuration ┃
+ # ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"
+ }
+
+ it 'should not detect any problems' do
+ expect(problems).to have(0).problems
+ end
+ end
+
+ context '141 character line' do
+ let(:code) { 'a' * 141 }
+
+ it 'should only detect a single problem' do
+ expect(problems).to have(1).problem
+ end
+
+ it 'should create a warning' do
+ expect(problems).to contain_warning(msg).on_line(1).in_column(140)
+ end
+ end
+end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/spec/puppet-lint/plugins/check_whitespace/80chars_spec.rb
new/spec/puppet-lint/plugins/check_whitespace/80chars_spec.rb
--- old/spec/puppet-lint/plugins/check_whitespace/80chars_spec.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-lint/plugins/check_whitespace/80chars_spec.rb
1970-01-01 01:00:00.000000000 +0100
@@ -1,54 +0,0 @@
-# encoding: utf-8
-require 'spec_helper'
-
-describe '80chars' do
- let(:msg) { 'line has more than 80 characters' }
-
- context 'file resource with a source line > 80c' do
- let(:code) { "
- file {
- source =>
'puppet:///modules/certificates/etc/ssl/private/wildcard.example.com.crt',
- }"
- }
-
- it 'should not detect any problems' do
- expect(problems).to have(0).problems
- end
- end
-
- context 'file resource with a template line > 80c' do
- let(:code) { "
- file {
- content =>
template('mymodule/this/is/a/truely/absurdly/long/path/that/should/make/you/feel/bad'),
- }"
- }
-
- it 'should not detect any problems' do
- expect(problems).to have(0).problems
- end
- end
-
- context 'length of lines with UTF-8 characters' do
- let(:code) { "
- # ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
- # ┃ Configuration ┃
- # ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"
- }
-
- it 'should not detect any problems' do
- expect(problems).to have(0).problems
- end
- end
-
- context '81 character line' do
- let(:code) { 'a' * 81 }
-
- it 'should only detect a single problem' do
- expect(problems).to have(1).problem
- end
-
- it 'should create a warning' do
- expect(problems).to contain_warning(msg).on_line(1).in_column(80)
- end
- end
-end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/spec/puppet-lint/plugins/check_whitespace/arrow_alignment_spec.rb
new/spec/puppet-lint/plugins/check_whitespace/arrow_alignment_spec.rb
--- old/spec/puppet-lint/plugins/check_whitespace/arrow_alignment_spec.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-lint/plugins/check_whitespace/arrow_alignment_spec.rb
1970-01-01 01:00:00.000000000 +0100
@@ -126,6 +126,28 @@
end
end
+ context 'single resource with a misaligned => and semicolon at the end' do
+ let(:code) { "
+ file { '/tmp/bar':
+ foo => 1,
+ bar => 2,
+ gronk => 3,
+ baz => 4,
+ meh => 5;
+ }"
+ }
+
+ it 'should detect four problems' do
+ expect(problems).to have(4).problems
+ end
+
+ it 'should create four warnings' do
+ expect(problems).to contain_warning(msg).on_line(3).in_column(15)
+ expect(problems).to contain_warning(msg).on_line(4).in_column(15)
+ expect(problems).to contain_warning(msg).on_line(6).in_column(16)
+ expect(problems).to contain_warning(msg).on_line(7).in_column(15)
+ end
+ end
context 'complex resource with a misaligned =>' do
let(:code) { "
file { '/tmp/foo':
@@ -171,6 +193,34 @@
end
end
+ context 'multi-resource with a misaligned => and semicolons' do
+ let(:code) { "
+ file {
+ '/tmp/foo':
+ ensure => 'directory',
+ owner => 'root',
+ mode => '0755';
+ '/tmp/bar':
+ ensure => 'directory';
+ '/tmp/baz':
+ ensure => 'directory',
+ owner => 'root',
+ mode => '0755';
+ }"
+ }
+
+ it 'should only detect a single problem' do
+ expect(problems).to have(4).problem
+ end
+
+ it 'should create a warning' do
+ expect(problems).to contain_warning(msg).on_line(5).in_column(19)
+ expect(problems).to contain_warning(msg).on_line(6).in_column(18)
+ expect(problems).to contain_warning(msg).on_line(11).in_column(19)
+ expect(problems).to contain_warning(msg).on_line(12).in_column(18)
+ end
+ end
+
context 'multiple single line resources' do
let(:code) { "
file { 'foo': ensure => file }
@@ -268,6 +318,20 @@
expect(problems).to contain_warning(msg).on_line(3).in_column(26)
end
end
+
+ context 'resource param containing a single-element same-line hash' do
+ let(:code) { "
+ foo { 'foo':
+ a => true,
+ b => { 'a' => 'b' }
+ }
+ "}
+
+ it 'should not detect any problems' do
+ expect(problems).to have(0).problems
+ end
+ end
+
end
context 'with fix enabled' do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/spec/puppet-lint/plugins/check_whitespace/trailing_whitespace_spec.rb
new/spec/puppet-lint/plugins/check_whitespace/trailing_whitespace_spec.rb
--- old/spec/puppet-lint/plugins/check_whitespace/trailing_whitespace_spec.rb
1970-01-01 01:00:00.000000000 +0100
+++ new/spec/puppet-lint/plugins/check_whitespace/trailing_whitespace_spec.rb
1970-01-01 01:00:00.000000000 +0100
@@ -15,6 +15,22 @@
expect(problems).to contain_error(msg).on_line(1).in_column(4)
end
end
+
+ context 'line without code and trailing whitespace' do
+ let(:code) { "
+class {
+
+}
+" }
+
+ it 'should only detect a single problem' do
+ expect(problems).to have(1).problem
+ end
+
+ it 'should create an error' do
+ expect(problems).to contain_error(msg).on_line(3).in_column(1)
+ end
+ end
end
context 'with fix enabled' do
@@ -57,5 +73,29 @@
expect(manifest).to eq("foo\nbar")
end
end
+
+ context 'line without code and trailing whitespace' do
+ let(:code) { "
+class foo {
+
+}
+" }
+ let(:fixed) { "
+class foo {
+
+}
+" }
+ it 'should only detect a single problem' do
+ expect(problems).to have(1).problem
+ end
+
+ it 'should create an error' do
+ expect(problems).to contain_fixed(msg).on_line(3).in_column(1)
+ end
+
+ it 'should remove the trailing whitespace' do
+ expect(manifest).to eq(fixed)
+ end
+ end
end
end