puppet-lint-unquoted_string-check 0.1.2 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1ea22a3b0a227e64b12ee46c8b12f9337c01f4ac
4
- data.tar.gz: 69ec7bce2e2a708ec184fb28ad98ddc2db8eb9d7
3
+ metadata.gz: a0f287edbcd2db83abe8c1764f5982f402c91a09
4
+ data.tar.gz: ad677f9fee5fb6ce5d0879f20e9b63a281f569ab
5
5
  SHA512:
6
- metadata.gz: 3168c4df9279fbfe9e30257cbaf8f1c8ba4749cef7382efd26ebaf41c80c4a93c8144fc69e9afb7ff915a34b6d98057c54118145afe64f00d57b31c4f02174b6
7
- data.tar.gz: cb8efc59e01b978ccd5032918e9b702dc2b8004f979d86bd4b99751b4414965e29c29aceedb81b153cfddf6df503a4b7d5017c32e12cdc24a8ec060ae0f08db9
6
+ metadata.gz: 3b5768b1bab4cbfc8a4ca9653996ccabe8e76313a4c7224e4763026d286896125cb12b00b5ae5b0193109b983868dc14eb3b9912b51cabbb445fd80b05427b44
7
+ data.tar.gz: 6747989bffe6e7873e6084f2748d54c3c16a7c548a307648da9ce7aad91bc81363f68acca89dcd4b703b3f80eb7f55fd85e7d6ce060fb29a942ea875d2e0f91c
@@ -1,131 +1,87 @@
1
1
  require 'pp'
2
2
 
3
- PuppetLint.new_check(:unquoted_string_in_case) do
4
-
5
- def check
6
- case_indexes = []
7
-
8
- tokens.each_index do |token_idx|
9
- if tokens[token_idx].type == :CASE
10
- depth = 0
11
- tokens[(token_idx + 1)..-1].each_index do |case_token_idx|
12
- idx = case_token_idx + token_idx + 1
13
- if tokens[idx].type == :LBRACE
14
- depth += 1
15
- elsif tokens[idx].type == :RBRACE
16
- depth -= 1
17
- if depth == 0
18
- case_indexes << {:start => token_idx, :end => idx}
19
- break
20
- end
3
+ def type_indexes(type)
4
+ type_indexes = []
5
+ tokens.each_index do |token_idx|
6
+ if tokens[token_idx].type == type
7
+ depth = 0
8
+ tokens[(token_idx + 1)..-1].each_index do |case_token_idx|
9
+ idx = case_token_idx + token_idx + 1
10
+ if tokens[idx].type == :LBRACE
11
+ depth += 1
12
+ elsif tokens[idx].type == :RBRACE
13
+ depth -= 1
14
+ if depth == 0
15
+ type_indexes << {:start => token_idx, :end => idx}
16
+ break
21
17
  end
22
18
  end
23
19
  end
24
20
  end
21
+ end
22
+ type_indexes
23
+ end
25
24
 
26
- case_indexes.each do |kase|
27
- case_tokens = tokens[kase[:start]..kase[:end]]
28
-
29
- if case_tokens.index { |r| r.next_token.type == :COLON && (r.type == :NAME || r.type == :CLASSREF) }
30
- notify :warning, {
31
- :message => 'expected quoted string in case',
32
- :line => case_tokens.first.line,
33
- :column => case_tokens.first.column,
34
- }
35
- end
36
- end
37
- end
38
-
39
- def fix(problem)
40
- case_indexes = []
41
-
42
- tokens.each_index do |token_idx|
43
- if tokens[token_idx].type == :CASE
44
- depth = 0
45
- tokens[(token_idx + 1)..-1].each_index do |case_token_idx|
46
- idx = case_token_idx + token_idx + 1
47
- if tokens[idx].type == :LBRACE
48
- depth += 1
49
- elsif tokens[idx].type == :RBRACE
50
- depth -= 1
51
- if depth == 0
52
- case_indexes << {:start => token_idx, :end => idx}
53
- break
54
- end
55
- end
25
+ def tokens_to_fix(type_tokens, sep_type)
26
+ tokens_to_fix = []
27
+ type_tokens.index do |r|
28
+ if r.type == sep_type
29
+ s = r.prev_token
30
+ while s.type != :NEWLINE
31
+ if s.type == :NAME || s.type == :CLASSREF
32
+ tokens_to_fix << s
56
33
  end
34
+ s = s.prev_token
57
35
  end
