puppet-lint-global_definition-check 0.4.1 → 0.5.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: f5908dbc45cdfa0b23c1118581382b3b94b04d8e3698f97dfee048f88cc86afc
4
- data.tar.gz: 126e6ae65e6ece7de91b78f6dcb231ed6d2afaa82ae92be496b58c7cb9e8cf68
3
+ metadata.gz: edfa4379a68cd98b941f2156587b388d2de7300e05355d012e3d98390195a2e8
4
+ data.tar.gz: 36b7d81094a0fea0762cc435de4b445e9917f051fae7cebc826d1f46dba4b0f6
5
5
  SHA512:
6
- metadata.gz: 697fca75eb244e8e6e86d7320538069da3682aa0a5093a4ef39cb16dd7c6c13c410dd595bfb33d76f31f709c61ad69230451aa913ec293b932f7968702da6484
7
- data.tar.gz: 3de93b7fc97a05f656e54388ad7fb13aa377071450ee94f7f5dd46ea7fd06959b4a8bd90ca50530d0a601fd7b9a23764c12836fa217417a824de0c31f49fd33e
6
+ metadata.gz: 2d5690c151f070e3b408149b24786b776a7b6d2162e97fedcba2b8f50b9084cda8928cea7cb6c397ea16afb20dce278b0c4a226dd3d5a2ff539487a3dbb64ef9
7
+ data.tar.gz: 719e6c2dab89070dbce14cf0acc03549f6004302af15e412a8baf0d6328e0e25f9821657c419299160d6be6c87508de882658c0113467988cced6aad5c26dc94
@@ -1,34 +1,78 @@
1
1
  module PuppetLintGlobalDefinionCheck
2
2
  private
3
3
 
4
- def check_for_global_token(type, value = nil)
5
- global_tokens.each_with_index do |token, i|
4
+ def check_for_global_token(type)
5
+ global_tokens.each do |token|
6
6
  next unless token.type == type
7
- next unless value.nil? || token.value == value
8
7
 
9
- message = value.nil? ? token.value : "#{token.value} #{token.next_code_token.value}"
8
+ message = yield(token)
9
+ next unless message
10
10
 
11
11
  notify :error,
12
- message: "definition #{message} in global space",
12
+ message: "#{message} in global space",
13
13
  line: token.line,
14
14
  column: token.column
15
15
  end
16
16
  end
17
17
 
18
18
  def global_tokens
19
- @global_tokens ||= tokens.reject.with_index { |_, i| secure_ranges.any? { |s| s[0] < i && s[1] > i } }
19
+ @global_tokens ||= tokens.reject.with_index { |_, i| safe_ranges.any? { |s| s[0] < i && s[1] > i } }
20
20
  end
21
21
 
22
- def secure_ranges
23
- return @secure_ranges if @secure_ranges
22
+ def custom_functions_indexes
23
+ # Code adapted from https://github.com/puppetlabs/puppet-lint/blob/dcff4a1b8d3bf5c15762db826967dd03200626be/lib/puppet-lint/data.rb#L298
24
+ type = :FUNCTION
25
+ result = []
26
+ tokens.each_with_index do |token, i|
27
+ next unless token.type == type
28
+
29
+ brace_depth = 0
30
+ paren_depth = 0
31
+ in_params = false
32
+ return_type = nil
33
+ tokens[i + 1..-1].each_with_index do |definition_token, j|
34
+ case definition_token.type
35
+ when :LPAREN
36
+ in_params = true if paren_depth.zero? && brace_depth.zero?
37
+ paren_depth += 1
38
+ when :RPAREN
39
+ in_params = false if paren_depth == 1 && brace_depth.zero?
40
+ paren_depth -= 1
41
+ when :RSHIFT
42
+ return_type = definition_token.next_code_token unless definition_token.next_code_token.nil? || definition_token.next_code_token.type != :TYPE
43
+ when :LBRACE
44
+ brace_depth += 1
45
+ when :RBRACE
46
+ brace_depth -= 1
47
+ if brace_depth.zero? && !in_params && (token.next_code_token.type != :LBRACE)
48
+ result << {
49
+ start: i,
50
+ end: i + j + 1,
51
+ tokens: tokens[i..(i + j + 1)],
52
+ param_tokens: PuppetLint::Data.param_tokens(tokens[i..(i + j + 1)]),
53
+ type: type,
54
+ name_token: token.next_code_token,
55
+ return_type: return_type
56
+ }
57
+ break
58
+ end
59
+ end
60
+ end
61
+ end
62
+ result
63
+ end
24
64
 
25
- @secure_ranges = []
65
+ def safe_ranges
66
+ return @safe_ranges if @safe_ranges
26
67
 
27
- class_indexes.each { |c| @secure_ranges << [c[:start], c[:end]] }
28
- defined_type_indexes.each { |d| @secure_ranges << [d[:start], d[:end]] }
29
- node_indexes.each { |n| @secure_ranges << [n[:start], n[:end]] }
68
+ @safe_ranges = []
30
69
 
