puppet-lint 2.5.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +522 -0
  3. data/lib/puppet-lint/bin.rb +71 -6
  4. data/lib/puppet-lint/checkplugin.rb +43 -9
  5. data/lib/puppet-lint/checks.rb +16 -16
  6. data/lib/puppet-lint/configuration.rb +134 -134
  7. data/lib/puppet-lint/data.rb +28 -28
  8. data/lib/puppet-lint/lexer/string_slurper.rb +138 -140
  9. data/lib/puppet-lint/lexer/token.rb +188 -190
  10. data/lib/puppet-lint/lexer.rb +416 -417
  11. data/lib/puppet-lint/monkeypatches.rb +1 -1
  12. data/lib/puppet-lint/optparser.rb +5 -1
  13. data/lib/puppet-lint/plugins/check_classes/arrow_on_right_operand_line.rb +6 -4
  14. data/lib/puppet-lint/plugins/check_classes/autoloader_layout.rb +5 -3
  15. data/lib/puppet-lint/plugins/check_classes/class_inherits_from_params_class.rb +6 -4
  16. data/lib/puppet-lint/plugins/check_classes/code_on_top_scope.rb +5 -3
  17. data/lib/puppet-lint/plugins/check_classes/inherits_across_namespaces.rb +5 -3
  18. data/lib/puppet-lint/plugins/check_classes/names_containing_dash.rb +5 -3
  19. data/lib/puppet-lint/plugins/check_classes/names_containing_uppercase.rb +7 -5
  20. data/lib/puppet-lint/plugins/check_classes/nested_classes_or_defines.rb +5 -3
  21. data/lib/puppet-lint/plugins/check_classes/parameter_order.rb +7 -4
  22. data/lib/puppet-lint/plugins/check_classes/right_to_left_relationship.rb +5 -3
  23. data/lib/puppet-lint/plugins/check_classes/variable_scope.rb +15 -13
  24. data/lib/puppet-lint/plugins/check_comments/slash_comments.rb +9 -7
  25. data/lib/puppet-lint/plugins/check_comments/star_comments.rb +10 -8
  26. data/lib/puppet-lint/plugins/check_conditionals/case_without_default.rb +6 -4
  27. data/lib/puppet-lint/plugins/check_conditionals/selector_inside_resource.rb +5 -3
  28. data/lib/puppet-lint/plugins/check_documentation/documentation.rb +7 -3
  29. data/lib/puppet-lint/plugins/check_nodes/unquoted_node_name.rb +15 -11
  30. data/lib/puppet-lint/plugins/check_resources/duplicate_params.rb +5 -3
  31. data/lib/puppet-lint/plugins/check_resources/ensure_first_param.rb +8 -5
  32. data/lib/puppet-lint/plugins/check_resources/ensure_not_symlink_target.rb +11 -8
  33. data/lib/puppet-lint/plugins/check_resources/file_mode.rb +14 -9
  34. data/lib/puppet-lint/plugins/check_resources/unquoted_file_mode.rb +11 -6
  35. data/lib/puppet-lint/plugins/check_resources/unquoted_resource_title.rb +6 -4
  36. data/lib/puppet-lint/plugins/check_strings/double_quoted_strings.rb +12 -7
  37. data/lib/puppet-lint/plugins/check_strings/only_variable_string.rb +8 -6
  38. data/lib/puppet-lint/plugins/check_strings/puppet_url_without_modules.rb +14 -8
  39. data/lib/puppet-lint/plugins/check_strings/quoted_booleans.rb +11 -7
  40. data/lib/puppet-lint/plugins/check_strings/single_quote_string_with_variables.rb +11 -6
  41. data/lib/puppet-lint/plugins/check_strings/variables_not_enclosed.rb +12 -8
  42. data/lib/puppet-lint/plugins/check_variables/variable_contains_dash.rb +11 -7
  43. data/lib/puppet-lint/plugins/check_variables/variable_is_lowercase.rb +11 -7
  44. data/lib/puppet-lint/plugins/check_whitespace/140chars.rb +3 -8
  45. data/lib/puppet-lint/plugins/check_whitespace/2sp_soft_tabs.rb +10 -8
  46. data/lib/puppet-lint/plugins/check_whitespace/80chars.rb +3 -8
  47. data/lib/puppet-lint/plugins/check_whitespace/arrow_alignment.rb +10 -8
  48. data/lib/puppet-lint/plugins/check_whitespace/hard_tabs.rb +11 -7
  49. data/lib/puppet-lint/plugins/check_whitespace/line_length.rb +29 -0
  50. data/lib/puppet-lint/plugins/check_whitespace/trailing_whitespace.rb +13 -7
  51. data/lib/puppet-lint/plugins.rb +63 -61
  52. data/lib/puppet-lint/report/github.rb +17 -0
  53. data/lib/puppet-lint/report/sarif_template.json +63 -0
  54. data/lib/puppet-lint/tasks/puppet-lint.rb +84 -83
  55. data/lib/puppet-lint/tasks/release_test.rb +4 -1
  56. data/lib/puppet-lint/version.rb +1 -1
  57. data/lib/puppet-lint.rb +27 -12
  58. data/spec/acceptance/puppet_lint_spec.rb +46 -0
  59. data/spec/spec_helper.rb +92 -91
  60. data/spec/spec_helper_acceptance.rb +6 -0
  61. data/spec/spec_helper_acceptance_local.rb +38 -0
  62. data/spec/{puppet-lint → unit/puppet-lint}/bin_spec.rb +79 -35
  63. data/spec/{puppet-lint → unit/puppet-lint}/checks_spec.rb +36 -36
  64. data/spec/unit/puppet-lint/configuration_spec.rb +88 -0
  65. data/spec/{puppet-lint → unit/puppet-lint}/data_spec.rb +6 -3
  66. data/spec/{puppet-lint → unit/puppet-lint}/ignore_overrides_spec.rb +17 -17
  67. data/spec/{puppet-lint → unit/puppet-lint}/lexer/string_slurper_spec.rb +128 -128
  68. data/spec/{puppet-lint → unit/puppet-lint}/lexer/token_spec.rb +1 -1
  69. data/spec/{puppet-lint → unit/puppet-lint}/lexer_spec.rb +653 -671
  70. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_classes/arrow_on_right_operand_line_spec.rb +16 -16
  71. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_classes/autoloader_layout_spec.rb +13 -13
  72. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_classes/class_inherits_from_params_class_spec.rb +3 -3
  73. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_classes/code_on_top_scope_spec.rb +4 -4
  74. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_classes/inherits_across_namespaces_spec.rb +4 -4
  75. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_classes/name_contains_uppercase_spec.rb +10 -10
  76. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_classes/names_containing_dash_spec.rb +7 -7
  77. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_classes/nested_classes_or_defines_spec.rb +7 -7
  78. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_classes/parameter_order_spec.rb +9 -9
  79. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_classes/right_to_left_relationship_spec.rb +3 -3
  80. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_classes/variable_scope_spec.rb +25 -25
  81. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_comments/slash_comments_spec.rb +7 -7
  82. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_comments/star_comments_spec.rb +13 -13
  83. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_conditionals/case_without_default_spec.rb +10 -10
  84. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_conditionals/selector_inside_resource_spec.rb +3 -3
  85. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_documentation/documentation_spec.rb +8 -8
  86. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_nodes/unquoted_node_name_spec.rb +24 -24
  87. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_resources/duplicate_params_spec.rb +9 -9
  88. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_resources/ensure_first_param_spec.rb +19 -19
  89. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_resources/ensure_not_symlink_target_spec.rb +10 -10
  90. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_resources/file_mode_spec.rb +40 -40
  91. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_resources/unquoted_file_mode_spec.rb +20 -20
  92. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_resources/unquoted_resource_title_spec.rb +24 -24
  93. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_strings/double_quoted_strings_spec.rb +27 -27
  94. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_strings/only_variable_string_spec.rb +18 -18
  95. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_strings/puppet_url_without_modules_spec.rb +9 -9
  96. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_strings/quoted_booleans_spec.rb +22 -22
  97. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_strings/single_quote_string_with_variables_spec.rb +2 -2
  98. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_strings/variables_not_enclosed_spec.rb +21 -21
  99. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_variables/variable_contains_dash_spec.rb +6 -6
  100. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_variables/variable_is_lowercase_spec.rb +7 -7
  101. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_whitespace/140chars_spec.rb +5 -5
  102. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_whitespace/2sp_soft_tabs_spec.rb +2 -2
  103. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_whitespace/80chars_spec.rb +6 -6
  104. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_whitespace/arrow_alignment_spec.rb +127 -127
  105. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_whitespace/hard_tabs_spec.rb +7 -7
  106. data/spec/{puppet-lint → unit/puppet-lint}/plugins/check_whitespace/trailing_whitespace_spec.rb +15 -15
  107. data/spec/unit/puppet-lint/puppet-lint_spec.rb +18 -0
  108. metadata +63 -119
  109. data/CHANGELOG.md +0 -33
  110. data/HISTORY.md +0 -1130
  111. data/spec/puppet-lint/configuration_spec.rb +0 -66
  112. data/spec/puppet-lint_spec.rb +0 -16
