puppet-lint-unquoted_string-check 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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