31
- @secure_ranges
70
+ class_indexes.each { |c| @safe_ranges << [c[:start], c[:end]] }
71
+ defined_type_indexes.each { |d| @safe_ranges << [d[:start], d[:end]] }
72
+ node_indexes.each { |n| @safe_ranges << [n[:start], n[:end]] }
73
+ custom_functions_indexes.each { |cf| @safe_ranges << [cf[:start], cf[:end]] }
74
+
75
+ @safe_ranges
32
76
  end
33
77
  end
34
78
 
@@ -37,12 +81,14 @@ PuppetLint.new_check(:global_resource) do
37
81
 
38
82
  def check
39
83
  check_for_global_resources
40
- check_for_global_token(:NAME, "include")
84
+ check_for_global_token(:NAME) do |token|
85
+ "#{token.value} #{token.next_code_token.value}" if token.value == "include"
86
+ end
41
87
  end
42
88
 
43
89
  def check_for_global_resources
44
90
  resource_indexes.each do |r|
45
- next if secure_ranges.any? { |s| s[0] < r[:start] && s[1] > r[:end] }
91
+ next if safe_ranges.any? { |s| s[0] < r[:start] && s[1] > r[:end] }
46
92
 
47
93
  notify :error,
48
94
  message: "resource #{r[:type].value} in global space",
@@ -56,6 +102,8 @@ PuppetLint.new_check(:global_function) do
56
102
  include PuppetLintGlobalDefinionCheck
57
103
 
58
104
  def check
59
- check_for_global_token(:FUNCTION_NAME)
105
+ check_for_global_token(:FUNCTION_NAME) do |token|
106
+ "function call #{token.value}(...)"
107
+ end
60
108
  end
61
109
  end
@@ -11,7 +11,7 @@ describe "global_function" do
11
11
  end
12
12
 
13
13
  it "should not detect any problems" do
14
- expect(problems).to have(0).problems
14
+ expect(problems.size).to eq(0)
15
15
  end
16
16
  end
17
17
 
@@ -27,7 +27,21 @@ describe "global_function" do
27
27
  end
28
28
 
29
29
  it "should detect a problem" do
30
- expect(problems).to have(1).problems
30
+ expect(problems.size).to eq(1)
31
+ end
32
+ end
33
+
34
+ context "custom function definition with function call" do
35
+ let(:code) do
36
+ <<-EOS
37
+ function test_module::test_function() >> Any {
38
+ function_call()
39
+ }
40
+ EOS
41
+ end
42
+
43
+ it "should not detect any problems" do
44
+ expect(problems.size).to eq(0)
31
45
  end
32
46
  end
33
47
  end
@@ -5,7 +5,7 @@ describe "global_resource" do
5
5
  let(:code) { "class test { file { 'file': } }" }
6
6
 
7
7
  it "should not detect any problems" do
8
- expect(problems).to have(0).problems
8
+ expect(problems.size).to eq(0)
9
9
  end
10
10
  end
11
11
 
@@ -13,7 +13,7 @@ describe "global_resource" do
13
13
  let(:code) { "define test ($param = undef) { file { 'file': } }" }
14
14
 
15
15
  it "should not detect any problems" do
16
- expect(problems).to have(0).problems
16
+ expect(problems.size).to eq(0)
17
17
  end
18
18
  end
19
19
 
@@ -21,7 +21,7 @@ describe "global_resource" do
21
21
  let(:code) { "node 'test' { file { 'file': } }" }
22
22
 
23
23
  it "should not detect any problems" do
24
- expect(problems).to have(0).problems
24
+ expect(problems.size).to eq(0)
25
25
  end
26
26
  end
27
27
 
@@ -31,7 +31,7 @@ describe "global_resource" do
31
31
  end
32
32
 
33
33
  it "should detect a problem" do
34
- expect(problems).to have(1).problems
34
+ expect(problems.size).to eq(1)
35
35
  end
36
36
  end
37
37
 
@@ -39,7 +39,7 @@ describe "global_resource" do
39
39
  let(:code) { "class test { file { 'file': } } \ninclude testclass" }
40
40
 
41
41
  it "should detect a problem" do
42
- expect(problems).to have(1).problems
42
+ expect(problems.size).to eq(1)
43
43
  end
44
44
  end
45
45
 
@@ -53,7 +53,7 @@ describe "global_resource" do
53
53
  end
54
54
 
55
55
  it "should not detect any problems" do
56
- expect(problems).to have(0).problems
56
+ expect(problems.size).to eq(0)
57
57
  end
58
58
  end
59
59
  end
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-lint-global_definition-check
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nine Internet Solutions AG
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-05 00:00:00.000000000 Z
11
+ date: 2023-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: puppet-lint
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '2.2'
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: '2.1'
22
+ version: '5'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '2.2'
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: '2.1'
32
+ version: '5'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rspec
29
35
  requirement: !ruby/object:Gem::Requirement