@@ -26,7 +26,7 @@ class CommandRun
26
26
  end
27
27
 
28
28
  describe PuppetLint::Bin do
29
- subject do
29
+ subject(:bin) do
30
30
  sane_args = if args.is_a?(Array)
31
31
  args
32
32
  else
@@ -57,18 +57,19 @@ describe PuppetLint::Bin do
57
57
 
58
58
  context 'when asked to display available checks' do
59
59
  let(:args) { '--list-checks' }
60
+
60
61
  all_checks = PuppetLint.configuration.checks.map(&:to_s)
61
62
 
62
63
  its(:exitstatus) { is_expected.to eq(0) }
63
64
 
64
65
  all_checks.each do |c|
65
66
  it "includes check #{c} in its output" do
66
- expect(subject.stdout).to include c
67
+ expect(bin.stdout).to include c
67
68
  end
68
69
  end
69
70
  end
70
71
 
71
- context 'when passed a backslash separated path on Windows', :if => Gem.win_platform? do
72
+ context 'when passed a backslash separated path on Windows', if: Gem.win_platform? do
72
73
  let(:args) do
73
74
  [
74
75
  'spec\fixtures\test\manifests',
@@ -93,7 +94,7 @@ describe PuppetLint::Bin do
93
94
  [
94
95
  "#{args[0]} - WARNING: optional parameter listed before required parameter on line 2 (check: parameter_order)",
95
96
  "#{args[1]} - ERROR: test::foo not in autoload module layout on line 2 (check: autoloader_layout)",
96
- ].join("\n")
97
+ ].join("\n"),
97
98
  )