58
36
  end
37
+ end
38
+ tokens_to_fix
39
+ end
59
40
 
60
- case_indexes.each do |kase|
61
- case_tokens = tokens[kase[:start]..kase[:end]]
41
+ def act_on_tokens(type, sep_type, &block)
42
+ type_indexes(type).each do |kase|
43
+ case_tokens = tokens[kase[:start]..kase[:end]]
62
44
 
63
- case_tokens.index { |r| r.type = :SSTRING if r.type == :NAME || r.type == :CLASSREF }
45
+ tokens_to_fix(case_tokens, sep_type).each do |r|
46
+ block.call(r)
64
47
  end
65
48
  end
66
49
  end
67
50
 
68
- PuppetLint.new_check(:unquoted_string_in_selector) do
51
+ PuppetLint.new_check(:unquoted_string_in_case) do
69
52
 
70
53
  def check
71
- qmark_indexes = []
54
+ act_on_tokens(:CASE, :COLON) do |r|
55
+ notify :warning, {
56
+ :message => 'unquoted string in case',
57
+ :line => r.line,
58
+ :column => r.column,
59
+ }
60
+ end
61
+ end
72
62
 
73
- tokens.each_index do |token_idx|
74
- if tokens[token_idx].type == :QMARK
75
- depth = 0
76
- tokens[(token_idx + 1)..-1].each_index do |case_token_idx|
77
- idx = case_token_idx + token_idx + 1
78
- if tokens[idx].type == :LBRACE
79
- depth += 1
80
- elsif tokens[idx].type == :RBRACE
81
- depth -= 1
82
- if depth == 0
83
- qmark_indexes << {:start => token_idx, :end => idx}
84
- break
85
- end
86
- end
87
- end
88
- end
63
+ def fix(problem)
64
+ act_on_tokens(:CASE, :COLON) do |r|
65
+ r.type = :SSTRING
89
66
  end
67
+ end
68
+ end
90
69
 
91
- qmark_indexes.each do |kase|
92
- qmark_tokens = tokens[kase[:start]..kase[:end]]
70
+ PuppetLint.new_check(:unquoted_string_in_selector) do
93
71
 
94
- if qmark_tokens.index { |r| r.type == :NAME || r.type == :CLASSREF }
95
- notify :warning, {
96
- :message => 'expected quoted string in selector',
97
- :line => qmark_tokens.first.line,
98
- :column => qmark_tokens.first.column,
99
- }
100
- end
72
+ def check
73
+ act_on_tokens(:QMARK, :FARROW) do |r|
74
+ notify :warning, {
75
+ :message => 'unquoted string in selector',
76
+ :line => r.line,
77
+ :column => r.column,
78
+ }
101
79
  end
102
80
  end
103
81
 
104
82
  def fix(problem)
105
- qmark_indexes = []
106
-
107
- tokens.each_index do |token_idx|
108
- if tokens[token_idx].type == :QMARK
109
- depth = 0
110
- tokens[(token_idx + 1)..-1].each_index do |case_token_idx|
111
- idx = case_token_idx + token_idx + 1
112
- if tokens[idx].type == :LBRACE
113
- depth += 1
114
- elsif tokens[idx].type == :RBRACE
115
- depth -= 1
116
- if depth == 0
117
- qmark_indexes << {:start => token_idx, :end => idx}
118
- break
119
- end
120
- end
121
- end
122
- end
123
- end
124
-
125
- qmark_indexes.each do |kase|
126
- qmark_tokens = tokens[kase[:start]..kase[:end]]
127
-
128
- qmark_tokens.index { |r| r.type = :SSTRING if r.type == :NAME || r.type == :CLASSREF }
83
+ act_on_tokens(:QMARK, :FARROW) do |r|
84
+ r.type = :SSTRING
129
85
  end
130
86
  end
131
87
  end
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'unquoted_string_in_case' do
4
- let(:msg) { 'expected quoted string in case' }
4
+ let(:msg) { 'unquoted string in case' }
5
5
 
6
6
  context 'with fix disabled' do
7
7
  context 'quoted case' do
@@ -11,6 +11,9 @@ describe 'unquoted_string_in_case' do
11
11
  'Solaris': {
12
12
  $rootgroup = 'wheel'
13
13
  }
14
+ 'RedHat','Debian': {
15
+ $rootgroup = 'wheel'
16
+ }
14
17
  /(Darwin|FreeBSD)/: {
15
18
  $rootgroup = 'wheel'
16
19
  }
