puppet-lint-param_comment-check 0.1.3 → 0.1.4

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: bc1677e0675072c3a48173655360a1daca9c0539ff2a58bd4f71a7c05f38e37b
4
- data.tar.gz: af924c9a20e1957f117538c80cc9a7fa3aa89dcdfafbb2d9b85b26990855e851
3
+ metadata.gz: 760c2ecbb41952244ece53d7fddafcc91f322300b512a65dfc4d5ab7b5622636
4
+ data.tar.gz: 187d476c9e3418c03935d00ddf84fd9c9618cd8ac4a14a391e0046f68f92221f
5
5
  SHA512:
6
- metadata.gz: 68b99e9b40064843a160dfd7e44d81962ed2ee4fd0246b5a623cedc1cb632b9cbbb97645ae3c8ac4caf2d9236fd694dbbccabf56d49a1b12074e8618e69f7e76
7
- data.tar.gz: f466b51ef27e5bcd8edff95fb434706c04b00351b3d6616913d9a5ee3d91004fc8b15614c50a8deb1e9cbeb14b3c67d45acb4d6b061bd7e80bc556e2d4996adf
6
+ metadata.gz: 8396f55b48c7cd1e82f66855eb950c2c1fd4e908423625a262e6ba11496d2cd3b9c90931c66deb97efba5d706502416e71ef4ae47f7d459b5c0fcf24d7b86ef4
7
+ data.tar.gz: '08c1d478a70c0a204805844aa0ad1724ee7a371852c3f7059596204d3c62f89d9044fa2cf44b26b6df2731331f371765b3cdf86de148ecf5cab88216336dea93'
@@ -51,9 +51,9 @@ def analyze_params(param_tokens) # rubocop:disable Metrics/AbcSize,Metrics/Cyclo
51
51
  params = []
52
52
  current_param = EMPTY_PARAM.dup
53
53
  brackets = 0
54
- param_tokens.reject { |token| %i[WHITESPACE NEWLINE].include? token.type }.each do |token|
55
- brackets += 1 if token.type == :LBRACK
56
- brackets -= 1 if token.type == :RBRACK
54
+ param_tokens.reject { |token| %i[WHITESPACE NEWLINE INDENT].include? token.type }.each do |token|
55
+ brackets += 1 if %i[LBRACK LBRACE].include? token.type
56
+ brackets -= 1 if %i[RBRACK RBRACE].include? token.type
57
57
  next unless brackets.zero?
58
58
 
59
59
  current_param = analyze_param_token(token, current_param) unless token.type == :COMMA
@@ -62,7 +62,7 @@ def analyze_params(param_tokens) # rubocop:disable Metrics/AbcSize,Metrics/Cyclo
62
62
  current_param = EMPTY_PARAM.dup
63
63
  end
64
64
  end
65
- params.append(current_param) unless current_param == EMPTY_PARAM
65
+ params.append(current_param) unless current_param[:name] == ''
66
66
  params
67
67
  end
68
68
 
@@ -135,9 +135,9 @@ PuppetLint.new_check(:param_comment) do # rubocop:disable Metrics/BlockLength
135
135
  def check_comment_order(params)
136
136
  param_comments = @comment_engine.params
137
137
  param_comments.each_with_index do |param, index|
138
- return false unless param[:name] == params[index][:name]
138
+ return param[:line] unless param[:name] == params[index][:name]
139
139
  end
140
- true
140
+ -1
141
141
  end
142
142
 
143
143
  # Check class or defined type indexes
@@ -147,7 +147,9 @@ PuppetLint.new_check(:param_comment) do # rubocop:disable Metrics/BlockLength
147
147
  params = analyze_params(index[:param_tokens])
148
148
  return false unless check_comments(comments)
149
149
  return false unless check_parameters_count(params)
150
- return warn('Parameters sorted wrong') unless check_comment_order(params)
150
+
151
+ comment_order_line = check_comment_order(params)
152
+ return warn('Parameters sorted wrong', comment_order_line) unless comment_order_line == -1
151
153
  end
152
154
  true
153
155
  end
@@ -4,28 +4,30 @@
4
4
  EMPTY_PARAM_COMMENT = {
5
5
  name: '',
6
6
  description: '',
7
- options: []
7
+ options: [],
8
+ line: -1
8
9
  }.freeze
9
10
 
10
11
  # The empty data of a hash option
11
12
  EMPTY_OPTION_COMMENT = {
12
13
  name: '',
13
14
  type: '',
14
- description: ''
15
+ description: '',
16
+ line: -1
15
17
  }.freeze
16
18
 
17
19
  # A regular expression describing a parameter header
18
20
  REGEXP_PARAM_HEADER = /^@param (?<name>[^ ]+)$/.freeze
19
21
 
20
22
  # A regular expression describing a hash option header
21
- REGEXP_OPTION_HEADER = /^@option (?<hash_name>[^ ]+) \[(?<type>[^\]]+)\] :(?<name>[^ ]+)$/.freeze
23
+ REGEXP_OPTION_HEADER = /^@option (?<hash_name>[^ ]+) \[(?<type>.+)\] :(?<name>[^ ]+)$/.freeze
22
24
 
23
25
  # Comment received in an invalid state
24
26
  class InvalidCommentForState < StandardError
25
27
  def initialize(comment, state)
26
28
  @comment = comment
27
29
  @state = state
28
- super "Invalid state #{@state} for comment #{@comment.value.strip}"
30
+ super "Can not process the comment '#{@comment.value.strip}' in the state #{@state}"
29
31
  end
30
32
 
31
33
  attr_reader :comment
@@ -66,7 +68,7 @@ class ParamComments
66
68
  # Walk through every comment and transition the workflow fsm accordingly
67
69
  #