98
99
  end
99
100
  end
@@ -144,8 +145,10 @@ describe PuppetLint::Bin do
144
145
  end
145
146
 
146
147
  its(:exitstatus) { is_expected.to eq(1) }
147
- its(:stdout) { is_expected.to match(%r{WARNING}) }
148
- its(:stdout) { is_expected.to_not match(%r{ERROR}) }
148
+ its(:stdout) do
149
+ is_expected.to match(%r{WARNING})
150
+ is_expected.not_to match(%r{ERROR})
151
+ end
149
152
  end
150
153
 
151
154
  context 'when specifying a specific check to run' do
@@ -159,8 +162,10 @@ describe PuppetLint::Bin do
159
162
  end
160
163
 
161
164
  its(:exitstatus) { is_expected.to eq(0) }
162
- its(:stdout) { is_expected.to_not match(%r{ERROR}) }
163
- its(:stdout) { is_expected.to match(%r{WARNING}) }
165
+ its(:stdout) do
166
+ is_expected.not_to match(%r{ERROR})
167
+ is_expected.to match(%r{WARNING})
168
+ end
164
169
  end
165
170
 
166
171
  context 'when asked to display filenames ' do
@@ -202,7 +207,7 @@ describe PuppetLint::Bin do
202
207
  '',
203
208
  " define test::warning($foo='bar', $baz) { }",
204
209
  ' ^',
205
- ].join("\n")
210
+ ].join("\n"),
206
211
  )
207
212
  end
208
213
  end
@@ -397,6 +402,41 @@ describe PuppetLint::Bin do
397
402
  end
398
403
  end
399
404
 
405
+ context 'when displaying results as SARIF' do
406
+ let(:args) do
407
+ [
408
+ '--sarif',
409
+ 'spec/fixtures/test/manifests/warning.pp',
410
+ ]
411
+ end
412
+
413
+ its(:exitstatus) { is_expected.to eq(0) }
414
+
415
+ its(:stdout) do
416
+ is_expected.to match(%r{"ruleId": "parameter_order"})
417
+ is_expected.to match(%r{"uri": "warning.pp"})
418
+ end
419
+ end
420
+
421
+ context 'when displaying results for multiple targets as SARIF' do
422
+ let(:args) do
423
+ [
424
+ '--sarif',
425
+ 'spec/fixtures/test/manifests/fail.pp',
426
+ 'spec/fixtures/test/manifests/warning.pp',
427
+ ]
428
+ end
429
+
430
+ its(:exitstatus) { is_expected.to eq(1) }
431
+
432
+ its(:stdout) do
433
+ is_expected.to match(%r{"ruleId": "autoloader_layout"})
434
+ is_expected.to match(%r{"uri": "fail.pp"})
435
+ is_expected.to match(%r{"ruleId": "parameter_order"})
436
+ is_expected.to match(%r{"uri": "warning.pp"})
437
+ end
438
+ end
439
+
400
440
  context 'when hiding ignored problems' do
