puppet-lint-array_formatting-check 0.10.0 → 0.11.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
  SHA256:
3
- metadata.gz: '08713cd7bf32fe3f2f529c4138c3f9243122fec74123b46ca92364a1f904df91'
4
- data.tar.gz: a1cec828ab3bb0a6a2251ad3e49b35e21a7161739295d86af80532f52361ad88
3
+ metadata.gz: 253a737a788c7d2d46e0452562fa67d5177f096204039fb294f98633c5435b70
4
+ data.tar.gz: 44a81890888cd86b28cd8ba156b311f2e370b6a02f6a5ba3a1d8db74e87652aa
5
5
  SHA512:
6
- metadata.gz: a9650c19207b107d1d98ec6ffb169605b34c03af8169b85a2618935e688ca5af522c3d45bb9532dc70c7c9e781ab799294e3811594def2205d2f714d47304260
7
- data.tar.gz: a658f6274cdfc3e481cc34c26f728f780e9a1e79f89fc5de8f3bb20285a74d468f9666b66c65209fd80cdd1e3015f28525612c4425205cefe520615910faa2b6
6
+ metadata.gz: 927806a62b811ac503f789a3f9a7eca73307bf162dc16c42eb78f5368983732dcf3ebf1d9df8c7aec2261a2b374c032e09c9364c85871732415a14f48e97f8a5
7
+ data.tar.gz: 13c068cb3b5a180d3f0c42dc799686343bed9eae54c450e4ed8d307859f21efb50ac8ce2ed343070032bb2bd73a7d0746807cb20db8726e42754e98a9dec9a20
@@ -24,9 +24,19 @@ PuppetLint.new_check(:array_formatting) do
24
24
  # Recursively process this nested array.
25
25
  # Store return so we know if the child array was processed or not.
26
26
  len_of_nested_array = process_array
27
- # If we encounter something _other_ than COMMA, WHITESPACE, or INDENT, push it.
28
- # These don't include NEWLINE(s), which is what we need to keep track of.
29
- elsif !%i[COMMA WHITESPACE INDENT].include?(token.type)
27
+ # If we encounter a DQPRE, we need to scan ahead until we find the matching DQPOST
28
+ elsif [:DQPRE].include?(token.type)
29
+ # Tight loop until we find a DQPOST, or a Nil in case of an unterminated string
30
+ until [:DQPOST].include?(token.type) || token.nil?
31
+ # Advance. We're still looking for that DQPOST
32
+ token = @manifest.next
33
+ end
34
+ # Store the DQPOST
35
+ manifest_array.push token
36
+ # We're really only keeping track of array *items* here for the sake of the length calculation.
37
+ # We're going to ignore everything that doesn't count as an *item*, like commas, comments, and whitespaces
38
+ # We need to push NEWLINE(s) though because there might be too many
39
+ elsif !%i[COMMA COMMENT WHITESPACE INDENT].include?(token.type)
30
40
  manifest_array.push token
31
41
  end
32
42
  # Advance. (We're still looking for that RBRACK)
@@ -85,7 +95,7 @@ PuppetLint.new_check(:array_formatting) do
85
95
  # If the last token (not including the RBRACK) wasn't a newline, throw a warning.
86
96
  # Since we previously used token to scan forward to the ],
87
97
  # token is already pointing to the offending ].
88
- if !prev_token_was_newline # rubocop:disable NegatedIf "I find this clearer than `unless prev_token_was_newline`"
98
+ if !prev_token_was_newline # rubocop:disable Style/NegatedIf "I find this clearer than `unless prev_token_was_newline`"
89
99
  notify :warning,
90
100
  message: EXPECTED_NEWLINE_BEFORE_CLOSE,
91
101
  line: token.line,
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe 'array_formatting' do
6
+ let(:msg) { 'expected newline before element' }
7
+ let(:msg_end) { 'expected newline before close' }
8
+ let(:msg_newline) { 'unexpected newline' }
9
+
10
+ context 'with fix disabled' do
11
+ context 'on code with an empty array' do
12
+ let(:code) { '$services = []' }
13
+
14
+ it 'should detect no problem' do
15
+ expect(problems).to have(0).problems
16
+ end
17
+ end
18
+ end
19
+ context 'with fix enabled' do
20
+ before do
21
+ PuppetLint.configuration.fix = true
22
+ end
23
+
24
+ after do
25
+ PuppetLint.configuration.fix = false
26
+ end
27
+ context 'on code with an empty array' do
28
+ let(:code) { '$services = []' }
29
+
30
+ it 'should detect no problem' do
31
+ expect(problems).to have(0).problems
32
+ end
33
+
34
+ it 'should not modify the manifest' do
35
+ expect(manifest).to eq(code)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -381,6 +381,68 @@ describe 'array_formatting' do
381
381
  expect(problems).to contain_warning(msg_end).on_line(14).in_column(42)
382
382
  end
383
383
  end