@@ -80,6 +83,18 @@ describe 'unquoted_string_in_case' do
80
83
  solaris: {
81
84
  $rootgroup = 'wheel'
82
85
  }
86
+ redhat,debian: {
87
+ include ::foo
88
+ }
89
+ redhat, debian: {
90
+ Foo { bar => 'baz' }
91
+ }
92
+ 'redhat',debian: {
93
+ $rootgroup = wheel
94
+ }
95
+ redhat,'debian': {
96
+ $rootgroup = 'wheel'
97
+ }
83
98
  /(Darwin|FreeBSD)/: {
84
99
  $rootgroup = 'wheel'
85
100
  }
@@ -91,7 +106,17 @@ describe 'unquoted_string_in_case' do
91
106
  end
92
107
 
93
108
  it 'should create a warning' do
94
- expect(problems).to contain_warning(msg).on_line(1).in_column(9)
109
+ expect(problems).to have(7).problems
110
+ end
111
+
112
+ it 'should create a warning' do
113
+ expect(problems).to contain_warning(msg).on_line(2).in_column(11)
114
+ expect(problems).to contain_warning(msg).on_line(5).in_column(11)
115
+ expect(problems).to contain_warning(msg).on_line(5).in_column(18)
116
+ expect(problems).to contain_warning(msg).on_line(8).in_column(11)
117
+ expect(problems).to contain_warning(msg).on_line(8).in_column(19)
118
+ expect(problems).to contain_warning(msg).on_line(11).in_column(20)
119
+ expect(problems).to contain_warning(msg).on_line(14).in_column(11)
95
120
  end
96
121
  end
97
122
 
@@ -113,7 +138,7 @@ describe 'unquoted_string_in_case' do
113
138
  end
114
139
 
115
140
  it 'should create a warning' do
116
- expect(problems).to contain_warning(msg).on_line(1).in_column(9)
141
+ expect(problems).to contain_warning(msg).on_line(2).in_column(11)
117
142
  end
118
143
  end
119
144
  end
@@ -134,6 +159,9 @@ describe 'unquoted_string_in_case' do
134
159
  'Solaris': {
135
160
  $rootgroup = 'wheel'
136
161
  }
162
+ 'RedHat','Debian': {
163
+ $rootgroup = 'wheel'
164
+ }
137
165
  /(Darwin|FreeBSD)/: {
138
166
  $rootgroup = 'wheel'
139
167
  }
@@ -153,6 +181,61 @@ describe 'unquoted_string_in_case' do
153
181
  end
154
182
  end
155
183
 
184
+ context 'quoted case containing :NAME' do
185
+ let(:code) do
186
+ <<-EOS
187
+ case $osfamily {
188
+ 'Solaris': {
189
+ include ::foo
190
+ }
191
+ /(Darwin|FreeBSD)/: {
192
+ include bar
193
+ }
194
+ default: {
195
+ $rootgroup = 'root'
196
+ }
197
+ }
198
+ EOS
199
+ end
200
+
201
+ it 'should not detect any problems' do
202
+ expect(problems).to have(0).problems
203
+ end
204
+
205
+ it 'should not modify the manifest' do
206
+ expect(manifest).to eq(code)
207
+ end
208
+ end
209
+
210
+ context 'quoted case containing :CLASSREF' do
211
+ let(:code) do
212
+ <<-EOS
213
+ case $osfamily {
214
+ 'Solaris': {
215
+ Foo {
216
+ bar => 'baz',
217
+ }
218
+ }
219
+ /(Darwin|FreeBSD)/: {
220
+ $rootgroup = 'wheel'
221
+ include bar
222
+ }
223
+ default: {
224
+ $rootgroup = 'root'
225
+ }
226
+ }
227
+ EOS
228
+ end
229
+
230
+ it 'should not detect any problems' do
231
+ expect(problems).to have(0).problems
232
+ end
233
+
234
+ it 'should not modify the manifest' do
235
+ expect(manifest).to eq(code)
236
+ end
237
+ end
238
+
156
239
  context ':NAME in case' do
157
240
  let(:code) do
158
241
  <<-EOS
@@ -160,6 +243,18 @@ describe 'unquoted_string_in_case' do
160
243
  solaris: {
161
244
  $rootgroup = 'wheel'
162
245
  }