401
441
  let(:args) do
402
442
  [
@@ -405,7 +445,7 @@ describe PuppetLint::Bin do
405
445
  end
406
446
 
407
447
  its(:exitstatus) { is_expected.to eq(0) }
408
- its(:stdout) { is_expected.to_not match(%r{IGNORED}) }
448
+ its(:stdout) { is_expected.not_to match(%r{IGNORED}) }
409
449
  end
410
450
 
411
451
  context 'when showing ignored problems' do
@@ -434,7 +474,7 @@ describe PuppetLint::Bin do
434
474
  [
435
475
  'IGNORED: double quoted string containing no variables on line 3 (check: double_quoted_strings)',
436
476
  ' for a good reason',
437
- ].join("\n")
477
+ ].join("\n"),
438
478
  )
439
479
  end
440
480
  end
@@ -468,7 +508,7 @@ describe PuppetLint::Bin do
468
508
  end
469
509
 
470
510
  its(:exitstatus) { is_expected.to eq(0) }
471
- its(:stdout) { is_expected.to match(%r{WARNING: lint:endignore comment with no opening lint:ignore:<check> comment found on line 1}) }
511
+ its(:stderr) { is_expected.to match(%r{WARNING: lint:endignore comment with no opening lint:ignore:<check> comment found on line 1}) }
472
512
  end
473
513
 
474
514
  context 'when a lint:ignore control comment block is not terminated properly' do
@@ -478,48 +518,52 @@ describe PuppetLint::Bin do
478
518
  ]
479
519
  end
480
520
 
481
- its(:stdout) { is_expected.to match(%r{WARNING: lint:ignore:140chars comment on line 2 with no closing lint:endignore comment}) }
521
+ its(:stderr) { is_expected.to match(%r{WARNING: lint:ignore:140chars comment on line 2 with no closing lint:endignore comment}) }
482
522
  end
483
523
 
484
524
  context 'when fixing a file with \n line endings' do
485
- before(:context) do
486
- @windows_file = Tempfile.new('windows')
487
- @posix_file = Tempfile.new('posix')
488
-
489
- @windows_file.binmode
490
- @posix_file.binmode
491
-
492
- @windows_file.write("\r\n")
493
- @posix_file.write("\n")
494
-
495
- @windows_file.close
496
- @posix_file.close
525
+ let(:windows_file) do
526
+ Tempfile.new('windows')
497
527
  end
498
528
 
499
- after(:context) do
500
- @windows_file.unlink
501
- @posix_file.unlink
529
+ let(:posix_file) do
530
+ Tempfile.new('posix')
502
531
  end
503
532
 
504
533
  let(:args) do
505
534
  [
506
535
  '--fix',
507
- @posix_file.path,
508
- @windows_file.path,
536
+ posix_file.path,
537
+ windows_file.path,
509
538
  ]
510
539
  end
511
540
 
541
+ before(:each) do
542
+ windows_file.binmode
543
+ windows_file.write("\r\n")
544
+ windows_file.close
545
+
546
+ posix_file.binmode
547
+ posix_file.write("\n")
548
+ posix_file.close
549
+ end
550
+
551
+ after(:each) do
552
+ windows_file.unlink
553
+ posix_file.unlink
554
+ end
555
+
512
556
  its(:exitstatus) { is_expected.to eq(0) }
513
557
 
514
558
  it 'does not change the line endings' do
515
- File.open(@posix_file.path, 'rb') do |f|
559
+ File.open(posix_file.path, 'rb') do |f|
516
560
  data = f.read
517
561
 
518
562
  expect(data).to match(%r{\n\Z}m)
519
- expect(data).to_not match(%r{\r\n\Z}m)
563
+ expect(data).not_to match(%r{\r\n\Z}m)
520
564
  end
521
565
 
522
- File.open(@windows_file.path, 'rb') do |f|
566
+ File.open(windows_file.path, 'rb') do |f|
523
567
  data = f.read