384
+ context 'on a string with a properly formatted multidimensional hash (Issue #18)' do
385
+ let(:code) do
386
+ <<-CODE.gsub(/^ {10}/, '')
387
+ Apt::Source["yubihsm-${facts['os']['distro']['codename']}"],
388
+ CODE
389
+ end
390
+ it 'should detect no problem' do
391
+ expect(problems).to have(0).problems
392
+ end
393
+ end
394
+ context 'on a code snippet with a properly formatted multidimensional hash (Issue #18)' do
395
+ let(:code) do
396
+ <<-CODE.gsub(/^ {10}/, '')
397
+ package { $packages:
398
+ ensure => $version,
399
+ require => [
400
+ Class['apt::update'],
401
+ Apt::Source["yubihsm-${facts['os']['distro']['codename']}"],
402
+ ],
403
+ }
404
+ CODE
405
+ end
406
+ it 'should detect no problem' do
407
+ expect(problems).to have(0).problems
408
+ end
409
+ end
410
+ context 'on a string with a properly formatted variable (Issue #19)' do
411
+ let(:code) do
412
+ <<-CODE.gsub(/^ {10}/, '')
413
+ file { [
414
+ "${root_dir}/index.txt",
415
+ "${root_dir}/index.txt.attr"
416
+ ]:
417
+ ensure => file,
418
+ owner => 0,
419
+ group => 0,
420
+ mode => '0400',
421
+ }
422
+ CODE
423
+ end
424
+ it 'should detect no problem' do
425
+ expect(problems).to have(0).problems
426
+ end
427
+ end
428
+ context 'on an array with comments after some values (Issue #20)' do
429
+ let(:code) do
430
+ <<-CODE.gsub(/^ {10}/, '')
431
+ proxy_set_header => [
432
+ 'Host $http_host:8043',
433
+ 'X-Real-IP $remote_addr',
434
+ 'X-Forwarded-For $proxy_add_x_forwarded_for',
435
+ 'Cookie $http_cookie',
436
+ 'X-Forwarded-Proto $scheme',
437
+ 'Upgrade $http_upgrade', #websockets
438
+ 'Connection "Upgrade"', #websockets
439
+ ],
440
+ CODE
441
+ end
442
+ it 'should detect no problem' do
443
+ expect(problems).to have(0).problems
444
+ end
445
+ end
384
446
  end
385
447
  context 'with fix enabled' do
386
448
  before do
@@ -1016,5 +1078,83 @@ describe 'array_formatting' do
1016
1078
  )
1017
1079
  end
1018
1080
  end
1081
+ context 'on a string with a properly formatted multidimensional hash (Issue #18)' do
1082
+ let(:code) do
1083
+ <<-CODE.gsub(/^ {10}/, '')
1084
+ Apt::Source["yubihsm-${facts['os']['distro']['codename']}"],
1085
+ CODE
1086
+ end
1087
+ it 'should detect no problem' do
1088
+ expect(problems).to have(0).problems
1089
+ end
1090
+
1091
+ it 'should not modify the manifest' do
1092
+ expect(manifest).to eq(code)
1093
+ end
1094
+ end
1095
+ context 'on a code snippet with a properly formatted multidimensional hash (Issue #18)' do
1096
+ let(:code) do
1097
+ <<-CODE.gsub(/^ {10}/, '')
1098
+ package { $packages:
1099
+ ensure => $version,
1100
+ require => [
1101
+ Class['apt::update'],
1102
+ Apt::Source["yubihsm-${facts['os']['distro']['codename']}"],
1103
+ ],
1104
+ }
1105
+ CODE
1106
+ end
1107
+ it 'should detect no problem' do
1108
+ expect(problems).to have(0).problems
1109
+ end
1110
+
1111
+ it 'should not modify the manifest' do
1112
+ expect(manifest).to eq(code)
1113
+ end
1114
+ end
1115
+ context 'on a string with a properly formatted variable (Issue #19)' do
1116
+ let(:code) do
1117
+ <<-CODE.gsub(/^ {10}/, '')
1118
+ file { [
1119
+ "${root_dir}/index.txt",
1120
+ "${root_dir}/index.txt.attr"
1121
+ ]:
1122
+ ensure => file,
1123
+ owner => 0,
1124
+ group => 0,
1125
+ mode => '0400',
1126
+ }
1127
+ CODE
1128
+ end
1129
+ it 'should detect no problem' do
1130
+ expect(problems).to have(0).problems
1131
+ end
1132
+
1133
+ it 'should not modify the manifest' do
1134
+ expect(manifest).to eq(code)
1135
+ end
1136
+ end
1137
+ context 'on an array with comments after some values (Issue #20)' do
1138
+ let(:code) do
1139
+ <<-CODE.gsub(/^ {10}/, '')
1140
+ proxy_set_header => [
1141
+ 'Host $http_host:8043',
1142
+ 'X-Real-IP $remote_addr',
1143
+ 'X-Forwarded-For $proxy_add_x_forwarded_for',
1144
+ 'Cookie $http_cookie',
1145
+ 'X-Forwarded-Proto $scheme',
1146
+ 'Upgrade $http_upgrade', #websockets
1147
+ 'Connection "Upgrade"', #websockets
1148
+ ],
1149
+ CODE
1150
+ end
1151
+ it 'should detect no problem' do
1152
+ expect(problems).to have(0).problems
1153
+ end
1154
+
1155
+ it 'should not modify the manifest' do
1156
+ expect(manifest).to eq(code)
1157
+ end
1158
+ end
1019
1159
  end
1020
1160
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-lint-array_formatting-check
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Manzer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-03 00:00:00.000000000 Z
11
+ date: 2023-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: puppet-lint
@@ -40,6 +40,7 @@ files:
40
40
  - LICENSE
41
41
  - README.md
42
42
  - lib/puppet-lint/plugins/check_array_formatting.rb
43
+ - spec/puppet-lint/plugins/check_array_formatting_selected_spec.rb
43
44
  - spec/puppet-lint/plugins/check_array_formatting_spec.rb
44
45
  - spec/spec_helper.rb
45
46
  homepage: https://gitlab.com/amanzer/puppet-lint-array_formatting-check