inspecstyle 0.1.6 → 0.2.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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +3 -0
- data/config/default.yml +80 -4
- data/lib/rubocop/cop/inspecstyle/apache.rb +57 -0
- data/lib/rubocop/cop/inspecstyle/aws_iam_user_property.rb +96 -0
- data/lib/rubocop/cop/inspecstyle/file_be_mounted.rb +65 -0
- data/lib/rubocop/cop/inspecstyle/file_size.rb +77 -0
- data/lib/rubocop/cop/inspecstyle/host_proto.rb +71 -0
- data/lib/rubocop/cop/inspecstyle/iis_website.rb +36 -0
- data/lib/rubocop/cop/inspecstyle/linux_kernel_parameter.rb +41 -0
- data/lib/rubocop/cop/inspecstyle/mssql_session_pass.rb +59 -0
- data/lib/rubocop/cop/inspecstyle/oracle_db_session_pass.rb +22 -1
- data/lib/rubocop/cop/inspecstyle/ppa_resource.rb +36 -0
- data/lib/rubocop/cop/inspecstyle/processes_list.rb +77 -0
- data/lib/rubocop/cop/inspecstyle/script_resource.rb +48 -0
- data/lib/rubocop/cop/inspecstyle/shadow_properties.rb +47 -25
- data/lib/rubocop/cop/inspecstyle/users_resource_matchers.rb +98 -0
- data/lib/rubocop/cop/inspecstyle/windows_registry_key.rb +36 -0
- data/lib/rubocop/cop/inspecstyle/wmi_wmis_class.rb +37 -0
- data/lib/rubocop/cop/inspecstyle_cops.rb +14 -1
- data/lib/rubocop/inspecstyle/version.rb +1 -1
- data/notes-for-development.md +7 -0
- metadata +16 -3
- data/lib/rubocop/cop/inspecstyle/first_cop.rb +0 -68
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c51bedfaba90e6e4cf18d3a51f66198bf2fa16a497b49b0df0463090f8405104
|
4
|
+
data.tar.gz: '090fe9248bb711be0f8c77c845317c98a1acc66dd377c6f7f24923338afd9638'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0fa18de10357a081e004f385a8635d658eb878779468db447d2584f8bc4697a6b6a6a7f348811a697cfce61cd61c7928669dbd779331bc0585f93b4079ac42a6
|
7
|
+
data.tar.gz: b3082f4bc9201180cd09aa31bcfde73e2ec6c6ac157da1b6307e50eb83161cc97c8943ba4eec6ebeb691e4296a31846bc5322c4adca85789170471be5a9ebbe1
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# WIP: This gem is __not__ live, but we would love your help and input! Core issue here: https://github.com/inspec/inspec/issues/5095
|
2
|
+
|
3
|
+
|
1
4
|
# InSpecStyle
|
2
5
|
|
3
6
|
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/rubocop/inspecstyle`. To experiment with that code, run `bin/console` for an interactive prompt.
|
data/config/default.yml
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
InSpecStyle/Apache:
|
2
|
+
Description: 'Use apache_conf instead of apache'
|
3
|
+
Enabled: true
|
4
|
+
VersionAdded: '0.82'
|
5
|
+
PreferredReplacement: 'apache_conf'
|
6
|
+
|
7
|
+
InSpecStyle/AwsIamUserProperty:
|
8
|
+
Description: 'For the aws_iam_users resource name and user properties are deprecated. Use username and aws_user_struct instead'
|
9
|
+
Enabled: true
|
10
|
+
VersionAdded: '0.82'
|
11
|
+
|
1
12
|
InSpecStyle/AzureGenericResource:
|
2
13
|
Description: 'Do not use azure_generic_resource'
|
3
14
|
Enabled: true
|
@@ -11,17 +22,82 @@ InSpecStyle/DeprecatedAttributes:
|
|
11
22
|
StyleGuide: 'https://github.com/inspec/inspec/issues/3802'
|
12
23
|
PreferredReplacement: 'input'
|
13
24
|
|
25
|
+
InSpecStyle/FileBeMounted:
|
26
|
+
Description: 'aws_iam_users resource name and user properties are deprecated for username and aws_user_struct'
|
27
|
+
Enabled: true
|
28
|
+
VersionAdded: '0.82'
|
29
|
+
|
30
|
+
InSpecStyle/FileSize:
|
31
|
+
Description: '`size` property for `file` resource is deprecated for `size_kb` and will be removed in InSpec5'
|
32
|
+
Enabled: true
|
33
|
+
VersionAdded: '0.82'
|
34
|
+
PreferredReplacement: 'size_kb'
|
35
|
+
|
36
|
+
InSpecStyle/HostProto:
|
37
|
+
Description: 'Proto property for host has been deprecated for protocol'
|
38
|
+
Enabled: true
|
39
|
+
VersionAdded: '0.82'
|
40
|
+
PreferredReplacement: 'protocol'
|
41
|
+
|
42
|
+
InSpecStyle/IisWebsite:
|
43
|
+
Description: 'iis_website resource has been deprecated for iis_site'
|
44
|
+
Enabled: true
|
45
|
+
VersionAdded: '0.82'
|
46
|
+
PreferredReplacement: 'iis_site'
|
47
|
+
|
48
|
+
InSpecStyle/LinuxKernelParameter:
|
49
|
+
Description: 'linux_kernel_parameter resource has been deprecated for kernel_parameter'
|
50
|
+
Enabled: true
|
51
|
+
VersionAdded: '0.82'
|
52
|
+
PreferredReplacement: 'kernel_parameter'
|
53
|
+
|
54
|
+
InSpecStyle/MSSQLSessionPass:
|
55
|
+
Description: 'mssql_session resource parameter pass is deprecated for password'
|
56
|
+
Enabled: true
|
57
|
+
VersionAdded: '0.82'
|
58
|
+
|
14
59
|
InSpecStyle/OracleDbSessionPass:
|
15
|
-
Description: 'Use `
|
60
|
+
Description: 'Use `password` instead of `pass`'
|
61
|
+
Enabled: true
|
62
|
+
VersionAdded: '0.82'
|
63
|
+
PreferredReplacement: 'password'
|
64
|
+
|
65
|
+
InSpecStyle/PPAResource:
|
66
|
+
Description: 'The ppa resource is deprecated in favor of the apt resource'
|
67
|
+
Enabled: true
|
68
|
+
VersionAdded: '0.82'
|
69
|
+
PreferredReplacement: 'apt'
|
70
|
+
|
71
|
+
InSpecStyle/ProcessesList:
|
72
|
+
Description: 'list property on processes resource is deprecated for entries'
|
16
73
|
Enabled: true
|
17
74
|
VersionAdded: '0.82'
|
75
|
+
PreferredReplacement: 'entries'
|
76
|
+
|
77
|
+
InSpecStyle/ScriptResource:
|
78
|
+
Description: 'Use powershell instead of script'
|
79
|
+
Enabled: true
|
80
|
+
VersionAdded: '0.82'
|
81
|
+
PreferredReplacement: 'powershell'
|
18
82
|
|
19
83
|
InSpecStyle/ShadowProperties:
|
20
|
-
Description: '
|
84
|
+
Description: 'Deprecated properties for the shadow resource'
|
85
|
+
Enabled: true
|
86
|
+
VersionAdded: '0.82'
|
87
|
+
|
88
|
+
InSpecStyle/UsersResourceMatchers:
|
89
|
+
Description: 'Deprecated matchers for the users resource'
|
90
|
+
Enabled: true
|
91
|
+
VersionAdded: '0.82'
|
92
|
+
|
93
|
+
InSpecStyle/WindowsRegistryKey:
|
94
|
+
Description: 'The windows_registry_key resource is deprecated for registry_key'
|
21
95
|
Enabled: true
|
22
96
|
VersionAdded: '0.82'
|
97
|
+
PreferredReplacement: 'registry_key'
|
23
98
|
|
24
|
-
|
25
|
-
Description: '
|
99
|
+
InSpecStyle/WmiWmisClass:
|
100
|
+
Description: "wmi('wmisclass') is deprecated for wmi({class: wmisclass})"
|
26
101
|
Enabled: true
|
27
102
|
VersionAdded: '0.82'
|
103
|
+
PreferredReplacement: "wmi({class: 'wmisclass'})"
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module InSpecStyle
|
6
|
+
# Do not use apache
|
7
|
+
#
|
8
|
+
# @example EnforcedStyle: InSpecStyle (default)
|
9
|
+
# # apache has been deprecated
|
10
|
+
# # 'https://github.com/inspec/inspec/issues/3131'
|
11
|
+
# # Since there are multiples replacements autocorrect is not supported.
|
12
|
+
#
|
13
|
+
# # bad
|
14
|
+
# apache
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# azurerm_virtual_machine # use a specific resource pack resource
|
18
|
+
#
|
19
|
+
class Apache < Cop
|
20
|
+
MSG = 'Use a `apache_conf` instead of `#apache`. '\
|
21
|
+
'This resource will be removed in InSpec 5.'
|
22
|
+
|
23
|
+
def_node_matcher :spec?, <<-PATTERN
|
24
|
+
(block
|
25
|
+
(send nil? :describe ...)
|
26
|
+
...)
|
27
|
+
PATTERN
|
28
|
+
|
29
|
+
def_node_matcher :apache?, <<~PATTERN
|
30
|
+
(send nil? :apache ...)
|
31
|
+
PATTERN
|
32
|
+
|
33
|
+
def on_send(node)
|
34
|
+
return unless apache?(node)
|
35
|
+
|
36
|
+
add_offense(node, location: :selector)
|
37
|
+
end
|
38
|
+
|
39
|
+
def autocorrect(node)
|
40
|
+
lambda do |corrector|
|
41
|
+
corrector.replace(node.loc.selector, preferred_replacement)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def inside_spec?(root)
|
48
|
+
spec?(root)
|
49
|
+
end
|
50
|
+
|
51
|
+
def preferred_replacement
|
52
|
+
cop_config.fetch('PreferredReplacement')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module InSpecStyle
|
6
|
+
# aws_iam_users resource properties `user|password|last_change|expiry_date|line` is deprecated in favor of `users|passwords|last_changes|expiry_dates|lines`
|
7
|
+
#
|
8
|
+
# @example EnforcedStyle: InSpecStyle (default)
|
9
|
+
# # Use users instead
|
10
|
+
#
|
11
|
+
# # bad
|
12
|
+
# describe aws_iam_user('/etc/my-custom-place/aws_iam_user') do
|
13
|
+
# its('name') { should eq 'user' }
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# # good
|
17
|
+
# describe aws_iam_user('/etc/my-custom-place/aws_iam_user') do
|
18
|
+
# its('username') { should eq 'user' }
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
class AwsIamUserProperty < Cop
|
22
|
+
include RangeHelp
|
23
|
+
|
24
|
+
MSG = 'Use `:%<solution>s` instead of `:%<violation>s` as a property ' \
|
25
|
+
'for the `aws_iam_user` resource. This property will be removed in InSpec 5'
|
26
|
+
|
27
|
+
MAP = {
|
28
|
+
user: "aws_user_struct",
|
29
|
+
name: "username"
|
30
|
+
}
|
31
|
+
|
32
|
+
def_node_matcher :deprecated_aws_iam_users_property?, <<~PATTERN
|
33
|
+
(block
|
34
|
+
(send _ :its
|
35
|
+
(str ${"name" "user"}) ...)
|
36
|
+
...)
|
37
|
+
PATTERN
|
38
|
+
|
39
|
+
def_node_matcher :spec?, <<-PATTERN
|
40
|
+
(block
|
41
|
+
(send nil? :describe ...)
|
42
|
+
...)
|
43
|
+
PATTERN
|
44
|
+
|
45
|
+
def_node_matcher :aws_iam_users_resource?, <<-PATTERN
|
46
|
+
(block
|
47
|
+
(send nil? :describe
|
48
|
+
(send nil? :aws_iam_users ...)
|
49
|
+
...)
|
50
|
+
...)
|
51
|
+
PATTERN
|
52
|
+
|
53
|
+
def on_block(node)
|
54
|
+
return unless inside_aws_iam_users_spec?(node)
|
55
|
+
node.descendants.each do |descendant|
|
56
|
+
deprecated_aws_iam_users_property?(descendant) do |violation|
|
57
|
+
add_offense(
|
58
|
+
descendant,
|
59
|
+
location: offense_range(descendant),
|
60
|
+
message: format(
|
61
|
+
MSG,
|
62
|
+
violation: violation,
|
63
|
+
solution: MAP[violation.to_sym]
|
64
|
+
)
|
65
|
+
)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def autocorrect(node)
|
71
|
+
lambda do |corrector|
|
72
|
+
case node.children[0].children[-1].inspect
|
73
|
+
when "s(:str, \"name\")"
|
74
|
+
corrector.replace(offense_range(node), 'username')
|
75
|
+
when "s(:str, \"user\")"
|
76
|
+
corrector.replace(offense_range(node), 'aws_user_struct')
|
77
|
+
else
|
78
|
+
break
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
|
85
|
+
def inside_aws_iam_users_spec?(root)
|
86
|
+
spec?(root) && aws_iam_users_resource?(root)
|
87
|
+
end
|
88
|
+
|
89
|
+
def offense_range(node)
|
90
|
+
source = node.children[0].children[-1].loc.expression
|
91
|
+
range_between(source.begin_pos+1, source.end_pos-1)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# NOTE TO SELF - this one works BUT not if other its statements are defined. Needs
|
4
|
+
# to work in any arrangement. This is a powerful one to crack as this pattern
|
5
|
+
# will be used in a LOT of other cops.
|
6
|
+
|
7
|
+
module RuboCop
|
8
|
+
module Cop
|
9
|
+
module InSpecStyle
|
10
|
+
# file resource deprecates matchers `be_mounted.with` and `be_mounted.only_with` in favor of the mount resource
|
11
|
+
#
|
12
|
+
|
13
|
+
class FileBeMounted < Cop
|
14
|
+
MSG = 'Use the `:mount` resource instead of `be_mounted.%<violation>s` ' \
|
15
|
+
"\nThis matcher will be removed in InSpec 5"
|
16
|
+
|
17
|
+
def_node_matcher :deprecated_file_matcher?, <<~PATTERN
|
18
|
+
(send
|
19
|
+
(send _ :be_mounted ...) ${:with :only_with}
|
20
|
+
...)
|
21
|
+
PATTERN
|
22
|
+
|
23
|
+
def_node_matcher :spec?, <<-PATTERN
|
24
|
+
(block
|
25
|
+
(send nil? :describe ...)
|
26
|
+
...)
|
27
|
+
PATTERN
|
28
|
+
|
29
|
+
def_node_matcher :file_resource?, <<-PATTERN
|
30
|
+
(block
|
31
|
+
(send nil? :describe
|
32
|
+
(send nil? :file ...)
|
33
|
+
...)
|
34
|
+
...)
|
35
|
+
PATTERN
|
36
|
+
|
37
|
+
def on_block(node)
|
38
|
+
return unless inside_file_spec?(node)
|
39
|
+
node.descendants.each do |descendant|
|
40
|
+
deprecated_file_matcher?(descendant) do |violation|
|
41
|
+
add_offense(
|
42
|
+
descendant,
|
43
|
+
location: offense_range(descendant),
|
44
|
+
message: format(
|
45
|
+
MSG,
|
46
|
+
violation: violation
|
47
|
+
)
|
48
|
+
)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def inside_file_spec?(root)
|
56
|
+
spec?(root) && file_resource?(root)
|
57
|
+
end
|
58
|
+
|
59
|
+
def offense_range(node)
|
60
|
+
node.loc.selector
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module InSpecStyle
|
6
|
+
# @example EnforcedStyle: InSpecStyle (default)
|
7
|
+
# `size` property for `file` resource is deprecated for `size_kb` and will be removed in InSpec5
|
8
|
+
#
|
9
|
+
# # bad
|
10
|
+
# describe file('my_file.txt') do
|
11
|
+
# its('size') { should eq 12345 }
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# describe file('my_file.txt') do
|
16
|
+
# its('size_kb') { should eq 12345 }
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
class FileSize < Cop
|
20
|
+
include RangeHelp
|
21
|
+
|
22
|
+
MSG = '`size` property for `file` resource is deprecated for `size_kb` and will be removed in InSpec5'
|
23
|
+
|
24
|
+
def_node_matcher :file_resource_size_property?, <<~PATTERN
|
25
|
+
(block
|
26
|
+
(send _ :its
|
27
|
+
(str "size") ...)
|
28
|
+
...)
|
29
|
+
PATTERN
|
30
|
+
|
31
|
+
def_node_matcher :spec?, <<-PATTERN
|
32
|
+
(block
|
33
|
+
(send nil? :describe ...)
|
34
|
+
...)
|
35
|
+
PATTERN
|
36
|
+
|
37
|
+
def_node_matcher :file_resource?, <<-PATTERN
|
38
|
+
(block
|
39
|
+
(send nil? :describe
|
40
|
+
(send nil? :file ...)
|
41
|
+
...)
|
42
|
+
...)
|
43
|
+
PATTERN
|
44
|
+
|
45
|
+
|
46
|
+
def on_block(node)
|
47
|
+
return unless inside_file_spec?(node)
|
48
|
+
node.descendants.each do |descendant|
|
49
|
+
next unless file_resource_size_property?(descendant)
|
50
|
+
add_offense(descendant, location: offense_range(descendant))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def autocorrect(node)
|
55
|
+
lambda do |corrector|
|
56
|
+
corrector.replace(offense_range(node), preferred_replacement)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def inside_file_spec?(root)
|
63
|
+
spec?(root) && file_resource?(root)
|
64
|
+
end
|
65
|
+
|
66
|
+
def preferred_replacement
|
67
|
+
cop_config.fetch('PreferredReplacement')
|
68
|
+
end
|
69
|
+
|
70
|
+
def offense_range(node)
|
71
|
+
source = node.children[0].children[-1].loc.expression
|
72
|
+
range_between(source.begin_pos+1, source.end_pos-1)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module InSpecStyle
|
6
|
+
# @example EnforcedStyle: InSpecStyle (default)
|
7
|
+
# `proto` property for `host` resource is deprecated for `protocol` and will be removed in InSpec5
|
8
|
+
#
|
9
|
+
# # bad
|
10
|
+
# describe host('my_host.txt') do
|
11
|
+
# its('proto') { should eq 12345 }
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# describe host('my_host.txt') do
|
16
|
+
# its('protocol') { should eq 12345 }
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
class HostProto < Cop
|
20
|
+
include RangeHelp
|
21
|
+
|
22
|
+
MSG = '`proto` property for `host` resource is deprecated for `protocol` and will be removed in InSpec5'
|
23
|
+
|
24
|
+
def_node_matcher :host_resource_proto_property?, <<~PATTERN
|
25
|
+
(block
|
26
|
+
(send _ :its
|
27
|
+
(str "proto") ...)
|
28
|
+
...)
|
29
|
+
PATTERN
|
30
|
+
|
31
|
+
def_node_matcher :host_resource?, <<-PATTERN
|
32
|
+
(block
|
33
|
+
(send nil? :describe
|
34
|
+
(send nil? :host ...)
|
35
|
+
...)
|
36
|
+
...)
|
37
|
+
PATTERN
|
38
|
+
|
39
|
+
|
40
|
+
def on_block(node)
|
41
|
+
return unless inside_resource_spec?(node)
|
42
|
+
node.descendants.each do |descendant|
|
43
|
+
next unless host_resource_proto_property?(descendant)
|
44
|
+
add_offense(descendant, location: offense_range(descendant))
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def autocorrect(node)
|
49
|
+
lambda do |corrector|
|
50
|
+
corrector.replace(offense_range(node), preferred_replacement)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def inside_resource_spec?(root)
|
57
|
+
host_resource?(root)
|
58
|
+
end
|
59
|
+
|
60
|
+
def preferred_replacement
|
61
|
+
cop_config.fetch('PreferredReplacement')
|
62
|
+
end
|
63
|
+
|
64
|
+
def offense_range(node)
|
65
|
+
source = node.children[0].children[-1].loc.expression
|
66
|
+
range_between(source.begin_pos+1, source.end_pos-1)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module InSpecStyle
|
6
|
+
# @example EnforcedStyle: InSpecStyle (default)
|
7
|
+
# # iis_website has been deprecated as a resource. Use iis_site instead
|
8
|
+
#
|
9
|
+
class IisWebsite < Cop
|
10
|
+
MSG = 'Use `iis_site` instead of `iis_website`. '\
|
11
|
+
'This resource will be removed in InSpec 5.'
|
12
|
+
|
13
|
+
def_node_matcher :iis_website?, <<~PATTERN
|
14
|
+
(send _ :iis_website ...)
|
15
|
+
PATTERN
|
16
|
+
|
17
|
+
def on_send(node)
|
18
|
+
return unless iis_website?(node)
|
19
|
+
add_offense(node, location: :selector)
|
20
|
+
end
|
21
|
+
|
22
|
+
def autocorrect(node)
|
23
|
+
lambda do |corrector|
|
24
|
+
corrector.replace(node.loc.selector, preferred_replacement)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def preferred_replacement
|
31
|
+
cop_config.fetch('PreferredReplacement')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module InSpecStyle
|
6
|
+
# @example EnforcedStyle: InSpecStyle (default)
|
7
|
+
# # linux_kernel_parameter has been deprecated as a resource. Use kernel_parameter instead
|
8
|
+
#
|
9
|
+
class LinuxKernelParameter < Cop
|
10
|
+
MSG = 'Use `kernel_parameter` instead of `linux_kernel_parameter`. '\
|
11
|
+
'This resource will be removed in InSpec 5.'
|
12
|
+
|
13
|
+
def_node_matcher :linux_kernel_parameter?, <<~PATTERN
|
14
|
+
(send nil? :linux_kernel_parameter ...)
|
15
|
+
PATTERN
|
16
|
+
|
17
|
+
def on_send(node)
|
18
|
+
return unless linux_kernel_parameter?(node)
|
19
|
+
|
20
|
+
add_offense(node, location: :selector)
|
21
|
+
end
|
22
|
+
|
23
|
+
def autocorrect(node)
|
24
|
+
lambda do |corrector|
|
25
|
+
corrector.replace(node.loc.selector, preferred_replacement)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def inside_spec?(root)
|
32
|
+
spec?(root)
|
33
|
+
end
|
34
|
+
|
35
|
+
def preferred_replacement
|
36
|
+
cop_config.fetch('PreferredReplacement')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Note: highlighting could possibly be better
|
4
|
+
|
5
|
+
module RuboCop
|
6
|
+
module Cop
|
7
|
+
module InSpecStyle
|
8
|
+
#
|
9
|
+
# @example EnforcedStyle: InSpecStyle (default)
|
10
|
+
# # Description of the `bar` style.
|
11
|
+
#
|
12
|
+
# # bad
|
13
|
+
# sql = mssql_session(user: 'my_user', pass: 'password')
|
14
|
+
#
|
15
|
+
# # good
|
16
|
+
# sql = mssql_session(user: 'my_user', password: 'password
|
17
|
+
#
|
18
|
+
class MSSQLSessionPass < Cop
|
19
|
+
include MatchRange
|
20
|
+
MSG = 'Use `:password` instead of `:pass`. This will be removed in '\
|
21
|
+
'InSpec 5'
|
22
|
+
|
23
|
+
def_node_matcher :mssql_session_pass?, <<~PATTERN
|
24
|
+
(send _ :mssql_session
|
25
|
+
(hash
|
26
|
+
...
|
27
|
+
(pair
|
28
|
+
(sym $:pass)
|
29
|
+
...)))
|
30
|
+
PATTERN
|
31
|
+
|
32
|
+
# Getting location was a bit tricky on this one, looking at docs perhaps
|
33
|
+
# convention does allow highlighting an entire line.
|
34
|
+
def on_send(node)
|
35
|
+
return unless result = mssql_session_pass?(node)
|
36
|
+
add_offense(node, message: MSG)
|
37
|
+
end
|
38
|
+
|
39
|
+
def autocorrect(node)
|
40
|
+
lambda do |corrector|
|
41
|
+
corrector.replace(offense_range(node), preferred_replacement)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def offense_range(node)
|
48
|
+
node.descendants.map do |x|
|
49
|
+
x.descendants.find {|y| y.inspect == "s(:sym, :pass)"}
|
50
|
+
end.compact.first.source_range
|
51
|
+
end
|
52
|
+
|
53
|
+
def preferred_replacement
|
54
|
+
cop_config.fetch('PreferredReplacement')
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# Note: highlighting could possibly be better
|
4
|
+
|
3
5
|
module RuboCop
|
4
6
|
module Cop
|
5
7
|
module InSpecStyle
|
@@ -11,7 +13,8 @@ module RuboCop
|
|
11
13
|
# sql = oracledb_session(user: 'my_user', pass: 'password')
|
12
14
|
#
|
13
15
|
# # good
|
14
|
-
# sql = oracledb_session(user: 'my_user', password: 'password
|
16
|
+
# sql = oracledb_session(user: 'my_user', password: 'password
|
17
|
+
#
|
15
18
|
class OracleDbSessionPass < Cop
|
16
19
|
include MatchRange
|
17
20
|
MSG = 'Use `:password` instead of `:pass`. This will be removed in '\
|
@@ -32,6 +35,24 @@ module RuboCop
|
|
32
35
|
return unless result = oracledb_session_pass?(node)
|
33
36
|
add_offense(node, message: MSG)
|
34
37
|
end
|
38
|
+
|
39
|
+
def autocorrect(node)
|
40
|
+
lambda do |corrector|
|
41
|
+
corrector.replace(offense_range(node), preferred_replacement)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def offense_range(node)
|
48
|
+
node.descendants.map do |x|
|
49
|
+
x.descendants.find {|y| y.inspect == "s(:sym, :pass)"}
|
50
|
+
end.compact.first.source_range
|
51
|
+
end
|
52
|
+
|
53
|
+
def preferred_replacement
|
54
|
+
cop_config.fetch('PreferredReplacement')
|
55
|
+
end
|
35
56
|
end
|
36
57
|
end
|
37
58
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module InSpecStyle
|
6
|
+
# @example EnforcedStyle: InSpecStyle (default)
|
7
|
+
# # ppa has been deprecated as a resource. Use apt instead
|
8
|
+
#
|
9
|
+
class PPAResource < Cop
|
10
|
+
MSG = 'Use `apt` instead of `ppa`. '\
|
11
|
+
'This resource will be removed in InSpec 5.'
|
12
|
+
|
13
|
+
def_node_matcher :ppa?, <<~PATTERN
|
14
|
+
(send _ :ppa ...)
|
15
|
+
PATTERN
|
16
|
+
|
17
|
+
def on_send(node)
|
18
|
+
return unless ppa?(node)
|
19
|
+
add_offense(node, location: :selector)
|
20
|
+
end
|
21
|
+
|
22
|
+
def autocorrect(node)
|
23
|
+
lambda do |corrector|
|
24
|
+
corrector.replace(node.loc.selector, preferred_replacement)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def preferred_replacement
|
31
|
+
cop_config.fetch('PreferredReplacement')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module InSpecStyle
|
6
|
+
# @example EnforcedStyle: InSpecStyle (default)
|
7
|
+
# `list` property for `processes` resource is deprecated for `entries` and will be removed in InSpec5
|
8
|
+
#
|
9
|
+
# # bad
|
10
|
+
# describe processes('my_processes.txt') do
|
11
|
+
# its('list') { should eq 12345 }
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# # good
|
15
|
+
# describe processes('my_processes.txt') do
|
16
|
+
# its('entries') { should eq 12345 }
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
class ProcessesList < Cop
|
20
|
+
include RangeHelp
|
21
|
+
|
22
|
+
MSG = '`list` property for `processes` resource is deprecated for `entries` and will be removed in InSpec5'
|
23
|
+
|
24
|
+
def_node_matcher :processes_resource_list?, <<~PATTERN
|
25
|
+
(block
|
26
|
+
(send _ :its
|
27
|
+
(str "list") ...)
|
28
|
+
...)
|
29
|
+
PATTERN
|
30
|
+
|
31
|
+
def_node_matcher :spec?, <<-PATTERN
|
32
|
+
(block
|
33
|
+
(send nil? :describe ...)
|
34
|
+
...)
|
35
|
+
PATTERN
|
36
|
+
|
37
|
+
def_node_matcher :processes_resource?, <<-PATTERN
|
38
|
+
(block
|
39
|
+
(send nil? :describe
|
40
|
+
(send nil? :processes ...)
|
41
|
+
...)
|
42
|
+
...)
|
43
|
+
PATTERN
|
44
|
+
|
45
|
+
|
46
|
+
def on_block(node)
|
47
|
+
return unless inside_processes_spec?(node)
|
48
|
+
node.descendants.each do |descendant|
|
49
|
+
next unless processes_resource_list?(descendant)
|
50
|
+
add_offense(descendant, location: offense_range(descendant))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def autocorrect(node)
|
55
|
+
lambda do |corrector|
|
56
|
+
corrector.replace(offense_range(node), preferred_replacement)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def inside_processes_spec?(root)
|
63
|
+
spec?(root) && processes_resource?(root)
|
64
|
+
end
|
65
|
+
|
66
|
+
def preferred_replacement
|
67
|
+
cop_config.fetch('PreferredReplacement')
|
68
|
+
end
|
69
|
+
|
70
|
+
def offense_range(node)
|
71
|
+
source = node.children[0].children[-1].loc.expression
|
72
|
+
range_between(source.begin_pos+1, source.end_pos-1)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module InSpecStyle
|
6
|
+
# @example EnforcedStyle: InSpecStyle (default)
|
7
|
+
# # script has been deprecated as a resource. Use powershell instead
|
8
|
+
#
|
9
|
+
class ScriptResource < Cop
|
10
|
+
MSG = 'Use `powershell` instead of `script`. '\
|
11
|
+
'This resource will be removed in InSpec 5.'
|
12
|
+
|
13
|
+
def_node_matcher :spec?, <<-PATTERN
|
14
|
+
(block
|
15
|
+
(send nil? :describe ...)
|
16
|
+
...)
|
17
|
+
PATTERN
|
18
|
+
|
19
|
+
def_node_matcher :script?, <<~PATTERN
|
20
|
+
(send nil? :script ...)
|
21
|
+
PATTERN
|
22
|
+
|
23
|
+
def on_send(node)
|
24
|
+
return unless inside_spec?(node)
|
25
|
+
return unless script?(node)
|
26
|
+
|
27
|
+
add_offense(node, location: :selector)
|
28
|
+
end
|
29
|
+
|
30
|
+
def autocorrect(node)
|
31
|
+
lambda do |corrector|
|
32
|
+
corrector.replace(node.loc.selector, preferred_replacement)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def inside_spec?(root)
|
39
|
+
spec?(root)
|
40
|
+
end
|
41
|
+
|
42
|
+
def preferred_replacement
|
43
|
+
cop_config.fetch('PreferredReplacement')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -1,13 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# NOTE TO SELF - this one works BUT not if other its statements are defined. Needs
|
4
|
-
# to work in any arrangement. This is a powerful one to crack as this pattern
|
5
|
-
# will be used in a LOT of other cops.
|
6
|
-
|
7
3
|
module RuboCop
|
8
4
|
module Cop
|
9
5
|
module InSpecStyle
|
10
|
-
# Shadow resource
|
6
|
+
# Shadow resource properties `user|password|last_change|expiry_date|line` is deprecated in favor of `users|passwords|last_changes|expiry_dates|lines`
|
11
7
|
#
|
12
8
|
# @example EnforcedStyle: InSpecStyle (default)
|
13
9
|
# # Use users instead
|
@@ -23,37 +19,63 @@ module RuboCop
|
|
23
19
|
# end
|
24
20
|
#
|
25
21
|
class ShadowProperties < Cop
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
# See https://github.com/rubocop-hq/rubocop-ast/blob/master/lib/rubocop/node_pattern.rb
|
30
|
-
#
|
31
|
-
# For example
|
32
|
-
MSG = 'Use `:%<modifier>ss` instead of `:%<modifier>s` as a property ' \
|
22
|
+
include RangeHelp
|
23
|
+
|
24
|
+
MSG = 'Use `:%<violation>ss` instead of `:%<violation>s` as a property ' \
|
33
25
|
'for the `shadow` resource. This property will be removed in InSpec 5'
|
34
26
|
|
35
|
-
def_node_matcher :
|
27
|
+
def_node_matcher :deprecated_shadow_property?, <<~PATTERN
|
36
28
|
(block
|
37
|
-
(send _ :
|
38
|
-
(
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
29
|
+
(send _ :its
|
30
|
+
(str ${"user" "password" "last_change" "expiry_date" "line"}) ...)
|
31
|
+
...)
|
32
|
+
PATTERN
|
33
|
+
|
34
|
+
def_node_matcher :spec?, <<-PATTERN
|
35
|
+
(block
|
36
|
+
(send nil? :describe ...)
|
37
|
+
...)
|
38
|
+
PATTERN
|
39
|
+
|
40
|
+
def_node_matcher :shadow_resource?, <<-PATTERN
|
41
|
+
(block
|
42
|
+
(send nil? :describe
|
43
|
+
(send nil? :shadow ...)
|
44
|
+
...)
|
45
|
+
...)
|
43
46
|
PATTERN
|
44
47
|
|
45
48
|
def on_block(node)
|
46
|
-
return unless
|
47
|
-
|
48
|
-
|
49
|
-
|
49
|
+
return unless inside_shadow_spec?(node)
|
50
|
+
node.descendants.each do |descendant|
|
51
|
+
deprecated_shadow_property?(descendant) do |violation|
|
52
|
+
add_offense(
|
53
|
+
descendant,
|
54
|
+
location: offense_range(descendant),
|
55
|
+
message: format(
|
56
|
+
MSG,
|
57
|
+
violation: violation
|
58
|
+
)
|
59
|
+
)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def autocorrect(node)
|
65
|
+
lambda do |corrector|
|
66
|
+
corrector.insert_after(offense_range(node), 's')
|
50
67
|
end
|
51
68
|
end
|
52
69
|
|
53
70
|
private
|
54
71
|
|
55
|
-
def
|
56
|
-
|
72
|
+
def inside_shadow_spec?(root)
|
73
|
+
spec?(root) && shadow_resource?(root)
|
74
|
+
end
|
75
|
+
|
76
|
+
def offense_range(node)
|
77
|
+
source = node.children[0].children[-1].loc.expression
|
78
|
+
range_between(source.begin_pos+1, source.end_pos-1)
|
57
79
|
end
|
58
80
|
end
|
59
81
|
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# NOTE TO SELF - this one works BUT not if other its statements are defined. Needs
|
4
|
+
# to work in any arrangement. This is a powerful one to crack as this pattern
|
5
|
+
# will be used in a LOT of other cops.
|
6
|
+
|
7
|
+
module RuboCop
|
8
|
+
module Cop
|
9
|
+
module InSpecStyle
|
10
|
+
# Users resource deprecated matchers
|
11
|
+
#
|
12
|
+
# @example EnforcedStyle: InSpecStyle (default)
|
13
|
+
#
|
14
|
+
# # bad
|
15
|
+
# describe users('/etc/my-custom-place/users') do
|
16
|
+
# its('has_home_directory?') { should eq 'foo' }
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# # good
|
20
|
+
# describe users('/etc/my-custom-place/users') do
|
21
|
+
# its('users') { should eq 'foo' }
|
22
|
+
# end
|
23
|
+
#
|
24
|
+
class UsersResourceMatchers < Cop
|
25
|
+
MSG = 'Use `%<solution>s` instead of `%<violation>s` as a matcher ' \
|
26
|
+
"for the `users` resource. \nThis matcher will be removed in InSpec 5"
|
27
|
+
|
28
|
+
MAP = {
|
29
|
+
has_home_directory?: "its('home')",
|
30
|
+
has_login_shell?: "its('shell')",
|
31
|
+
has_authorized_key?: "another matcher",
|
32
|
+
maximum_days_between_password_change: :maxdays,
|
33
|
+
has_uid?: "another matcher",
|
34
|
+
minimum_days_between_password_change: "mindays"
|
35
|
+
}
|
36
|
+
|
37
|
+
def_node_matcher :deprecated_users_matcher?, <<~PATTERN
|
38
|
+
(send _ ${#{MAP.keys.map(&:inspect).join(' ')}} ...)
|
39
|
+
PATTERN
|
40
|
+
|
41
|
+
def_node_matcher :spec?, <<-PATTERN
|
42
|
+
(block
|
43
|
+
(send nil? :describe ...)
|
44
|
+
...)
|
45
|
+
PATTERN
|
46
|
+
|
47
|
+
def_node_matcher :users_resource?, <<-PATTERN
|
48
|
+
(block
|
49
|
+
(send nil? :describe
|
50
|
+
(send nil? :users ...)
|
51
|
+
...)
|
52
|
+
...)
|
53
|
+
PATTERN
|
54
|
+
|
55
|
+
def on_block(node)
|
56
|
+
return unless inside_users_spec?(node)
|
57
|
+
node.descendants.each do |descendant|
|
58
|
+
deprecated_users_matcher?(descendant) do |violation|
|
59
|
+
add_offense(
|
60
|
+
descendant,
|
61
|
+
location: offense_range(descendant),
|
62
|
+
message: format(
|
63
|
+
MSG,
|
64
|
+
violation: violation,
|
65
|
+
solution: MAP[violation]
|
66
|
+
)
|
67
|
+
)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def autocorrect(node)
|
73
|
+
lambda do |corrector|
|
74
|
+
# Only these two matchers are autocorrectable
|
75
|
+
[
|
76
|
+
'maximum_days_between_password_change',
|
77
|
+
'minimum_days_between_password_change'
|
78
|
+
].map do |violation|
|
79
|
+
if node.inspect.include?(violation)
|
80
|
+
corrector.replace(node.loc.selector, MAP[violation.to_sym])
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def inside_users_spec?(root)
|
89
|
+
spec?(root) && users_resource?(root)
|
90
|
+
end
|
91
|
+
|
92
|
+
def offense_range(node)
|
93
|
+
node.loc.selector
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module InSpecStyle
|
6
|
+
# @example EnforcedStyle: InSpecStyle (default)
|
7
|
+
# # windows_registry_key has been deprecated as a resource. Use registry_key instead
|
8
|
+
#
|
9
|
+
class WindowsRegistryKey < Cop
|
10
|
+
MSG = 'Use `registry_key` instead of `windows_registry_key`. '\
|
11
|
+
'This resource will be removed in InSpec 5.'
|
12
|
+
|
13
|
+
def_node_matcher :windows_registry_key?, <<~PATTERN
|
14
|
+
(send _ :windows_registry_key ...)
|
15
|
+
PATTERN
|
16
|
+
|
17
|
+
def on_send(node)
|
18
|
+
return unless windows_registry_key?(node)
|
19
|
+
add_offense(node, location: :selector)
|
20
|
+
end
|
21
|
+
|
22
|
+
def autocorrect(node)
|
23
|
+
lambda do |corrector|
|
24
|
+
corrector.replace(node.loc.selector, preferred_replacement)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def preferred_replacement
|
31
|
+
cop_config.fetch('PreferredReplacement')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module InSpecStyle
|
6
|
+
# @example EnforcedStyle: InSpecStyle (default)
|
7
|
+
# # wmi_wmis_class has been deprecated as a resource. Use iis_site instead
|
8
|
+
#
|
9
|
+
class WmiWmisClass < Cop
|
10
|
+
MSG = 'Use `iis_site` instead of `wmi_wmis_class`. '\
|
11
|
+
'This resource will be removed in InSpec 5.'
|
12
|
+
|
13
|
+
def_node_matcher :wmi_wmis_class?, <<~PATTERN
|
14
|
+
(send _ :wmi
|
15
|
+
(str "wmisclass") ...)
|
16
|
+
PATTERN
|
17
|
+
|
18
|
+
def on_send(node)
|
19
|
+
return unless wmi_wmis_class?(node)
|
20
|
+
add_offense(node)
|
21
|
+
end
|
22
|
+
|
23
|
+
def autocorrect(node)
|
24
|
+
lambda do |corrector|
|
25
|
+
corrector.replace(node.source_range, preferred_replacement)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def preferred_replacement
|
32
|
+
cop_config.fetch('PreferredReplacement')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -1,6 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require_relative 'inspecstyle/first_cop'
|
3
2
|
require_relative 'inspecstyle/deprecated_attributes'
|
4
3
|
require_relative 'inspecstyle/azure_generic_resource'
|
5
4
|
require_relative 'inspecstyle/shadow_properties'
|
6
5
|
require_relative 'inspecstyle/oracle_db_session_pass'
|
6
|
+
require_relative 'inspecstyle/file_size'
|
7
|
+
require_relative 'inspecstyle/apache'
|
8
|
+
require_relative 'inspecstyle/script_resource'
|
9
|
+
require_relative 'inspecstyle/users_resource_matchers'
|
10
|
+
require_relative 'inspecstyle/iis_website'
|
11
|
+
require_relative 'inspecstyle/host_proto'
|
12
|
+
require_relative 'inspecstyle/linux_kernel_parameter'
|
13
|
+
require_relative 'inspecstyle/mssql_session_pass'
|
14
|
+
require_relative 'inspecstyle/ppa_resource'
|
15
|
+
require_relative 'inspecstyle/processes_list'
|
16
|
+
require_relative 'inspecstyle/windows_registry_key'
|
17
|
+
require_relative 'inspecstyle/aws_iam_user_property'
|
18
|
+
require_relative 'inspecstyle/file_be_mounted'
|
19
|
+
require_relative 'inspecstyle/wmi_wmis_class'
|
data/notes-for-development.md
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inspecstyle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Schwaderer
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -71,11 +71,24 @@ files:
|
|
71
71
|
- doc/top-level-namespace.html
|
72
72
|
- inspecstyle.gemspec
|
73
73
|
- lib/inspecstyle.rb
|
74
|
+
- lib/rubocop/cop/inspecstyle/apache.rb
|
75
|
+
- lib/rubocop/cop/inspecstyle/aws_iam_user_property.rb
|
74
76
|
- lib/rubocop/cop/inspecstyle/azure_generic_resource.rb
|
75
77
|
- lib/rubocop/cop/inspecstyle/deprecated_attributes.rb
|
76
|
-
- lib/rubocop/cop/inspecstyle/
|
78
|
+
- lib/rubocop/cop/inspecstyle/file_be_mounted.rb
|
79
|
+
- lib/rubocop/cop/inspecstyle/file_size.rb
|
80
|
+
- lib/rubocop/cop/inspecstyle/host_proto.rb
|
81
|
+
- lib/rubocop/cop/inspecstyle/iis_website.rb
|
82
|
+
- lib/rubocop/cop/inspecstyle/linux_kernel_parameter.rb
|
83
|
+
- lib/rubocop/cop/inspecstyle/mssql_session_pass.rb
|
77
84
|
- lib/rubocop/cop/inspecstyle/oracle_db_session_pass.rb
|
85
|
+
- lib/rubocop/cop/inspecstyle/ppa_resource.rb
|
86
|
+
- lib/rubocop/cop/inspecstyle/processes_list.rb
|
87
|
+
- lib/rubocop/cop/inspecstyle/script_resource.rb
|
78
88
|
- lib/rubocop/cop/inspecstyle/shadow_properties.rb
|
89
|
+
- lib/rubocop/cop/inspecstyle/users_resource_matchers.rb
|
90
|
+
- lib/rubocop/cop/inspecstyle/windows_registry_key.rb
|
91
|
+
- lib/rubocop/cop/inspecstyle/wmi_wmis_class.rb
|
79
92
|
- lib/rubocop/cop/inspecstyle_cops.rb
|
80
93
|
- lib/rubocop/inspecstyle.rb
|
81
94
|
- lib/rubocop/inspecstyle/inject.rb
|
@@ -1,68 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module InSpecStyle
|
6
|
-
# TODO: Write cop description and example of bad / good code. For every
|
7
|
-
# `SupportedStyle` and unique configuration, there needs to be examples.
|
8
|
-
# Examples must have valid Ruby syntax. Do not use upticks.
|
9
|
-
#
|
10
|
-
# @example EnforcedStyle: bar (default)
|
11
|
-
# # Description of the `bar` style.
|
12
|
-
#
|
13
|
-
# # bad
|
14
|
-
# bad_bar_method
|
15
|
-
#
|
16
|
-
# # bad
|
17
|
-
# bad_bar_method(args)
|
18
|
-
#
|
19
|
-
# # good
|
20
|
-
# good_bar_method
|
21
|
-
#
|
22
|
-
# # good
|
23
|
-
# good_bar_method(args)
|
24
|
-
#
|
25
|
-
# @example EnforcedStyle: foo
|
26
|
-
# # Description of the `foo` style.
|
27
|
-
#
|
28
|
-
# # bad
|
29
|
-
# bad_foo_method
|
30
|
-
#
|
31
|
-
# # bad
|
32
|
-
# bad_foo_method(args)
|
33
|
-
#
|
34
|
-
# # good
|
35
|
-
# good_foo_method
|
36
|
-
#
|
37
|
-
# # good
|
38
|
-
# good_foo_method(args)
|
39
|
-
#
|
40
|
-
class FirstCop < Cop
|
41
|
-
# TODO: Implement the cop in here.
|
42
|
-
#
|
43
|
-
# In many cases, you can use a node matcher for matching node pattern.
|
44
|
-
# See https://github.com/rubocop-hq/rubocop/blob/master/lib/rubocop/node_pattern.rb
|
45
|
-
#
|
46
|
-
# For example
|
47
|
-
MSG = 'Use `#good_method` instead of `#bad_method`. %<example_insertion>'
|
48
|
-
|
49
|
-
def_node_matcher :bad_method?, <<~PATTERN
|
50
|
-
(send nil? :bad_method ...)
|
51
|
-
PATTERN
|
52
|
-
|
53
|
-
def on_send(node)
|
54
|
-
return unless bad_method?(node)
|
55
|
-
message = format(MSG, example_insertion: node.first.source)
|
56
|
-
add_offense(node, message: message)
|
57
|
-
end
|
58
|
-
|
59
|
-
def autocorrect(node)
|
60
|
-
->(corrector) do
|
61
|
-
corrector.insert_before(node.source_range, 'good_method')
|
62
|
-
corrector.remove(node.source_range)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|