524
568
 
525
569
  expect(data).to match(%r{\r\n\Z}m)
@@ -543,7 +587,7 @@ describe PuppetLint::Bin do
543
587
 
544
588
  context 'and command-line does not override "--only-checks"' do
545
589
  let(:args) do
546
- File.join(File.dirname(__FILE__), '..', 'fixtures', 'test', 'manifests', 'two_warnings.pp')
590
+ File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'test', 'manifests', 'two_warnings.pp')
547
591
  end
548
592
 
549
593
  its(:exitstatus) { is_expected.to eq(0) }
@@ -556,7 +600,7 @@ describe PuppetLint::Bin do
556
600
  let(:args) do
557
601
  [
558
602
  '--only-checks=variable_is_lowercase',
559
- File.join(File.dirname(__FILE__), '..', 'fixtures', 'test', 'manifests', 'two_warnings.pp'),
603
+ File.join(File.dirname(__FILE__), '..', '..', 'fixtures', 'test', 'manifests', 'two_warnings.pp'),
560
604
  ]
561
605
  end
562
606
 
@@ -7,18 +7,18 @@ describe PuppetLint::Checks do
7
7
  let(:content) { "notify { 'test': }" }
8
8
 
9
9
  describe '#initialize' do
10
- it { is_expected.to have_attributes(:problems => []) }
10
+ it { is_expected.to have_attributes(problems: []) }
11
11
  end
12
12
 
13
13
  describe '#load_data' do
14
14
  let(:lexer) { PuppetLint::Lexer.new }
15
15
 
16
- before do
16
+ before(:each) do
17
17
  allow(PuppetLint::Lexer).to receive(:new).and_return(lexer)
18
18
  end
19
19
 
20
20
  context 'when the tokeniser encounters an error' do
21
- before do
21
+ before(:each) do
22
22
  allow(lexer).to receive(:tokenise).with(content).and_raise(lexer_error)
23
23
  instance.load_data(path, content)
24
24
  end
@@ -33,14 +33,14 @@ describe PuppetLint::Checks do
33
33
  it 'creates a syntax error problem for the file' do
34
34
  expect(instance.problems).to have(1).problem
35
35
  expect(instance.problems.first).to include(
36
- :kind => :error,
37
- :check => :syntax,
38
- :message => 'Syntax error',
39
- :line => 1,
40
- :column => 2,
41
- :path => anything,
42
- :fullpath => anything,
43
- :filename => anything
36
+ kind: :error,
37
+ check: :syntax,
38
+ message: 'Syntax error',
39
+ line: 1,
40
+ column: 2,
41
+ path: anything,
42
+ fullpath: anything,
43
+ filename: anything,
44
44
  )
45
45
  end
46
46
  end
@@ -55,14 +55,14 @@ describe PuppetLint::Checks do
55
55
  it 'creates a syntax error problem for the file' do
56
56
  expect(instance.problems).to have(1).problem
57
57
  expect(instance.problems.first).to include(
58
- :kind => :error,
59
- :check => :syntax,
60
- :message => 'Syntax error (some reason)',
61
- :line => 1,
62
- :column => 2,
63
- :path => anything,
64
- :fullpath => anything,
65
- :filename => anything
58
+ kind: :error,
59
+ check: :syntax,
60
+ message: 'Syntax error (some reason)',
61
+ line: 1,
62
+ column: 2,
63
+ path: anything,
64
+ fullpath: anything,
65
+ filename: anything,
66
66
  )
67
67
  end
68
68
  end
@@ -74,12 +74,12 @@ describe PuppetLint::Checks do
74
74
  let(:data) { "notify { 'test': }" }
75
75
  let(:enabled_checks) { [] }
76
76
 
77
- before do
78
- allow(instance).to receive(:enabled_checks).and_return(enabled_checks)
77
+ before(:each) do
78
+ allow(instance).to receive(:enabled_checks).and_return(enabled_checks) # rubocop: disable RSpec/SubjectStub
79
79
  end
80
80
 
81
81
  it 'loads the manifest data' do
82
- expect(instance).to receive(:load_data).with(fileinfo, data).and_call_original
82
+ expect(instance).to receive(:load_data).with(fileinfo, data).and_call_original # rubocop: disable RSpec/SubjectStub
83
83
  instance.run(fileinfo, data)
84
84
  end
85
85
 