246
+ redhat,debian: {
247
+ include ::foo
248
+ }
249
+ redhat, debian: {
250
+ Foo { bar => 'baz' }
251
+ }
252
+ 'redhat',debian: {
253
+ $rootgroup = wheel
254
+ }
255
+ redhat,'debian': {
256
+ $rootgroup = 'wheel'
257
+ }
163
258
  /(Darwin|FreeBSD)/: {
164
259
  $rootgroup = 'wheel'
165
260
  }
@@ -171,11 +266,17 @@ describe 'unquoted_string_in_case' do
171
266
  end
172
267
 
173
268
  it 'should only detect a single problem' do
174
- expect(problems).to have(1).problem
269
+ expect(problems).to have(7).problem
175
270
  end
176
271
 
177
272
  it 'should fix the problem' do
178
- expect(problems).to contain_fixed(msg).on_line(1).in_column(9)
273
+ expect(problems).to contain_fixed(msg).on_line(2).in_column(11)
274
+ expect(problems).to contain_fixed(msg).on_line(5).in_column(11)
275
+ expect(problems).to contain_fixed(msg).on_line(5).in_column(18)
276
+ expect(problems).to contain_fixed(msg).on_line(8).in_column(11)
277
+ expect(problems).to contain_fixed(msg).on_line(8).in_column(19)
278
+ expect(problems).to contain_fixed(msg).on_line(11).in_column(20)
279
+ expect(problems).to contain_fixed(msg).on_line(14).in_column(11)
179
280
  end
180
281
 
181
282
  it 'should quote the case statement' do
@@ -185,6 +286,18 @@ describe 'unquoted_string_in_case' do
185
286
  'solaris': {
186
287
  $rootgroup = 'wheel'
187
288
  }
289
+ 'redhat','debian': {
290
+ include ::foo
291
+ }
292
+ 'redhat', 'debian': {
293
+ Foo { bar => 'baz' }
294
+ }
295
+ 'redhat','debian': {
296
+ $rootgroup = wheel
297
+ }
298
+ 'redhat','debian': {
299
+ $rootgroup = 'wheel'
300
+ }
188
301
  /(Darwin|FreeBSD)/: {
189
302
  $rootgroup = 'wheel'
190
303
  }
@@ -219,7 +332,7 @@ describe 'unquoted_string_in_case' do
219
332
  end
220
333
 
221
334
  it 'should fix the problem' do
222
- expect(problems).to contain_fixed(msg).on_line(1).in_column(9)
335
+ expect(problems).to contain_fixed(msg).on_line(2).in_column(11)
223
336
  end
224
337
 
225
338
  it 'should quote the case statement' do
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'unquoted_string_in_selector' do
4
- let(:msg) { 'expected quoted string in selector' }
4
+ let(:msg) { 'unquoted string in selector' }
5
5
 
6
6
  context 'with fix disabled' do
7
7
  context 'quoted case' do
@@ -32,7 +32,7 @@ describe 'unquoted_string_in_selector' do
32
32
  end
33
33
 
34
34
  it 'should create a warning' do
35
- expect(problems).to contain_warning(msg).on_line(1).in_column(32)
35
+ expect(problems).to contain_warning(msg).on_line(2).in_column(11)
36
36
  end
37
37
  end
38
38
 
@@ -48,7 +48,7 @@ describe 'unquoted_string_in_selector' do
48
48
  end
49
49
 
50
50
  it 'should create a warning' do
51
- expect(problems).to contain_warning(msg).on_line(1).in_column(32)
51
+ expect(problems).to contain_warning(msg).on_line(2).in_column(11)
52
52
  end
53
53
  end
54
54
  end
@@ -98,7 +98,7 @@ describe 'unquoted_string_in_selector' do
98
98
  end
99
99
 
100
100
  it 'should fix the problem' do
101
- expect(problems).to contain_fixed(msg).on_line(1).in_column(32)
101
+ expect(problems).to contain_fixed(msg).on_line(2).in_column(11)
102
102
  end
103
103
 
104
104
  it 'should quote the case statement' do
@@ -130,7 +130,7 @@ describe 'unquoted_string_in_selector' do
130
130
  end
131
131
 
132
132
  it 'should fix the problem' do
133
- expect(problems).to contain_fixed(msg).on_line(1).in_column(32)
133
+ expect(problems).to contain_fixed(msg).on_line(2).in_column(11)
134
134
  end
135
135
 
136
136
  it 'should quote the case statement' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-lint-unquoted_string-check
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mickaël Canévet