68
70
  # @param comments A list of Comment tokens appearing before the class/defined type header
69
- def process(comments) # rubocop:disable Metrics/MethodLength
71
+ def process(comments) # rubocop:disable Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
70
72
  @current_comment = PuppetLint::Lexer::Token.new(:COMMENT, '', 1, 1)
71
73
  comments.each do |comment|
72
74
  @current_comment = comment
@@ -87,7 +89,7 @@ class ParamComments
87
89
  end
88
90
 
89
91
  # Called before the got_header event. Interpret the parameter header comment
90
- def got_header_trigger(_, comment)
92
+ def got_header_trigger(_, comment) # rubocop:disable Metrics/AbcSize
91
93
  @params_have_started = true
92
94
  @current_param[:options].append(@current_option) if @in_option && !@current_option.nil?
93
95
  @params.append(@current_param) unless @current_param.nil?
@@ -96,6 +98,7 @@ class ParamComments
96
98
  @in_option = false
97
99
  comment.value.strip.match(REGEXP_PARAM_HEADER) do |match|
98
100
  @current_param[:name] = match.named_captures['name'].strip
101
+ @current_param[:line] = comment.line
99
102
  end
100
103
  end
101
104
 
@@ -120,6 +123,7 @@ class ParamComments
120
123
 
121
124
  @current_option[:name] = match.named_captures['name']
122
125
  @current_option[:type] = match.named_captures['type']
126
+ @current_param[:line] = comment.line
123
127
  end
124
128
  end
125
129
 
@@ -77,6 +77,50 @@ describe 'param_comment' do
77
77
  end
78
78
  end
79
79
 
80
+ context 'valid code with hash default' do
81
+ let(:code) do
82
+ <<~CODE
83
+ # @summary
84
+ # some class
85
+ #
86
+ # @param hashparam
87
+ # A hash
88
+ class my_class (
89
+ Hash $hashparam = {
90
+ somekey => "value"
91
+ }
92
+ ) {}
93
+ CODE
94
+ end
95
+
96
+ it 'should not detect any problems' do
97
+ expect(problems).to have(0).problems
98
+ end
99
+ end
100
+
101
+ context 'valid code with hash default with an enclosed hash' do
102
+ let(:code) do
103
+ <<~CODE
104
+ # @summary
105
+ # some class
106
+ #
107
+ # @param hashparam
108
+ # A hash
109
+ class my_class (
110
+ Hash $hashparam = {
111
+ 'anotherhash' => {
112
+ somekey => "value"
113
+ },
114
+ },
115
+ ) {}
116
+ CODE
117
+ end
118
+
119
+ it 'should not detect any problems' do
120
+ expect(problems).to have(0).problems
121
+ end
122
+ end
123
+
80
124
  context 'code with missing parameter comment' do
81
125
  let(:code) do
82
126
  <<~CODE
@@ -130,15 +174,14 @@ describe 'param_comment' do
130
174
  context 'code with wrongly sorted parameter comments' do
131
175
  let(:code) do
132
176
  <<~CODE
133
- # @param withdefault
134
- # A parameter with a default value
135
- #
136
177
  # @param mandatory
137
178
  # A mandatory parameter
138
179
  #
139
180
  # @param optional
140
181
  # An optional parameter
141
-
182
+ #
183
+ # @param withdefault
184
+ # A parameter with a default value
142
185
  class my_class (
143
186
  String $mandatory,
144
187
  Boolean $withdefault = false,
@@ -152,7 +195,7 @@ describe 'param_comment' do
152
195
  end
153
196
 
154
197
  it 'should create a warning' do
155
- expect(problems).to contain_warning('Parameters sorted wrong').on_line(1).in_column(1)
198
+ expect(problems).to contain_warning('Parameters sorted wrong').on_line(4).in_column(1)
156
199
  end
157
200
  end
158
201
 
@@ -180,7 +223,7 @@ describe 'param_comment' do
180
223
  end
181
224
 
182
225
  it 'should create a warning' do
183
- expect(problems).to contain_warning('Invalid state awaiting_separator for comment @param withdefault')
226
+ expect(problems).to contain_warning('Can not process the comment \'@param withdefault\' in the state awaiting_separator')
184
227
  .on_line(3)
185
228
  .in_column(1)
186
229
  end
@@ -272,7 +315,7 @@ describe 'param_comment' do
272
315
 
273
316
  it 'should create a warning' do
274
317
  expect(problems).to contain_warning(
275
- 'Invalid state awaiting_header for comment @option mandatory [Boolean] :some_option'
318
+ 'Can not process the comment \'@option mandatory [Boolean] :some_option\' in the state awaiting_header'
276
319
  )
277
320
  .on_line(4)
278
321
  .in_column(1)
@@ -326,10 +369,28 @@ describe 'param_comment' do
326
369
 
327
370
  it 'should create a warning' do
328
371
  expect(problems).to contain_warning(
329
- 'Invalid state awaiting_separator for comment @param second'
372
+ 'Can not process the comment \'@param second\' in the state awaiting_separator'
330
373
  )
331
374
  .on_line(5)
332
375
  .in_column(1)
333
376
  end
334
377
  end
378
+
379
+ context 'valid code with complex hash option type' do
380
+ let(:code) do
381
+ <<~CODE
382
+ # @param mandatory
383
+ # A mandatory parameter
384
+ # @option mandatory [Optional[String]] :some_option
385
+ # An option
386
+ class my_class (
387
+ Hash $mandatory,
388
+ ) {}
389
+ CODE
390
+ end
391
+
392
+ it 'should detect exactly one problem' do
393
+ expect(problems).to have(0).problems
394
+ end
395
+ end
335
396
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-lint-param_comment-check
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dennis Ploeger