@@ -98,7 +98,7 @@ describe PuppetLint::Checks do
98
98
  it 'does not run the disabled checks' do
99
99
  # expect().to_not all(matcher) is not supported
100
100
  disabled_check_classes.each do |check_class|
101
- expect(check_class).to_not receive(:new)
101
+ expect(check_class).not_to receive(:new)
102
102
  end
103
103
 
104
104
  instance.run(fileinfo, data)
@@ -110,12 +110,12 @@ describe PuppetLint::Checks do
110
110
  let(:mock_arrow_alignment) do
111
111
  instance_double(
112
112
  PuppetLint::CheckPlugin,
113
- :run => [{ :kind => :error, :check => :arrow_alignment }],
114
- :fix_problems => [{ :kind => :fixed, :check => :arrow_alignment }]
113
+ run: [{ kind: :error, check: :arrow_alignment }],
114
+ fix_problems: [{ kind: :fixed, check: :arrow_alignment }],
115
115
  )
116
116
  end
117
117
  let(:mock_hard_tabs) do
118
- instance_double(PuppetLint::CheckPlugin, :run => [], :fix_problems => [])
118
+ instance_double(PuppetLint::CheckPlugin, run: [], fix_problems: [])
119
119
  end
120
120
  let(:fix_state) { false }
121
121
 
@@ -127,22 +127,22 @@ describe PuppetLint::Checks do
127
127
  end
128
128
 
129
129
  it 'adds the found problems to the problems array' do
130
- expect(instance).to have_attributes(:problems => [{ :kind => :error, :check => :arrow_alignment }])
130
+ expect(instance).to have_attributes(problems: [{ kind: :error, check: :arrow_alignment }])
131
131
  end
132
132
 
133
133
  context 'and fix is enabled' do
134
134
  let(:fix_state) { true }
135
135
 
136
136
  it 'calls #fix_problems on the check and adds the results to the problems array' do
137
- expect(instance).to have_attributes(:problems => [{ :kind => :fixed, :check => :arrow_alignment }])
137
+ expect(instance).to have_attributes(problems: [{ kind: :fixed, check: :arrow_alignment }])
138
138
  end
139
139
  end
140
140
  end
141
141
  end
142
142
 
143
143
  context 'when an unhandled exception is raised' do
144
- before do
145
- allow(instance).to receive(:load_data).with(fileinfo, data).and_raise(StandardError.new('test message'))
144
+ before(:each) do
145
+ allow(instance).to receive(:load_data).with(fileinfo, data).and_raise(StandardError.new('test message')) # rubocop: disable RSpec/SubjectStub
146
146
  allow($stdout).to receive(:puts).with(anything)
147
147
  end
148
148
 
@@ -173,7 +173,7 @@ describe PuppetLint::Checks do
173
173
  end
174
174
 
175
175
  context 'and the file being linted is readable' do
176
- before do
176
+ before(:each) do
177
177
  allow(File).to receive(:readable?).with(fileinfo).and_return(true)
178
178
  allow(File).to receive(:read).with(fileinfo).and_return(data)
179
179
  end
@@ -196,7 +196,7 @@ describe PuppetLint::Checks do
196
196
 
197
197
  let(:expected_enabled_checks) { [:arrow_alignment, :trailing_whitespace] }
198
198
 
199
- before do
199
+ before(:each) do
200
200
  PuppetLint.configuration.checks.each do |check|
201
201
  allow(PuppetLint.configuration).to receive("#{check}_enabled?").and_return(expected_enabled_checks.include?(check))
202
202
  end
@@ -212,13 +212,13 @@ describe PuppetLint::Checks do
212
212
 
213
213
  let(:tokens) do
214
214
  [
215
- instance_double(PuppetLint::Lexer::Token, :to_manifest => '1'),
216
- instance_double(PuppetLint::Lexer::Token, :to_manifest => '2'),
217
- instance_double(PuppetLint::Lexer::Token, :to_manifest => '3'),
215
+ instance_double(PuppetLint::Lexer::Token, to_manifest: '1'),
216
+ instance_double(PuppetLint::Lexer::Token, to_manifest: '2'),
217
+ instance_double(PuppetLint::Lexer::Token, to_manifest: '3'),
218
218
  ]
219
219
  end
220
220
 
221
- before do
221
+ before(:each) do
222
222
  allow(PuppetLint::Data).to receive(:tokens).and_return(tokens)
223
223
  end
