puppet-lint-strict_indent-check 2.1.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/puppet-lint/plugins/check_strict_indent.rb +57 -62
- data/spec/puppet-lint/plugins/check_strict_indent_spec.rb +15 -15
- metadata +9 -100
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a813e32484645b3159a5cc786e1e1df8bb9ce13b7e72de92603836f8d88876d7
|
4
|
+
data.tar.gz: 812be78bb5e2d3eed4b37013d7a9ae2b4587d139ea8e1de1b95413b63b38a81a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5d01a03406cfc9ff251e77b46059e31811346ffd6140c89e1920019f42b1a2590302b284399cc874053127a3645ac72cec725d7ad51bb5a76ede4992c0a8f3a
|
7
|
+
data.tar.gz: 0143dc2fc1d985646be7f22904ea3cd52dce21918c8829d69dfbc178a517af2784516120063ea5b45e2d02ee6a2335e2ae90d74de774302bd4479580c06ab40b
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
|
+
## [3.0.0](https://github.com/voxpupuli/puppet-lint-strict_indent-check/tree/3.0.0) (2023-04-21)
|
6
|
+
|
7
|
+
[Full Changelog](https://github.com/voxpupuli/puppet-lint-strict_indent-check/compare/2.1.0...3.0.0)
|
8
|
+
|
9
|
+
**Breaking changes:**
|
10
|
+
|
11
|
+
- Drop Ruby \< 2.7; Add RuboCop [\#34](https://github.com/voxpupuli/puppet-lint-strict_indent-check/pull/34) ([bastelfreak](https://github.com/bastelfreak))
|
12
|
+
|
5
13
|
## [2.1.0](https://github.com/voxpupuli/puppet-lint-strict_indent-check/tree/2.1.0) (2022-11-29)
|
6
14
|
|
7
15
|
[Full Changelog](https://github.com/voxpupuli/puppet-lint-strict_indent-check/compare/2.0.8...2.1.0)
|
@@ -1,30 +1,30 @@
|
|
1
1
|
# Public: Check the manifest tokens for correct indent levels and
|
2
2
|
# record a warning for each instance found.
|
3
3
|
|
4
|
-
PuppetLint.new_check(:
|
4
|
+
PuppetLint.new_check(:strict_indent) do
|
5
5
|
def match(tokens)
|
6
6
|
opening_token = {
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
7
|
+
RBRACE: :LBRACE,
|
8
|
+
RBRACK: :LBRACK,
|
9
|
+
RPAREN: :LPAREN,
|
10
|
+
HEREDOC: :HEREDOC_OPEN,
|
11
|
+
HEREDOC_POST: :HEREDOC_OPEN,
|
12
12
|
}
|
13
13
|
open = {
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
14
|
+
LBRACE: [],
|
15
|
+
LBRACK: [],
|
16
|
+
LPAREN: [],
|
17
|
+
HEREDOC_OPEN: [],
|
18
18
|
}
|
19
19
|
|
20
20
|
matches = {}
|
21
21
|
|
22
22
|
tokens.each do |token|
|
23
|
-
if [
|
23
|
+
if %i[LBRACE LBRACK LPAREN HEREDOC_OPEN].include?(token.type)
|
24
24
|
open[token.type] << token
|
25
|
-
elsif [
|
25
|
+
elsif %i[RBRACE RBRACK RPAREN HEREDOC HEREDOC_POST].include?(token.type)
|
26
26
|
match = open[opening_token[token.type]].pop
|
27
|
-
|
27
|
+
unless match.nil?
|
28
28
|
matches[token] = match
|
29
29
|
matches[match] = token
|
30
30
|
end
|
@@ -41,26 +41,23 @@ PuppetLint.new_check(:'strict_indent') do
|
|
41
41
|
|
42
42
|
matches = match(tokens)
|
43
43
|
|
44
|
-
tokens.select
|
44
|
+
tokens.select do |token|
|
45
45
|
token.type == :NEWLINE
|
46
|
-
|
46
|
+
end.reject do |token|
|
47
47
|
# ignore newline at end of code
|
48
48
|
token.next_token.nil?
|
49
|
-
|
49
|
+
end.each do |token|
|
50
50
|
temp_indent = 0
|
51
51
|
|
52
52
|
# indent for open groups in the previous line
|
53
53
|
open_groups = 0
|
54
54
|
prev_token = token.prev_token
|
55
|
-
while
|
56
|
-
if prev_token.type == :HEREDOC_OPEN
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
# left braces not matched in the same line increase indent
|
62
|
-
open_groups += 1
|
63
|
-
end
|
55
|
+
while !prev_token.nil? and prev_token.type != :NEWLINE
|
56
|
+
temp_indent += 1 if prev_token.type == :HEREDOC_OPEN
|
57
|
+
if %i[LBRACE LBRACK
|
58
|
+
LPAREN].include?(prev_token.type) && (matches[prev_token].nil? or matches[prev_token].line > prev_token.line)
|
59
|
+
# left braces not matched in the same line increase indent
|
60
|
+
open_groups += 1
|
64
61
|
end
|
65
62
|
prev_token = prev_token.prev_token
|
66
63
|
end
|
@@ -68,7 +65,7 @@ PuppetLint.new_check(:'strict_indent') do
|
|
68
65
|
|
69
66
|
# reset prev_token to last non-whitespace token on previous line
|
70
67
|
prev_token = token.prev_token
|
71
|
-
while
|
68
|
+
while !prev_token.nil? and (prev_token.type == :WHITESPACE or prev_token.type == :COMMENT)
|
72
69
|
prev_token = prev_token.prev_token
|
73
70
|
end
|
74
71
|
|
@@ -88,7 +85,7 @@ PuppetLint.new_check(:'strict_indent') do
|
|
88
85
|
end
|
89
86
|
end
|
90
87
|
when :SEMIC
|
91
|
-
|
88
|
+
unless colon_indent.nil?
|
92
89
|
# only unindent for a semicolon when we've indented for a colon
|
93
90
|
colon_indent = nil
|
94
91
|
indent -= 1
|
@@ -99,18 +96,16 @@ PuppetLint.new_check(:'strict_indent') do
|
|
99
96
|
|
100
97
|
# unindent for closing brackets in the current line
|
101
98
|
next_token = token.next_token
|
102
|
-
while
|
103
|
-
if [
|
104
|
-
if
|
99
|
+
while !next_token.nil? and next_token.type != :NEWLINE
|
100
|
+
if %i[RBRACE RBRACK RPAREN].include?(next_token.type)
|
101
|
+
if !matches[next_token].nil? and matches[next_token].line < next_token.line
|
105
102
|
# right braces matched in a previous line decrease indent
|
106
103
|
indent -= 1
|
107
104
|
end
|
108
|
-
if next_token.type == :RBRACE and
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
colon_indent = nil
|
113
|
-
end
|
105
|
+
if next_token.type == :RBRACE and !colon_indent.nil? && (!matches[next_token].nil? and matches[next_token].line < colon_indent)
|
106
|
+
# unindent at the end of resources if needed
|
107
|
+
indent -= 1
|
108
|
+
colon_indent = nil
|
114
109
|
end
|
115
110
|
end
|
116
111
|
next_token = next_token.next_token
|
@@ -119,9 +114,9 @@ PuppetLint.new_check(:'strict_indent') do
|
|
119
114
|
# obviously we have a problem
|
120
115
|
if indent < 0
|
121
116
|
notify :error, {
|
122
|
-
:
|
123
|
-
:
|
124
|
-
:
|
117
|
+
message: 'Error calculating indent. Please file an issue at https://github.com/relud/puppet-lint-indent-check/issues',
|
118
|
+
line: token.next_token.line,
|
119
|
+
column: token.next_token.column,
|
125
120
|
}
|
126
121
|
# stop parsing indent
|
127
122
|
break
|
@@ -129,43 +124,43 @@ PuppetLint.new_check(:'strict_indent') do
|
|
129
124
|
|
130
125
|
# get actual indent
|
131
126
|
actual = 0
|
132
|
-
if token.next_token.type == :INDENT
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
127
|
+
actual = if token.next_token.type == :INDENT
|
128
|
+
token.next_token.value.length
|
129
|
+
elsif !token.prev_token.nil? and token.prev_token.type == :HEREDOC
|
130
|
+
token.prev_token.value.split("\n").last.length
|
131
|
+
elsif !token.prev_token.nil? and token.prev_token.type == :HEREDOC_OPEN
|
132
|
+
next_token.prev_token.value.split("\n").last.length
|
133
|
+
else
|
134
|
+
0
|
135
|
+
end
|
141
136
|
|
142
137
|
# expected indent
|
143
138
|
expected = (indent + temp_indent) * chars_per_indent
|
144
139
|
|
145
140
|
# oh no! incorrect indent!
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
141
|
+
next unless actual != expected
|
142
|
+
|
143
|
+
# no one cares if blank lines and comments are indented correctly
|
144
|
+
next if %i[COMMENT NEWLINE].include?(token.next_token.type)
|
145
|
+
|
146
|
+
notify :warning, {
|
147
|
+
message: "indent should be #{expected} chars and is #{actual}",
|
148
|
+
line: token.next_token.line,
|
149
|
+
column: token.next_token.column,
|
150
|
+
token: token.next_token,
|
151
|
+
indent: expected,
|
152
|
+
}
|
158
153
|
end
|
159
154
|
end
|
160
155
|
|
161
156
|
def fix(problem)
|
162
157
|
char_for_indent = ' '
|
163
|
-
if [
|
158
|
+
if %i[INDENT WHITESPACE].include?(problem[:token].type)
|
164
159
|
problem[:token].value = char_for_indent * problem[:indent]
|
165
160
|
else
|
166
161
|
tokens.insert(
|
167
162
|
tokens.find_index(problem[:token]),
|
168
|
-
PuppetLint::Lexer::Token.new(:INDENT, char_for_indent * problem[:indent], problem[:line], problem[:column])
|
163
|
+
PuppetLint::Lexer::Token.new(:INDENT, char_for_indent * problem[:indent], problem[:line], problem[:column]),
|
169
164
|
)
|
170
165
|
end
|
171
166
|
end
|
@@ -3,18 +3,18 @@ require 'spec_helper'
|
|
3
3
|
describe 'strict_indent' do
|
4
4
|
before do
|
5
5
|
# disable all other checks
|
6
|
-
PuppetLint.configuration.checks.reject
|
6
|
+
PuppetLint.configuration.checks.reject do |check|
|
7
7
|
check == :indent
|
8
|
-
|
8
|
+
end.each do |check|
|
9
9
|
PuppetLint.configuration.send("disable_#{check}")
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
after do
|
14
14
|
# re-enable other checks
|
15
|
-
PuppetLint.configuration.checks.reject
|
15
|
+
PuppetLint.configuration.checks.reject do |check|
|
16
16
|
check == :indent
|
17
|
-
|
17
|
+
end.each do |check|
|
18
18
|
PuppetLint.configuration.send("enable_#{check}")
|
19
19
|
end
|
20
20
|
end
|
@@ -24,7 +24,7 @@ describe 'strict_indent' do
|
|
24
24
|
context manifest do
|
25
25
|
let(:code) { File.read(manifest) }
|
26
26
|
|
27
|
-
it '
|
27
|
+
it 'detects no problems' do
|
28
28
|
expect(problems).to have(0).problems
|
29
29
|
end
|
30
30
|
end
|
@@ -34,7 +34,7 @@ describe 'strict_indent' do
|
|
34
34
|
context manifest do
|
35
35
|
let(:code) { File.read(manifest) }
|
36
36
|
|
37
|
-
it '
|
37
|
+
it 'detects problems' do
|
38
38
|
expect(problems).to have(1).problems
|
39
39
|
end
|
40
40
|
end
|
@@ -42,7 +42,7 @@ describe 'strict_indent' do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
context 'comment after resource title.' do
|
45
|
-
let(:code)
|
45
|
+
let(:code) do
|
46
46
|
<<-EOF.gsub(/^ {8}/, '')
|
47
47
|
class (
|
48
48
|
) {
|
@@ -52,15 +52,15 @@ describe 'strict_indent' do
|
|
52
52
|
}
|
53
53
|
}
|
54
54
|
EOF
|
55
|
-
|
55
|
+
end
|
56
56
|
|
57
|
-
it '
|
57
|
+
it 'detects 0 problems' do
|
58
58
|
expect(problems).to have(0).problems
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
62
|
context 'invalid array indent' do
|
63
|
-
let(:code)
|
63
|
+
let(:code) do
|
64
64
|
<<-EOF.gsub(/^ {8}/, '')
|
65
65
|
class (
|
66
66
|
) {
|
@@ -71,22 +71,22 @@ describe 'strict_indent' do
|
|
71
71
|
}
|
72
72
|
}
|
73
73
|
EOF
|
74
|
-
|
74
|
+
end
|
75
75
|
|
76
|
-
it '
|
76
|
+
it 'detects 1 problems' do
|
77
77
|
expect(problems).to have(1).problems
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
81
81
|
context 'blank line at beginning of file' do
|
82
|
-
let(:code)
|
82
|
+
let(:code) do
|
83
83
|
<<-EOF.gsub(/^ {8}/, '')
|
84
84
|
|
85
85
|
class () {}
|
86
86
|
EOF
|
87
|
-
|
87
|
+
end
|
88
88
|
|
89
|
-
it '
|
89
|
+
it 'detects 0 problems' do
|
90
90
|
expect(problems).to have(0).problems
|
91
91
|
end
|
92
92
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puppet-lint-strict_indent-check
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vox Pupuli
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: puppet-lint
|
@@ -16,104 +16,20 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '3'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '5'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '3'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: rspec
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '3.0'
|
40
|
-
type: :development
|
41
|
-
prerelease: false
|
42
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - "~>"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '3.0'
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: rspec-its
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - "~>"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '1.0'
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - "~>"
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: '1.0'
|
61
|
-
- !ruby/object:Gem::Dependency
|
62
|
-
name: rspec-collection_matchers
|
63
|
-
requirement: !ruby/object:Gem::Requirement
|
64
|
-
requirements:
|
65
|
-
- - "~>"
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: '1.0'
|
68
|
-
type: :development
|
69
|
-
prerelease: false
|
70
|
-
version_requirements: !ruby/object:Gem::Requirement
|
71
|
-
requirements:
|
72
|
-
- - "~>"
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
version: '1.0'
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: rspec-json_expectations
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
78
|
-
requirements:
|
79
|
-
- - ">="
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: '0'
|
82
|
-
type: :development
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - ">="
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '0'
|
89
|
-
- !ruby/object:Gem::Dependency
|
90
|
-
name: rake
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
92
|
-
requirements:
|
93
|
-
- - ">="
|
94
|
-
- !ruby/object:Gem::Version
|
95
|
-
version: '0'
|
96
|
-
type: :development
|
97
|
-
prerelease: false
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
99
|
-
requirements:
|
100
|
-
- - ">="
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: '0'
|
103
|
-
- !ruby/object:Gem::Dependency
|
104
|
-
name: simplecov
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
106
|
-
requirements:
|
107
|
-
- - ">="
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
110
|
-
type: :development
|
111
|
-
prerelease: false
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
113
|
-
requirements:
|
114
|
-
- - ">="
|
115
|
-
- !ruby/object:Gem::Version
|
116
|
-
version: '0'
|
32
|
+
version: '5'
|
117
33
|
description: " Extends puppet-lint to ensure that your manifests follow a strict
|
118
34
|
indentation pattern.\n"
|
119
35
|
email: voxpupuli@groups.io
|
@@ -134,7 +50,7 @@ files:
|
|
134
50
|
- spec/spec_helper.rb
|
135
51
|
homepage: https://github.com/voxpupuli/puppet-lint-strict_indent-check
|
136
52
|
licenses:
|
137
|
-
-
|
53
|
+
- MPL-2.0
|
138
54
|
metadata: {}
|
139
55
|
post_install_message:
|
140
56
|
rdoc_options: []
|
@@ -144,7 +60,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
144
60
|
requirements:
|
145
61
|
- - ">="
|
146
62
|
- !ruby/object:Gem::Version
|
147
|
-
version:
|
63
|
+
version: 2.7.0
|
148
64
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
149
65
|
requirements:
|
150
66
|
- - ">="
|
@@ -155,11 +71,4 @@ rubygems_version: 3.2.33
|
|
155
71
|
signing_key:
|
156
72
|
specification_version: 4
|
157
73
|
summary: puppet-lint strict indent check
|
158
|
-
test_files:
|
159
|
-
- spec/fixtures/fail/1.pp
|
160
|
-
- spec/fixtures/fail/heredoc_extra.pp
|
161
|
-
- spec/fixtures/fail/heredoc_unsuficient.pp
|
162
|
-
- spec/fixtures/pass/1.pp
|
163
|
-
- spec/fixtures/pass/heredoc.pp
|
164
|
-
- spec/puppet-lint/plugins/check_strict_indent_spec.rb
|
165
|
-
- spec/spec_helper.rb
|
74
|
+
test_files: []
|