cookstyle 5.1.19 → 5.2.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/cookstyle +2 -1
- data/config/cookstyle.yml +105 -11
- data/lib/cookstyle/version.rb +1 -1
- data/lib/rubocop/cop/chef/correctness/block_guard_clause_string_only.rb +60 -0
- data/lib/rubocop/cop/chef/correctness/cb_depends_on_self.rb +57 -0
- data/lib/rubocop/cop/chef/correctness/invalid_license_string.rb +489 -0
- data/lib/rubocop/cop/chef/correctness/invalid_platform_metadata.rb +92 -0
- data/lib/rubocop/cop/chef/correctness/metadata_missing_name.rb +46 -0
- data/lib/rubocop/cop/chef/deprecation/long_description_metadata.rb +44 -0
- data/lib/rubocop/cop/chef/deprecation/node_set.rb +4 -4
- data/lib/rubocop/cop/chef/deprecation/node_set_unless.rb +3 -3
- data/lib/rubocop/cop/chef/deprecation/require_recipe.rb +50 -0
- data/lib/rubocop/cop/chef/deprecation/respond_to_metadata.rb +53 -0
- data/lib/rubocop/cop/chef/modernize/build_essential.rb +1 -1
- data/lib/rubocop/cop/chef/modernize/resource_set_or_return.rb +50 -0
- data/lib/rubocop/cop/chef/modernize/resource_with_allowed_action.rb +75 -0
- data/lib/rubocop/cop/chef/modernize/resource_with_attributes.rb +66 -0
- data/lib/rubocop/cop/chef/modernize/respond_to_provides.rb +52 -0
- data/lib/rubocop/cop/chef/modernize/respond_to_resource_name.rb +53 -0
- metadata +15 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b693c3f963fdd6689770744a4ba49fc1461c9312976cfcef2947ff938b04bc9
|
4
|
+
data.tar.gz: 629951dbaa3f1c0e3e116b42f0848415b524886351f67eda55c1f7208715de6f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92a8fca655802ef1627025fca46a23531290aba1bd7240805ba74d648b775d876bf72a5ae955b35c47852110ca05492882afb6334124b79eda310165e8930645
|
7
|
+
data.tar.gz: da43f5422b02cb8d57d15b13b2390f7d9064a80c4ec0b58fce0371b81eb1ab3a0ba68928475316466b52ae9f05eb7af74fa33a33be2fddd64a60da4134995ca8
|
data/bin/cookstyle
CHANGED
@@ -12,7 +12,8 @@ unless ARGV.include?('--fail-level')
|
|
12
12
|
ARGV << 'C'
|
13
13
|
end
|
14
14
|
|
15
|
-
if
|
15
|
+
# if only -v is passed we'll get 3 args (-v, --fail-level, and C)
|
16
|
+
if ARGV.size == 3 && %w(-v --version).include?(ARGV.first)
|
16
17
|
puts "Cookstyle #{Cookstyle::VERSION}"
|
17
18
|
print ' * RuboCop '
|
18
19
|
end
|
data/config/cookstyle.yml
CHANGED
@@ -94,6 +94,20 @@ Chef/NamePropertyIsRequired:
|
|
94
94
|
Enabled: true
|
95
95
|
VersionAdded: '5.1.0'
|
96
96
|
|
97
|
+
Chef/InvalidLicenseString:
|
98
|
+
Description: Cookbook metadata.rb does not use a SPDX compliant license string or "all rights reserved"
|
99
|
+
Enabled: true
|
100
|
+
VersionAdded: '5.2.0'
|
101
|
+
Include:
|
102
|
+
- '**/metadata.rb'
|
103
|
+
|
104
|
+
Chef/InvalidPlatformMetadata:
|
105
|
+
Description: metadata.rb "supports" platform is invalid
|
106
|
+
Enabled: true
|
107
|
+
VersionAdded: '5.2.0'
|
108
|
+
Include:
|
109
|
+
- '**/metadata.rb'
|
110
|
+
|
97
111
|
###############################
|
98
112
|
# Resolving Deprecations
|
99
113
|
###############################
|
@@ -155,6 +169,13 @@ Chef/AttributeMetadata:
|
|
155
169
|
Include:
|
156
170
|
- '**/metadata.rb'
|
157
171
|
|
172
|
+
Chef/LongDescriptionMetadata:
|
173
|
+
Description: The long_description metadata.rb method is not used and is unnecessary in cookbooks
|
174
|
+
Enabled: true
|
175
|
+
VersionAdded: '5.2.0'
|
176
|
+
Include:
|
177
|
+
- '**/metadata.rb'
|
178
|
+
|
158
179
|
Chef/CookbookDependsOnCompatResource:
|
159
180
|
Description: Don't depend on the deprecated compat_resource cookbook made obsolete by Chef 12.19+
|
160
181
|
Enabled: true
|
@@ -179,6 +200,11 @@ Chef/ErlCallResource:
|
|
179
200
|
Enabled: true
|
180
201
|
VersionAdded: '5.1.0'
|
181
202
|
|
203
|
+
Chef/RequireRecipe:
|
204
|
+
Description: Use include_recipe instead of the require_recipe method
|
205
|
+
Enabled: true
|
206
|
+
VersionAdded: '5.2.0'
|
207
|
+
|
182
208
|
###############################
|
183
209
|
# Cleaning up Legacy Code
|
184
210
|
###############################
|
@@ -195,25 +221,25 @@ Chef/WhyRunSupportedTrue:
|
|
195
221
|
Enabled: true
|
196
222
|
VersionAdded: '5.1.0'
|
197
223
|
Include:
|
198
|
-
- '**/resources
|
199
|
-
- '**/providers
|
200
|
-
- '**/libraries
|
224
|
+
- '**/resources/*.rb'
|
225
|
+
- '**/providers/*.rb'
|
226
|
+
- '**/libraries/*.rb'
|
201
227
|
|
202
|
-
PropertyWithNameAttribute:
|
228
|
+
Chef/PropertyWithNameAttribute:
|
203
229
|
Description: Resource property sets name_attribute not name_property
|
204
230
|
Enabled: true
|
205
231
|
VersionAdded: '5.1.0'
|
206
232
|
Include:
|
207
|
-
- '**/resources
|
208
|
-
- '**/libraries
|
233
|
+
- '**/resources/*.rb'
|
234
|
+
- '**/libraries/*.rb'
|
209
235
|
|
210
|
-
PropertyWithRequiredAndDefault:
|
236
|
+
Chef/PropertyWithRequiredAndDefault:
|
211
237
|
Description: Resource property should not be both required and have a default value
|
212
238
|
Enabled: true
|
213
239
|
VersionAdded: '5.1.0'
|
214
240
|
Include:
|
215
|
-
- '**/resources
|
216
|
-
- '**/libraries
|
241
|
+
- '**/resources/*.rb'
|
242
|
+
- '**/libraries/*.rb'
|
217
243
|
|
218
244
|
Chef/UnnecessaryDependsChef14:
|
219
245
|
Description: Don't depend on cookbooks made obsolete by Chef 14
|
@@ -222,13 +248,81 @@ Chef/UnnecessaryDependsChef14:
|
|
222
248
|
Include:
|
223
249
|
- '**/metadata.rb'
|
224
250
|
|
251
|
+
Chef/RespondToInMetadata:
|
252
|
+
Description: It is no longer necessary to use respond_to? in metadata.rb in Chef 12.15 and later
|
253
|
+
Enabled: true
|
254
|
+
VersionAdded: '5.2.0'
|
255
|
+
Include:
|
256
|
+
- '**/metadata.rb'
|
257
|
+
|
258
|
+
Chef/RespondToResourceName:
|
259
|
+
Description: respond_to?(:resource_name) in resources is no longer necessary in Chef Infra Client 12.5+
|
260
|
+
Enabled: true
|
261
|
+
VersionAdded: '5.2.0'
|
262
|
+
Include:
|
263
|
+
- '**/resources/*.rb'
|
264
|
+
- '**/libraries/*.rb'
|
265
|
+
|
266
|
+
Chef/RespondToProvides:
|
267
|
+
Description: respond_to?(:provides) in resources is no longer necessary in Chef Infra Client 12+
|
268
|
+
Enabled: true
|
269
|
+
VersionAdded: '5.2.0'
|
270
|
+
Include:
|
271
|
+
- '**/providers/*.rb'
|
272
|
+
- '**/libraries/*.rb'
|
273
|
+
|
274
|
+
Chef/SetOrReturnInResources:
|
275
|
+
Description: Do not use set_or_return within a method to define a property for a resource. Use the property method instead, which supports validation, reporting, and documentation functionality.
|
276
|
+
Enabled: true
|
277
|
+
VersionAdded: '5.2.0'
|
278
|
+
Include:
|
279
|
+
- '**/resources/*.rb'
|
280
|
+
- '**/libraries/*.rb'
|
281
|
+
|
282
|
+
Chef/CustomResourceWithAttributes:
|
283
|
+
Description: Custom Resources should contain properties not attributes.
|
284
|
+
Enabled: true
|
285
|
+
VersionAdded: '5.2.0'
|
286
|
+
Include:
|
287
|
+
- '**/resources/*.rb'
|
288
|
+
|
289
|
+
Chef/CustomResourceWithAllowedActions:
|
290
|
+
Description: Custom Resources don't need to define the allowed actions with allowed_actions or actions methods
|
291
|
+
Enabled: true
|
292
|
+
VersionAdded: '5.2.0'
|
293
|
+
Include:
|
294
|
+
- '**/resources/*.rb'
|
295
|
+
|
296
|
+
###############################
|
297
|
+
# Detecting code that breaks Chef
|
298
|
+
###############################
|
299
|
+
|
300
|
+
Chef/CookbooksDependsOnSelf:
|
301
|
+
Description: A cookbook cannot depend on itself
|
302
|
+
Enabled: true
|
303
|
+
VersionAdded: '5.2.0'
|
304
|
+
Include:
|
305
|
+
- '**/metadata.rb'
|
306
|
+
|
307
|
+
Chef/MetadataMissingName:
|
308
|
+
Description: MetadataMissingName
|
309
|
+
Enabled: true
|
310
|
+
VersionAdded: '5.2.0'
|
311
|
+
Include:
|
312
|
+
- '**/metadata.rb'
|
313
|
+
|
314
|
+
Chef/BlockGuardWithOnlyString:
|
315
|
+
Description: A resource guard (not_if/only_if) that is a string should not be wrapped in {}. Wrapping a guard string in {} causes it be executed as Ruby code which will always returns true instead of a shell command that will actually run.
|
316
|
+
Enabled: true
|
317
|
+
VersionAdded: '5.2.0'
|
318
|
+
|
225
319
|
###############################
|
226
320
|
# Utilize new built-in resources
|
227
321
|
###############################
|
228
322
|
|
229
323
|
Chef/UseBuildEssentialResource:
|
230
|
-
Description: Use the build_essential resource instead of the legacy build-essential recipe
|
231
|
-
Enabled:
|
324
|
+
Description: Use the build_essential resource instead of the legacy build-essential recipe. This resource ships in the build-essential cookbook v5.0+ and is built into Chef Infra Client 14+
|
325
|
+
Enabled: true
|
232
326
|
VersionAdded: '5.1.0'
|
233
327
|
|
234
328
|
###############################
|
data/lib/cookstyle/version.rb
CHANGED
@@ -0,0 +1,60 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: Copyright 2019, Chef Software Inc.
|
3
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
module RuboCop
|
18
|
+
module Cop
|
19
|
+
module Chef
|
20
|
+
# Use secure Github and Gitlab URLs for source_url and issues_url
|
21
|
+
#
|
22
|
+
# @example
|
23
|
+
#
|
24
|
+
# # bad
|
25
|
+
# template '/etc/foo' do
|
26
|
+
# mode '0644'
|
27
|
+
# source 'foo.erb'
|
28
|
+
# only_if { 'test -f /etc/foo' }
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# # good
|
32
|
+
# template '/etc/foo' do
|
33
|
+
# mode '0644'
|
34
|
+
# source 'foo.erb'
|
35
|
+
# only_if 'test -f /etc/foo'
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
class BlockGuardWithOnlyString < Cop
|
39
|
+
MSG = 'A resource guard (not_if/only_if) that is a string should not be wrapped in {}. Wrapping a guard string in {} causes it be executed as Ruby code which will always returns true instead of a shell command that will actually run.'.freeze
|
40
|
+
|
41
|
+
def_node_matcher :block_guard_with_only_string?, <<-PATTERN
|
42
|
+
(block (send nil? ${:not_if :only_if}) (args) (str $_) )
|
43
|
+
PATTERN
|
44
|
+
|
45
|
+
def on_block(node)
|
46
|
+
block_guard_with_only_string?(node) do
|
47
|
+
add_offense(node, location: :expression, message: MSG, severity: :refactor)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def autocorrect(node)
|
52
|
+
lambda do |corrector|
|
53
|
+
new_val = "#{node.method_name} #{node.body.source}"
|
54
|
+
corrector.replace(node.loc.expression, new_val)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: 2019, Chef Software Inc.
|
3
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
module RuboCop
|
19
|
+
module Cop
|
20
|
+
module Chef
|
21
|
+
# Make sure a cookbook doesn't depend on itself
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
#
|
25
|
+
# # bad
|
26
|
+
# name 'foo'
|
27
|
+
# depends 'foo'
|
28
|
+
#
|
29
|
+
# # good
|
30
|
+
# name 'foo'
|
31
|
+
#
|
32
|
+
class CookbooksDependsOnSelf < Cop
|
33
|
+
MSG = 'A cookbook cannot depend on itself'.freeze
|
34
|
+
|
35
|
+
def_node_search :dependencies, '(send nil? :depends str ...)'
|
36
|
+
def_node_matcher :cb_name?, '(send nil? :name str ...)'
|
37
|
+
|
38
|
+
def on_send(node)
|
39
|
+
cb_name?(node) do
|
40
|
+
dependencies(processed_source.ast).each do |dep|
|
41
|
+
if dep.arguments == node.arguments
|
42
|
+
node = dep # set our dependency node as the node for autocorrecting later
|
43
|
+
add_offense(node, location: dep.source_range, message: MSG, severity: :refactor)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def autocorrect(node)
|
50
|
+
lambda do |corrector|
|
51
|
+
corrector.remove(node.source_range)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,489 @@
|
|
1
|
+
#
|
2
|
+
# Copyright:: 2019, Chef Software Inc.
|
3
|
+
# Author:: Tim Smith (<tsmith@chef.io>)
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
module RuboCop
|
19
|
+
module Cop
|
20
|
+
module Chef
|
21
|
+
# metadata.rb license field should include a SPDX compliant string
|
22
|
+
# or "all right reserved" (not case sensitive)
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
#
|
26
|
+
# # bad
|
27
|
+
# license 'Apache 2.0'
|
28
|
+
#
|
29
|
+
# # good
|
30
|
+
# license 'Apache-2.0'
|
31
|
+
# license 'all rights reserved'
|
32
|
+
#
|
33
|
+
# list of valid SPDX.org license strings. To build an array run this:
|
34
|
+
# require 'json'
|
35
|
+
# require 'net/http'
|
36
|
+
# json_data = JSON.parse(Net::HTTP.get(URI('https://raw.githubusercontent.com/spdx/license-list-data/master/json/licenses.json')))
|
37
|
+
# licenses = json_data['licenses'].map {|l| l['licenseId'] }.sort
|
38
|
+
#
|
39
|
+
|
40
|
+
class InvalidLicenseString < Cop
|
41
|
+
VALID_LICENSE_STRING = %w(
|
42
|
+
0BSD
|
43
|
+
AAL
|
44
|
+
ADSL
|
45
|
+
AFL-1.1
|
46
|
+
AFL-1.2
|
47
|
+
AFL-2.0
|
48
|
+
AFL-2.1
|
49
|
+
AFL-3.0
|
50
|
+
AGPL-1.0
|
51
|
+
AGPL-1.0-only
|
52
|
+
AGPL-1.0-or-later
|
53
|
+
AGPL-3.0
|
54
|
+
AGPL-3.0-only
|
55
|
+
AGPL-3.0-or-later
|
56
|
+
AMDPLPA
|
57
|
+
AML
|
58
|
+
AMPAS
|
59
|
+
ANTLR-PD
|
60
|
+
APAFML
|
61
|
+
APL-1.0
|
62
|
+
APSL-1.0
|
63
|
+
APSL-1.1
|
64
|
+
APSL-1.2
|
65
|
+
APSL-2.0
|
66
|
+
Abstyles
|
67
|
+
Adobe-2006
|
68
|
+
Adobe-Glyph
|
69
|
+
Afmparse
|
70
|
+
Aladdin
|
71
|
+
Apache-1.0
|
72
|
+
Apache-1.1
|
73
|
+
Apache-2.0
|
74
|
+
Artistic-1.0
|
75
|
+
Artistic-1.0-Perl
|
76
|
+
Artistic-1.0-cl8
|
77
|
+
Artistic-2.0
|
78
|
+
BSD-1-Clause
|
79
|
+
BSD-2-Clause
|
80
|
+
BSD-2-Clause-FreeBSD
|
81
|
+
BSD-2-Clause-NetBSD
|
82
|
+
BSD-2-Clause-Patent
|
83
|
+
BSD-3-Clause
|
84
|
+
BSD-3-Clause-Attribution
|
85
|
+
BSD-3-Clause-Clear
|
86
|
+
BSD-3-Clause-LBNL
|
87
|
+
BSD-3-Clause-No-Nuclear-License
|
88
|
+
BSD-3-Clause-No-Nuclear-License-2014
|
89
|
+
BSD-3-Clause-No-Nuclear-Warranty
|
90
|
+
BSD-3-Clause-Open-MPI
|
91
|
+
BSD-4-Clause
|
92
|
+
BSD-4-Clause-UC
|
93
|
+
BSD-Protection
|
94
|
+
BSD-Source-Code
|
95
|
+
BSL-1.0
|
96
|
+
Bahyph
|
97
|
+
Barr
|
98
|
+
Beerware
|
99
|
+
BitTorrent-1.0
|
100
|
+
BitTorrent-1.1
|
101
|
+
BlueOak-1.0.0
|
102
|
+
Borceux
|
103
|
+
CATOSL-1.1
|
104
|
+
CC-BY-1.0
|
105
|
+
CC-BY-2.0
|
106
|
+
CC-BY-2.5
|
107
|
+
CC-BY-3.0
|
108
|
+
CC-BY-4.0
|
109
|
+
CC-BY-NC-1.0
|
110
|
+
CC-BY-NC-2.0
|
111
|
+
CC-BY-NC-2.5
|
112
|
+
CC-BY-NC-3.0
|
113
|
+
CC-BY-NC-4.0
|
114
|
+
CC-BY-NC-ND-1.0
|
115
|
+
CC-BY-NC-ND-2.0
|
116
|
+
CC-BY-NC-ND-2.5
|
117
|
+
CC-BY-NC-ND-3.0
|
118
|
+
CC-BY-NC-ND-4.0
|
119
|
+
CC-BY-NC-SA-1.0
|
120
|
+
CC-BY-NC-SA-2.0
|
121
|
+
CC-BY-NC-SA-2.5
|
122
|
+
CC-BY-NC-SA-3.0
|
123
|
+
CC-BY-NC-SA-4.0
|
124
|
+
CC-BY-ND-1.0
|
125
|
+
CC-BY-ND-2.0
|
126
|
+
CC-BY-ND-2.5
|
127
|
+
CC-BY-ND-3.0
|
128
|
+
CC-BY-ND-4.0
|
129
|
+
CC-BY-SA-1.0
|
130
|
+
CC-BY-SA-2.0
|
131
|
+
CC-BY-SA-2.5
|
132
|
+
CC-BY-SA-3.0
|
133
|
+
CC-BY-SA-4.0
|
134
|
+
CC-PDDC
|
135
|
+
CC0-1.0
|
136
|
+
CDDL-1.0
|
137
|
+
CDDL-1.1
|
138
|
+
CDLA-Permissive-1.0
|
139
|
+
CDLA-Sharing-1.0
|
140
|
+
CECILL-1.0
|
141
|
+
CECILL-1.1
|
142
|
+
CECILL-2.0
|
143
|
+
CECILL-2.1
|
144
|
+
CECILL-B
|
145
|
+
CECILL-C
|
146
|
+
CERN-OHL-1.1
|
147
|
+
CERN-OHL-1.2
|
148
|
+
CNRI-Jython
|
149
|
+
CNRI-Python
|
150
|
+
CNRI-Python-GPL-Compatible
|
151
|
+
CPAL-1.0
|
152
|
+
CPL-1.0
|
153
|
+
CPOL-1.02
|
154
|
+
CUA-OPL-1.0
|
155
|
+
Caldera
|
156
|
+
ClArtistic
|
157
|
+
Condor-1.1
|
158
|
+
Crossword
|
159
|
+
CrystalStacker
|
160
|
+
Cube
|
161
|
+
D-FSL-1.0
|
162
|
+
DOC
|
163
|
+
DSDP
|
164
|
+
Dotseqn
|
165
|
+
ECL-1.0
|
166
|
+
ECL-2.0
|
167
|
+
EFL-1.0
|
168
|
+
EFL-2.0
|
169
|
+
EPL-1.0
|
170
|
+
EPL-2.0
|
171
|
+
EUDatagrid
|
172
|
+
EUPL-1.0
|
173
|
+
EUPL-1.1
|
174
|
+
EUPL-1.2
|
175
|
+
Entessa
|
176
|
+
ErlPL-1.1
|
177
|
+
Eurosym
|
178
|
+
FSFAP
|
179
|
+
FSFUL
|
180
|
+
FSFULLR
|
181
|
+
FTL
|
182
|
+
Fair
|
183
|
+
Frameworx-1.0
|
184
|
+
FreeImage
|
185
|
+
GFDL-1.1
|
186
|
+
GFDL-1.1-only
|
187
|
+
GFDL-1.1-or-later
|
188
|
+
GFDL-1.2
|
189
|
+
GFDL-1.2-only
|
190
|
+
GFDL-1.2-or-later
|
191
|
+
GFDL-1.3
|
192
|
+
GFDL-1.3-only
|
193
|
+
GFDL-1.3-or-later
|
194
|
+
GL2PS
|
195
|
+
GPL-1.0
|
196
|
+
GPL-1.0+
|
197
|
+
GPL-1.0-only
|
198
|
+
GPL-1.0-or-later
|
199
|
+
GPL-2.0
|
200
|
+
GPL-2.0+
|
201
|
+
GPL-2.0-only
|
202
|
+
GPL-2.0-or-later
|
203
|
+
GPL-2.0-with-GCC-exception
|
204
|
+
GPL-2.0-with-autoconf-exception
|
205
|
+
GPL-2.0-with-bison-exception
|
206
|
+
GPL-2.0-with-classpath-exception
|
207
|
+
GPL-2.0-with-font-exception
|
208
|
+
GPL-3.0
|
209
|
+
GPL-3.0+
|
210
|
+
GPL-3.0-only
|
211
|
+
GPL-3.0-or-later
|
212
|
+
GPL-3.0-with-GCC-exception
|
213
|
+
GPL-3.0-with-autoconf-exception
|
214
|
+
Giftware
|
215
|
+
Glide
|
216
|
+
Glulxe
|
217
|
+
HPND
|
218
|
+
HPND-sell-variant
|
219
|
+
HaskellReport
|
220
|
+
IBM-pibs
|
221
|
+
ICU
|
222
|
+
IJG
|
223
|
+
IPA
|
224
|
+
IPL-1.0
|
225
|
+
ISC
|
226
|
+
ImageMagick
|
227
|
+
Imlib2
|
228
|
+
Info-ZIP
|
229
|
+
Intel
|
230
|
+
Intel-ACPI
|
231
|
+
Interbase-1.0
|
232
|
+
JPNIC
|
233
|
+
JSON
|
234
|
+
JasPer-2.0
|
235
|
+
LAL-1.2
|
236
|
+
LAL-1.3
|
237
|
+
LGPL-2.0
|
238
|
+
LGPL-2.0+
|
239
|
+
LGPL-2.0-only
|
240
|
+
LGPL-2.0-or-later
|
241
|
+
LGPL-2.1
|
242
|
+
LGPL-2.1+
|
243
|
+
LGPL-2.1-only
|
244
|
+
LGPL-2.1-or-later
|
245
|
+
LGPL-3.0
|
246
|
+
LGPL-3.0+
|
247
|
+
LGPL-3.0-only
|
248
|
+
LGPL-3.0-or-later
|
249
|
+
LGPLLR
|
250
|
+
LPL-1.0
|
251
|
+
LPL-1.02
|
252
|
+
LPPL-1.0
|
253
|
+
LPPL-1.1
|
254
|
+
LPPL-1.2
|
255
|
+
LPPL-1.3a
|
256
|
+
LPPL-1.3c
|
257
|
+
Latex2e
|
258
|
+
Leptonica
|
259
|
+
LiLiQ-P-1.1
|
260
|
+
LiLiQ-R-1.1
|
261
|
+
LiLiQ-Rplus-1.1
|
262
|
+
Libpng
|
263
|
+
Linux-OpenIB
|
264
|
+
MIT
|
265
|
+
MIT-0
|
266
|
+
MIT-CMU
|
267
|
+
MIT-advertising
|
268
|
+
MIT-enna
|
269
|
+
MIT-feh
|
270
|
+
MITNFA
|
271
|
+
MPL-1.0
|
272
|
+
MPL-1.1
|
273
|
+
MPL-2.0
|
274
|
+
MPL-2.0-no-copyleft-exception
|
275
|
+
MS-PL
|
276
|
+
MS-RL
|
277
|
+
MTLL
|
278
|
+
MakeIndex
|
279
|
+
MirOS
|
280
|
+
Motosoto
|
281
|
+
Multics
|
282
|
+
Mup
|
283
|
+
NASA-1.3
|
284
|
+
NBPL-1.0
|
285
|
+
NCSA
|
286
|
+
NGPL
|
287
|
+
NLOD-1.0
|
288
|
+
NLPL
|
289
|
+
NOSL
|
290
|
+
NPL-1.0
|
291
|
+
NPL-1.1
|
292
|
+
NPOSL-3.0
|
293
|
+
NRL
|
294
|
+
NTP
|
295
|
+
Naumen
|
296
|
+
Net-SNMP
|
297
|
+
NetCDF
|
298
|
+
Newsletr
|
299
|
+
Nokia
|
300
|
+
Noweb
|
301
|
+
Nunit
|
302
|
+
OCCT-PL
|
303
|
+
OCLC-2.0
|
304
|
+
ODC-By-1.0
|
305
|
+
ODbL-1.0
|
306
|
+
OFL-1.0
|
307
|
+
OFL-1.1
|
308
|
+
OGL-UK-1.0
|
309
|
+
OGL-UK-2.0
|
310
|
+
OGL-UK-3.0
|
311
|
+
OGTSL
|
312
|
+
OLDAP-1.1
|
313
|
+
OLDAP-1.2
|
314
|
+
OLDAP-1.3
|
315
|
+
OLDAP-1.4
|
316
|
+
OLDAP-2.0
|
317
|
+
OLDAP-2.0.1
|
318
|
+
OLDAP-2.1
|
319
|
+
OLDAP-2.2
|
320
|
+
OLDAP-2.2.1
|
321
|
+
OLDAP-2.2.2
|
322
|
+
OLDAP-2.3
|
323
|
+
OLDAP-2.4
|
324
|
+
OLDAP-2.5
|
325
|
+
OLDAP-2.6
|
326
|
+
OLDAP-2.7
|
327
|
+
OLDAP-2.8
|
328
|
+
OML
|
329
|
+
OPL-1.0
|
330
|
+
OSET-PL-2.1
|
331
|
+
OSL-1.0
|
332
|
+
OSL-1.1
|
333
|
+
OSL-2.0
|
334
|
+
OSL-2.1
|
335
|
+
OSL-3.0
|
336
|
+
OpenSSL
|
337
|
+
PDDL-1.0
|
338
|
+
PHP-3.0
|
339
|
+
PHP-3.01
|
340
|
+
Parity-6.0.0
|
341
|
+
Plexus
|
342
|
+
PostgreSQL
|
343
|
+
Python-2.0
|
344
|
+
QPL-1.0
|
345
|
+
Qhull
|
346
|
+
RHeCos-1.1
|
347
|
+
RPL-1.1
|
348
|
+
RPL-1.5
|
349
|
+
RPSL-1.0
|
350
|
+
RSA-MD
|
351
|
+
RSCPL
|
352
|
+
Rdisc
|
353
|
+
Ruby
|
354
|
+
SAX-PD
|
355
|
+
SCEA
|
356
|
+
SGI-B-1.0
|
357
|
+
SGI-B-1.1
|
358
|
+
SGI-B-2.0
|
359
|
+
SHL-0.5
|
360
|
+
SHL-0.51
|
361
|
+
SISSL
|
362
|
+
SISSL-1.2
|
363
|
+
SMLNJ
|
364
|
+
SMPPL
|
365
|
+
SNIA
|
366
|
+
SPL-1.0
|
367
|
+
SSPL-1.0
|
368
|
+
SWL
|
369
|
+
Saxpath
|
370
|
+
Sendmail
|
371
|
+
Sendmail-8.23
|
372
|
+
SimPL-2.0
|
373
|
+
Sleepycat
|
374
|
+
Spencer-86
|
375
|
+
Spencer-94
|
376
|
+
Spencer-99
|
377
|
+
StandardML-NJ
|
378
|
+
SugarCRM-1.1.3
|
379
|
+
TAPR-OHL-1.0
|
380
|
+
TCL
|
381
|
+
TCP-wrappers
|
382
|
+
TMate
|
383
|
+
TORQUE-1.1
|
384
|
+
TOSL
|
385
|
+
TU-Berlin-1.0
|
386
|
+
TU-Berlin-2.0
|
387
|
+
UPL-1.0
|
388
|
+
Unicode-DFS-2015
|
389
|
+
Unicode-DFS-2016
|
390
|
+
Unicode-TOU
|
391
|
+
Unlicense
|
392
|
+
VOSTROM
|
393
|
+
VSL-1.0
|
394
|
+
Vim
|
395
|
+
W3C
|
396
|
+
W3C-19980720
|
397
|
+
W3C-20150513
|
398
|
+
WTFPL
|
399
|
+
Watcom-1.0
|
400
|
+
Wsuipa
|
401
|
+
X11
|
402
|
+
XFree86-1.1
|
403
|
+
XSkat
|
404
|
+
Xerox
|
405
|
+
Xnet
|
406
|
+
YPL-1.0
|
407
|
+
YPL-1.1
|
408
|
+
ZPL-1.1
|
409
|
+
ZPL-2.0
|
410
|
+
ZPL-2.1
|
411
|
+
Zed
|
412
|
+
Zend-2.0
|
413
|
+
Zimbra-1.3
|
414
|
+
Zimbra-1.4
|
415
|
+
Zlib
|
416
|
+
blessing
|
417
|
+
bzip2-1.0.5
|
418
|
+
bzip2-1.0.6
|
419
|
+
copyleft-next-0.3.0
|
420
|
+
copyleft-next-0.3.1
|
421
|
+
curl
|
422
|
+
diffmark
|
423
|
+
dvipdfm
|
424
|
+
eCos-2.0
|
425
|
+
eGenix
|
426
|
+
gSOAP-1.3b
|
427
|
+
gnuplot
|
428
|
+
iMatix
|
429
|
+
libpng-2.0
|
430
|
+
libtiff
|
431
|
+
mpich2
|
432
|
+
psfrag
|
433
|
+
psutils
|
434
|
+
wxWindows
|
435
|
+
xinetd
|
436
|
+
xpp
|
437
|
+
zlib-acknowledgement
|
438
|
+
).freeze
|
439
|
+
|
440
|
+
COMMON_TYPOS = {
|
441
|
+
"all_rights": 'all rights reserved',
|
442
|
+
"apache 2.0": 'Apache-2.0',
|
443
|
+
"apache license version 2.0": 'Apache-2.0',
|
444
|
+
"apache2": 'Apache-2.0',
|
445
|
+
"mit": 'MIT',
|
446
|
+
'3-clause bsd': 'BSD-3-Clause',
|
447
|
+
'gnu public license 3.0': 'GPL-3.0',
|
448
|
+
'gpl v2': 'GPL-2.0',
|
449
|
+
'gpl v3': 'GPL-3.0',
|
450
|
+
'gplv2': 'GPL-2.0',
|
451
|
+
'gplv3': 'GPL-3.0',
|
452
|
+
'mit license': 'MIT',
|
453
|
+
}.freeze
|
454
|
+
|
455
|
+
MSG = 'Cookbook metadata.rb does not use a SPDX compliant license string or "all rights reserved". See https://spdx.org/licenses/ for a complete list of license identifiers.'.freeze
|
456
|
+
|
457
|
+
def_node_matcher :license?, '(send nil? :license $str ...)'
|
458
|
+
|
459
|
+
def on_send(node)
|
460
|
+
license?(node) do |license|
|
461
|
+
unless valid_license?(license.str_content)
|
462
|
+
add_offense(license, location: :expression, message: MSG, severity: :refactor)
|
463
|
+
end
|
464
|
+
end
|
465
|
+
end
|
466
|
+
|
467
|
+
def autocorrect(node)
|
468
|
+
correct_string = autocorrect_license_string(node.str_content)
|
469
|
+
if correct_string
|
470
|
+
lambda do |corrector|
|
471
|
+
corrector.replace(node.loc.expression, "'#{correct_string}'")
|
472
|
+
end
|
473
|
+
end
|
474
|
+
end
|
475
|
+
|
476
|
+
# private
|
477
|
+
|
478
|
+
def autocorrect_license_string(bad_string)
|
479
|
+
COMMON_TYPOS[bad_string.delete(',').downcase.to_sym]
|
480
|
+
end
|
481
|
+
|
482
|
+
def valid_license?(license)
|
483
|
+
VALID_LICENSE_STRING.include?(license) ||
|
484
|
+
license.downcase == 'all rights reserved'
|
485
|
+
end
|
486
|
+
end
|
487
|
+
end
|
488
|
+
end
|
489
|
+
end
|