224
224
 
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+
3
+ describe PuppetLint::Configuration do
4
+ subject(:config) { described_class.new }
5
+
6
+ it 'creates check methods on the fly' do
7
+ klass = Class.new
8
+ config.add_check('foo', klass)
9
+
10
+ expect(config).to respond_to(:foo_enabled?)
11
+ expect(config).not_to respond_to(:bar_enabled?)
12
+ expect(config).to respond_to(:enable_foo)
13
+ expect(config).to respond_to(:disable_foo)
14
+
15
+ config.disable_foo
16
+ expect(config.settings['foo_disabled']).to be_truthy
17
+ expect(config.foo_enabled?).to be_falsey
18
+
19
+ config.enable_foo
20
+ expect(config.settings['foo_disabled']).to be_falsey
21
+ expect(config.foo_enabled?).to be_truthy
22
+ end
23
+
24
+ it 'knows what checks have been added' do
25
+ klass = Class.new
26
+ config.add_check('foo', klass)
27
+ expect(config.checks).to include('foo')
28
+ end
29
+
30
+ it 'responds nil to unknown config options' do
31
+ expect(config.foobarbaz).to be_nil
32
+ end
33
+
34
+ it 'is able to explicitly add options' do
35
+ config.add_option('bar')
36
+
37
+ expect(config.bar).to be_nil
38
+
39
+ config.bar = 'aoeui'
40
+ expect(config.bar).to eq('aoeui')
41
+ end
42
+
43
+ it 'is able to add options on the fly' do
44
+ expect(config.test_option).to eq(nil)
45
+
46
+ config.test_option = 'test'
47
+
48
+ expect(config.test_option).to eq('test')
49
+ end
50
+
51
+ it 'is able to set sane defaults' do
52
+ override_env do
53
+ ENV.delete('GITHUB_ACTION')
54
+ config.defaults
55
+ end
56
+
57
+ expect(config.settings).to eq(
58
+ 'with_filename' => false,
59
+ 'fail_on_warnings' => false,
60
+ 'error_level' => :all,
61
+ 'log_format' => '',
62
+ 'sarif' => false,
63
+ 'with_context' => false,
64
+ 'fix' => false,
65
+ 'github_actions' => false,
66
+ 'show_ignored' => false,
67
+ 'json' => false,
68
+ 'ignore_paths' => ['vendor/**/*.pp'],
69
+ )
70
+ end
71
+
72
+ it 'detects github actions' do
73
+ override_env do
74
+ ENV['GITHUB_ACTION'] = 'action'
75
+ config.defaults
76
+ end
77
+
78
+ expect(config.settings['github_actions']).to be(true)
79
+ end
80
+
81
+ def override_env
82
+ old_env = ENV.to_h
83
+ yield
84
+ ensure
85
+ ENV.clear
86
+ ENV.update(old_env)
87
+ end
88
+ end
@@ -1,7 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe PuppetLint::Data do
4
- subject(:data) { PuppetLint::Data }
4
+ subject(:data) { described_class }
5
+
5
6
  let(:lexer) { PuppetLint::Lexer.new }
6
7
 
7
8
  describe '.resource_indexes' do
@@ -39,7 +40,8 @@ describe PuppetLint::Data do
39
40
  let(:new_token) { PuppetLint::Lexer::Token.new(:PLUS, '+', 0, 0) }
40
41
  let(:original_tokens) { lexer.tokenise(manifest) }
41
42
  let(:tokens) { original_tokens.dup }
42
- before do
43
+
44
+ before(:each) do
43
45
  data.tokens = tokens
44
46
  data.insert(2, new_token)
45
47
  end
@@ -86,7 +88,8 @@ describe PuppetLint::Data do
86
88
  let(:token) { tokens[2] }
87
89
  let(:original_tokens) { lexer.tokenise(manifest) }
88
90
  let(:tokens) { original_tokens.dup }
89
- before do
91
+
92
+ before(:each) do
90
93
  data.tokens = tokens
91
94
  data.delete(token)
92
95
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'quoted_booleans', :type => :lint do
3
+ describe 'quoted_booleans', type: :lint do
4
4
  let(:msg) { 'quoted boolean value found' }
5
5
 
6
6
  context 'with a single line ignore' do
@@ -12,16 +12,16 @@ describe 'quoted_booleans', :type => :lint do
12
12
  END
13
13
  end
14
14
 
15
- it 'should detect three problems' do
15
+ it 'detects three problems' do
16
16
  expect(problems).to have(3).problems
