puppet-lint-global_definition-check 0.4.1 → 0.5.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
  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