17
17
  end
18
18
 
19
- it 'should have two warnings' do
19
+ it 'has two warnings' do
20
20
  expect(problems).to contain_warning(msg).on_line(1).in_column(9)
21
21
  expect(problems).to contain_warning(msg).on_line(3).in_column(9)
22
22
  end
23
23
 
24
- it 'should have one ignored problem' do
24
+ it 'has one ignored problem' do
25
25
  expect(problems).to contain_ignored(msg).on_line(2).in_column(9)
26
26
  end
27
27
  end
@@ -35,16 +35,16 @@ describe 'quoted_booleans', :type => :lint do
35
35
  END
36
36
  end
37
37
 
38
- it 'should detect three problems' do
38
+ it 'detects three problems' do
39
39
  expect(problems).to have(3).problems
40
40
  end
41
41
 
42
- it 'should have two warnings' do
42
+ it 'has two warnings' do
43
43
  expect(problems).to contain_warning(msg).on_line(1).in_column(9)
44
44
  expect(problems).to contain_warning(msg).on_line(3).in_column(9)
45
45
  end
46
46
 
47
- it 'should have one ignored problem with a reason' do
47
+ it 'has one ignored problem with a reason' do
48
48
  expect(problems).to contain_ignored(msg).on_line(2).in_column(9).with_reason('some good reason')
49
49
  end
50
50
  end
@@ -61,16 +61,16 @@ describe 'quoted_booleans', :type => :lint do
61
61
  END
62
62
  end
63
63
 
64
- it 'should detect four problems' do
64
+ it 'detects four problems' do
65
65
  expect(problems).to have(4).problems
66
66
  end
67
67
 
68
- it 'should have two warnings' do
68
+ it 'has two warnings' do
69
69
  expect(problems).to contain_warning(msg).on_line(1).in_column(9)
70
70
  expect(problems).to contain_warning(msg).on_line(6).in_column(9)
71
71
  end
72
72
 
73
- it 'should have two ignored problems' do
73
+ it 'has two ignored problems' do
74
74
  expect(problems).to contain_ignored(msg).on_line(3).in_column(9)
75
75
  expect(problems).to contain_ignored(msg).on_line(4).in_column(9)
76
76
  end
@@ -88,16 +88,16 @@ describe 'quoted_booleans', :type => :lint do
88
88
  END
89
89
  end
90
90
 
91
- it 'should detect four problems' do
91
+ it 'detects four problems' do
92
92
  expect(problems).to have(4).problems
93
93
  end
94
94
 
95
- it 'should have two warnings' do
95
+ it 'has two warnings' do
96
96
  expect(problems).to contain_warning(msg).on_line(1).in_column(9)
97
97
  expect(problems).to contain_warning(msg).on_line(6).in_column(9)
98
98
  end
99
99
 
100
- it 'should have two ignored problems with a reason' do
100
+ it 'has two ignored problems with a reason' do
101
101
  expect(problems).to contain_ignored(msg).on_line(3).in_column(9).with_reason('another reason')
102
102
  expect(problems).to contain_ignored(msg).on_line(4).in_column(9).with_reason('another reason')
103
103
  end
@@ -106,11 +106,11 @@ describe 'quoted_booleans', :type => :lint do
106
106
  context 'disable multiple checks on a line with a reason' do
107
107
  let(:code) { '"true" # lint:ignore:quoted_booleans lint:ignore:double_quoted_string a reason' }
108
108
 
109
- it 'should detect 1 problems' do
109
+ it 'detects 1 problems' do
110
110
  expect(problems).to have(1).problems
111
111
  end
112
112
 
113
- it 'should have one ignored problems' do
113
+ it 'has one ignored problems' do
114
114
  expect(problems).to contain_ignored(msg).on_line(1).in_column(1).with_reason('a reason')
115
115
  end
116
116
  end
@@ -128,11 +128,11 @@ describe 'quoted_booleans', :type => :lint do
128
128
  END
129
129
  end
130
130
 
131
- it 'should detect 2 problems' do
131
+ it 'detects 2 problems' do
132
132
  expect(problems).to have(2).problems
133
133
  end
134
134
 
135
- it 'should ignore both problems' do
135
+ it 'ignores both problems' do
136
136
  expect(problems).to contain_ignored(msg).on_line(4).in_column(19).with_reason('')
137
137
  expect(problems).to contain_ignored(msg).on_line(5).in_column(25).with_reason('')
138
138
  end