rubocop-github 0.16.0 → 0.16.1

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: a214708e80e236506ea96c77c5a84afcd173e01decb10ad36410986f6a0e0df2
4
- data.tar.gz: 715868e7decb28fc675c6bf1eac07345081e71aa998856e15f704aba00ac9201
3
+ metadata.gz: 2b53ecd11b38faabbc6eea214afc14515faa069d354b38d048a054821018499b
4
+ data.tar.gz: 500ca24b6717dfe481a3c472e02ef3dcc61bb41c8de7f872ba838a58659548b1
5
5
  SHA512:
6
- metadata.gz: 52a618c65c36c842aaf9826c4a5cbb44b18b95424beb8edbae631f5d735d83c219742e97253726adf9b91613fa79f045aabb042f5e38c91c74531c4688547cb6
7
- data.tar.gz: 9cce70da14cbb170421bddb6f4dfa921ebec9dcd6b8684ed3361c5e34bfb7119bc64cb887d74f2e372ad09454f06774e47f8b351a8e0ff98142819f4dd1d7d01
6
+ metadata.gz: d1ca6682867334fd2194722129145c669a094657259e76e2a449fbbff018ac541ce0f0f9d5395b9edd9c63eca9f846b4f4f185e39870fcb1cdc3ee335d205557
7
+ data.tar.gz: 2acd77310e4b23a59f4cd0c1fbad5d4c4b314e79e3cbd6047e7d11c423adf20944bd4ec2a769b5bf8dc88f8aacc27324f8a56af05989cd467bded66d287be71e
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # RuboCop GitHub [![Build Status](https://travis-ci.org/github/rubocop-github.svg?branch=master)](https://travis-ci.org/github/rubocop-github)
1
+ # RuboCop GitHub ![CI](https://github.com/github/rubocop-github/workflows/CI/badge.svg?event=push)
2
2
 
3
3
  This repository provides recommended RuboCop configuration and additional Cops for use on GitHub open source and internal Ruby projects.
4
4
 
data/STYLEGUIDE.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  * Use soft-tabs with a two space indent.
4
4
 
5
- * Keep each line of code to a readable length. Unless you have a reason to, keep lines to fewer than 100 characters.
5
+ * Keep each line of code to a readable length. Unless you have a reason to, keep lines to a maximum of 118 characters. Why 118? That's the width at which the pull request diff UI needs horizontal scrolling (making pull requests harder to review).
6
6
 
7
7
  * Never leave trailing whitespace.
8
8
 
@@ -31,9 +31,34 @@ some(arg).other
31
31
  !array.include?(element)
32
32
  ```
33
33
 
34
- * Indent `when` as deep as `case`.
34
+ * Indent `when` with the start of the `case` expression.
35
35
 
36
36
  ``` ruby
37
+ # bad
38
+ message = case
39
+ when song.name == "Misty"
40
+ "Not again!"
41
+ when song.duration > 120
42
+ "Too long!"
43
+ when Time.now.hour > 21
44
+ "It's too late"
45
+ else
46
+ song.to_s
47
+ end
48
+
49
+ # good
50
+ message = case
51
+ when song.name == "Misty"
52
+ "Not again!"
53
+ when song.duration > 120
54
+ "Too long!"
55
+ when Time.now.hour > 21
56
+ "It's too late"
57
+ else
58
+ song.to_s
59
+ end
60
+
61
+ # good
37
62
  case
38
63
  when song.name == "Misty"
39
64
  puts "Not again!"
@@ -44,15 +69,6 @@ when Time.now.hour > 21
44
69
  else
45
70
  song.play
46
71
  end
47
-
48
- kind = case year
49
- when 1850..1889 then "Blues"
50
- when 1890..1909 then "Ragtime"
51
- when 1910..1929 then "New Orleans Jazz"
52
- when 1930..1939 then "Swing"
53
- when 1940..1950 then "Bebop"
54
- else "Jazz"
55
- end
56
72
  ```
57
73
 
58
74
  * Use empty lines between `def`s and to break up a method into logical
@@ -10,6 +10,9 @@ Bundler/DuplicatedGem:
10
10
  Bundler/OrderedGems:
11
11
  Enabled: true
12
12
 
13
+ GitHub/InsecureHashAlgorithm:
14
+ Enabled: true
15
+
13
16
  Layout/BlockAlignment:
14
17
  Enabled: true
15
18
 
@@ -163,7 +166,7 @@ Lint/RedundantSplatExpansion:
163
166
  Lint/UnreachableCode:
164
167
  Enabled: true
165
168
 
166
- Lint/UselessComparison:
169
+ Lint/BinaryOperatorWithIdenticalOperands:
167
170
  Enabled: true
168
171
 
169
172
  Lint/UselessSetterCall:
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "rubocop/cop/github/insecure_hash_algorithm"
3
4
  require "rubocop/cop/github/rails_application_record"
4
5
  require "rubocop/cop/github/rails_controller_render_action_symbol"
5
6
  require "rubocop/cop/github/rails_controller_render_literal"
@@ -0,0 +1,139 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rubocop"
4
+
5
+ module RuboCop
6
+ module Cop
7
+ module GitHub
8
+ class InsecureHashAlgorithm < Cop
9
+ MSG = "This hash function is not allowed"
10
+ UUID_V3_MSG = "uuid_v3 uses MD5, which is not allowed"
11
+ UUID_V5_MSG = "uuid_v5 uses SHA1, which is not allowed"
12
+
13
+ # Matches constants like these:
14
+ # Digest::MD5
15
+ # OpenSSL::Digest::MD5
16
+ def_node_matcher :insecure_const?, <<-PATTERN
17
+ (const (const _ :Digest) #insecure_algorithm?)
18
+ PATTERN
19
+
20
+ # Matches calls like these:
21
+ # Digest.new('md5')
22
+ # Digest.hexdigest('md5', 'str')
23
+ # OpenSSL::Digest.new('md5')
24
+ # OpenSSL::Digest.hexdigest('md5', 'str')
25
+ # OpenSSL::Digest::Digest.new('md5')
26
+ # OpenSSL::Digest::Digest.hexdigest('md5', 'str')
27
+ # OpenSSL::Digest::Digest.new(:MD5)
28
+ # OpenSSL::Digest::Digest.hexdigest(:MD5, 'str')
29
+ def_node_matcher :insecure_digest?, <<-PATTERN
30
+ (send
31
+ (const _ {:Digest :HMAC})
32
+ #not_just_encoding?
33
+ #insecure_algorithm?
34
+ ...)
35
+ PATTERN
36
+
37
+ # Matches calls like "Digest(:MD5)".
38
+ def_node_matcher :insecure_hash_lookup?, <<-PATTERN
39
+ (send _ :Digest #insecure_algorithm?)
40
+ PATTERN
41
+
42
+ # Matches calls like "OpenSSL::HMAC.new(secret, hash)"
43
+ def_node_matcher :openssl_hmac_new?, <<-PATTERN
44
+ (send (const (const _ :OpenSSL) :HMAC) :new ...)
45
+ PATTERN
46
+
47
+ # Matches calls like "OpenSSL::HMAC.new(secret, 'sha1')"
48
+ def_node_matcher :openssl_hmac_new_insecure?, <<-PATTERN
49
+ (send (const (const _ :OpenSSL) :HMAC) :new _ #insecure_algorithm?)
50
+ PATTERN
51
+
52
+ # Matches Rails's Digest::UUID.
53
+ def_node_matcher :digest_uuid?, <<-PATTERN
54
+ (const (const _ :Digest) :UUID)
55
+ PATTERN
56
+
57
+ def_node_matcher :uuid_v3?, <<-PATTERN
58
+ (send (const _ :UUID) :uuid_v3 ...)
59
+ PATTERN
60
+
61
+ def_node_matcher :uuid_v5?, <<-PATTERN
62
+ (send (const _ :UUID) :uuid_v5 ...)
63
+ PATTERN
64
+
65
+ def insecure_algorithm?(val)
66
+ return false if val == :Digest # Don't match "Digest::Digest".
67
+ case alg_name(val)
68
+ when *allowed_hash_functions
69
+ false
70
+ when Symbol
71
+ # can't figure this one out, it's nil or a var or const.
72
+ false
73
+ else
74
+ true
75
+ end
76
+ end
77
+
78
+ def not_just_encoding?(val)
79
+ !just_encoding?(val)
80
+ end
81
+
82
+ def just_encoding?(val)
83
+ val == :hexencode || val == :bubblebabble
84
+ end
85
+
86
+ # Built-in hash functions are listed in these docs:
87
+ # https://ruby-doc.org/stdlib-2.7.0/libdoc/digest/rdoc/Digest.html
88
+ # https://ruby-doc.org/stdlib-2.7.0/libdoc/openssl/rdoc/OpenSSL/Digest.html
89
+ DEFAULT_ALLOWED = %w[
90
+ SHA256
91
+ SHA384
92
+ SHA512
93
+ ].freeze
94
+
95
+ def allowed_hash_functions
96
+ @allowed_algorithms ||= cop_config.fetch("Allowed", DEFAULT_ALLOWED).map(&:downcase)
97
+ end
98
+
99
+ def alg_name(val)
100
+ return :nil if val.nil?
101
+ return val.to_s.downcase unless val.is_a?(RuboCop::AST::Node)
102
+ case val.type
103
+ when :sym, :str
104
+ val.children.first.to_s.downcase
105
+ else
106
+ val.type
107
+ end
108
+ end
109
+
110
+ def on_const(const_node)
111
+ if insecure_const?(const_node) && !digest_uuid?(const_node)
112
+ add_offense(const_node, message: MSG)
113
+ end
114
+ end
115
+
116
+ def on_send(send_node)
117
+ case
118
+ when uuid_v3?(send_node)
119
+ unless allowed_hash_functions.include?("md5")
120
+ add_offense(send_node, message: UUID_V3_MSG)
121
+ end
122
+ when uuid_v5?(send_node)
123
+ unless allowed_hash_functions.include?("sha1")
124
+ add_offense(send_node, message: UUID_V5_MSG)
125
+ end
126
+ when openssl_hmac_new?(send_node)
127
+ if openssl_hmac_new_insecure?(send_node)
128
+ add_offense(send_node, message: MSG)
129
+ end
130
+ when insecure_digest?(send_node)
131
+ add_offense(send_node, message: MSG)
132
+ when insecure_hash_lookup?(send_node)
133
+ add_offense(send_node, message: MSG)
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
@@ -9,11 +9,11 @@ module RuboCop
9
9
  MSG = "Prefer `render` with string instead of symbol"
10
10
 
11
11
  def_node_matcher :render_sym?, <<-PATTERN
12
- (send nil? :render $(sym _))
12
+ (send nil? {:render :render_to_string} $(sym _))
13
13
  PATTERN
14
14
 
15
15
  def_node_matcher :render_with_options?, <<-PATTERN
16
- (send nil? :render (hash $...))
16
+ (send nil? {:render :render_to_string} (hash $...))
17
17
  PATTERN
18
18
 
19
19
  def_node_matcher :action_key?, <<-PATTERN
@@ -1,36 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "rubocop"
4
+ require "rubocop/cop/github/render_literal_helpers"
4
5
 
5
6
  module RuboCop
6
7
  module Cop
7
8
  module GitHub
8
9
  class RailsControllerRenderLiteral < Cop
9
- MSG = "render must be used with a string literal or an instance of a Class"
10
-
11
- def_node_matcher :literal?, <<-PATTERN
12
- ({str sym true false nil?} ...)
13
- PATTERN
14
-
15
- def_node_matcher :render?, <<-PATTERN
16
- (send nil? :render ...)
17
- PATTERN
18
-
19
- def_node_matcher :render_literal?, <<-PATTERN
20
- (send nil? :render ({str sym} $_) $...)
21
- PATTERN
10
+ include RenderLiteralHelpers
22
11
 
23
- def_node_matcher :render_const?, <<-PATTERN
24
- (send nil? :render (const _ _) ...)
25
- PATTERN
26
-
27
- def_node_matcher :render_inst?, <<-PATTERN
28
- (send nil? :render (send _ :new ...) ...)
29
- PATTERN
30
-
31
- def_node_matcher :render_with_options?, <<-PATTERN
32
- (send nil? :render (hash $...))
33
- PATTERN
12
+ MSG = "render must be used with a string literal or an instance of a Class"
34
13
 
35
14
  def_node_matcher :ignore_key?, <<-PATTERN
36
15
  (pair (sym {
@@ -68,10 +47,16 @@ module RuboCop
68
47
  }) ...)
69
48
  PATTERN
70
49
 
50
+ def_node_matcher :render_const?, <<-PATTERN
51
+ (send nil? {:render :render_to_string} (const _ _) ...)
52
+ PATTERN
53
+
71
54
  def on_send(node)
72
55
  return unless render?(node)
73
56
 
74
- if render_literal?(node) || render_inst?(node) || render_const?(node)
57
+ return if render_view_component?(node) || render_const?(node)
58
+
59
+ if render_literal?(node)
75
60
  elsif option_pairs = render_with_options?(node)
76
61
  option_pairs = option_pairs.reject { |pair| options_key?(pair) }
77
62
 
@@ -82,18 +67,40 @@ module RuboCop
82
67
  if template_node = option_pairs.map { |pair| template_key?(pair) }.compact.first
83
68
  if !literal?(template_node)
84
69
  add_offense(node, location: :expression)
70
+ return
85
71
  end
86
72
  else
87
73
  add_offense(node, location: :expression)
74
+ return
88
75
  end
89
76
 
90
77
  if layout_node = option_pairs.map { |pair| layout_key?(pair) }.compact.first
91
78
  if !literal?(layout_node)
92
79
  add_offense(node, location: :expression)
80
+ return
93
81
  end
94
82
  end
95
83
  else
96
84
  add_offense(node, location: :expression)
85
+ return
86
+ end
87
+
88
+ if render_literal?(node)
89
+ option_hash = node.arguments[1]
90
+ if option_hash && !option_hash.hash_type?
91
+ add_offense(node, location: :expression)
92
+ return
93
+ end
94
+ option_pairs = option_hash && option_hash.pairs
95
+ else
96
+ option_pairs = node.arguments[0].pairs
97
+ end
98
+
99
+ if option_pairs
100
+ locals = option_pairs.map { |pair| locals_key?(pair) }.compact.first
101
+ if locals && (!locals.hash_type? || !hash_with_literal_keys?(locals))
102
+ add_offense(node, location: :expression)
103
+ end
97
104
  end
98
105
  end
99
106
  end
@@ -7,15 +7,15 @@ module RuboCop
7
7
  module GitHub
8
8
  class RailsControllerRenderPathsExist < Cop
9
9
  def_node_matcher :render?, <<-PATTERN
10
- (send nil? :render $...)
10
+ (send nil? {:render :render_to_string} $...)
11
11
  PATTERN
12
12
 
13
13
  def_node_matcher :render_str?, <<-PATTERN
14
- (send nil? :render $({str sym} $_) ...)
14
+ (send nil? {:render :render_to_string} $({str sym} $_) ...)
15
15
  PATTERN
16
16
 
17
17
  def_node_matcher :render_options?, <<-PATTERN
18
- (send nil? :render (hash $...))
18
+ (send nil? {:render :render_to_string} (hash $...))
19
19
  PATTERN
20
20
 
21
21
  def_node_matcher :render_key?, <<-PATTERN
@@ -9,7 +9,7 @@ module RuboCop
9
9
  MSG = "Prefer `render` template shorthand"
10
10
 
11
11
  def_node_matcher :render_with_options?, <<-PATTERN
12
- (send nil? :render (hash $...))
12
+ (send nil? {:render :render_to_string} (hash $...))
13
13
  PATTERN
14
14
 
15
15
  def_node_matcher :action_key?, <<-PATTERN
@@ -9,7 +9,7 @@ module RuboCop
9
9
  MSG = "Avoid `render inline:`"
10
10
 
11
11
  def_node_matcher :render_with_options?, <<-PATTERN
12
- (send nil? :render (hash $...))
12
+ (send nil? {:render :render_to_string} (hash $...))
13
13
  PATTERN
14
14
 
15
15
  def_node_matcher :inline_key?, <<-PATTERN
@@ -9,7 +9,7 @@ module RuboCop
9
9
  MSG = "Avoid `render object:`"
10
10
 
11
11
  def_node_matcher :render_with_options?, <<-PATTERN
12
- (send nil? :render (hash $...) ...)
12
+ (send nil? {:render :render_to_string} (hash $...) ...)
13
13
  PATTERN
14
14
 
15
15
  def_node_matcher :partial_key?, <<-PATTERN
@@ -1,36 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "rubocop"
4
+ require "rubocop/cop/github/render_literal_helpers"
4
5
 
5
6
  module RuboCop
6
7
  module Cop
7
8
  module GitHub
8
9
  class RailsViewRenderLiteral < Cop
9
- MSG = "render must be used with a string literal or an instance of a Class"
10
+ include RenderLiteralHelpers
10
11
 
11
- def_node_matcher :literal?, <<-PATTERN
12
- ({str sym true false nil?} ...)
13
- PATTERN
14
-
15
- def_node_matcher :render?, <<-PATTERN
16
- (send nil? :render $...)
17
- PATTERN
18
-
19
- def_node_matcher :render_literal?, <<-PATTERN
20
- (send nil? :render ({str sym} $_) $...)
21
- PATTERN
22
-
23
- def_node_matcher :render_inst?, <<-PATTERN
24
- (send nil? :render (send _ :new ...) ...)
25
- PATTERN
26
-
27
- def_node_matcher :render_collection?, <<-PATTERN
28
- (send nil? :render (send _ :with_collection ...) ...)
29
- PATTERN
30
-
31
- def_node_matcher :render_with_options?, <<-PATTERN
32
- (send nil? :render (hash $...) ...)
33
- PATTERN
12
+ MSG = "render must be used with a literal template and use literals for locals keys"
34
13
 
35
14
  def_node_matcher :ignore_key?, <<-PATTERN
36
15
  (pair (sym {
@@ -50,7 +29,10 @@ module RuboCop
50
29
  def on_send(node)
51
30
  return unless render?(node)
52
31
 
53
- if render_literal?(node) || render_inst?(node) || render_collection?(node)
32
+ # Ignore "component"-style renders
33
+ return if render_view_component?(node)
34
+
35
+ if render_literal?(node)
54
36
  elsif option_pairs = render_with_options?(node)
55
37
  if option_pairs.any? { |pair| ignore_key?(pair) }
56
38
  return
@@ -59,12 +41,31 @@ module RuboCop
59
41
  if partial_node = option_pairs.map { |pair| partial_key?(pair) }.compact.first
60
42
  if !literal?(partial_node)
61
43
  add_offense(node, location: :expression)
44
+ return
62
45
  end
63
46
  else
64
47
  add_offense(node, location: :expression)
48
+ return
65
49
  end
66
50
  else
67
51
  add_offense(node, location: :expression)
52
+ return
53
+ end
54
+
55
+ if render_literal?(node) && node.arguments.count > 1
56
+ locals = node.arguments[1]
57
+ elsif options_pairs = render_with_options?(node)
58
+ locals = option_pairs.map { |pair| locals_key?(pair) }.compact.first
59
+ end
60
+
61
+ if locals
62
+ if locals.hash_type?
63
+ if !hash_with_literal_keys?(locals)
64
+ add_offense(node, location: :expression)
65
+ end
66
+ else
67
+ add_offense(node, location: :expression)
68
+ end
68
69
  end
69
70
  end
70
71
  end
@@ -7,15 +7,15 @@ module RuboCop
7
7
  module GitHub
8
8
  class RailsViewRenderPathsExist < Cop
9
9
  def_node_matcher :render?, <<-PATTERN
10
- (send nil? :render $...)
10
+ (send nil? {:render :render_to_string} $...)
11
11
  PATTERN
12
12
 
13
13
  def_node_matcher :render_str?, <<-PATTERN
14
- (send nil? :render $(str $_) ...)
14
+ (send nil? {:render :render_to_string} $(str $_) ...)
15
15
  PATTERN
16
16
 
17
17
  def_node_matcher :render_options?, <<-PATTERN
18
- (send nil? :render (hash $...))
18
+ (send nil? {:render :render_to_string} (hash $...))
19
19
  PATTERN
20
20
 
21
21
  def_node_matcher :partial_key?, <<-PATTERN
@@ -9,7 +9,7 @@ module RuboCop
9
9
  MSG = "Prefer `render` partial shorthand"
10
10
 
11
11
  def_node_matcher :render_with_options?, <<-PATTERN
12
- (send nil? :render (hash $...))
12
+ (send nil? {:render :render_to_string} (hash $...))
13
13
  PATTERN
14
14
 
15
15
  def_node_matcher :partial_key?, <<-PATTERN
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+ #
3
+ require "rubocop"
4
+
5
+ module RuboCop
6
+ module Cop
7
+ module GitHub
8
+ module RenderLiteralHelpers
9
+ extend NodePattern::Macros
10
+
11
+ def_node_matcher :literal?, <<-PATTERN
12
+ ({str sym true false nil?} ...)
13
+ PATTERN
14
+
15
+ def_node_matcher :render?, <<-PATTERN
16
+ (send nil? {:render :render_to_string} ...)
17
+ PATTERN
18
+
19
+ def_node_matcher :render_literal?, <<-PATTERN
20
+ (send nil? {:render :render_to_string} ({str sym} $_) $...)
21
+ PATTERN
22
+
23
+ def_node_matcher :render_inst?, <<-PATTERN
24
+ (send nil? {:render :render_to_string} (send _ :new ...) ...)
25
+ PATTERN
26
+
27
+ def_node_matcher :render_with_options?, <<-PATTERN
28
+ (send nil? {:render :render_to_string} (hash $...) ...)
29
+ PATTERN
30
+
31
+ def_node_matcher :render_view_component_instance?, <<-PATTERN
32
+ (send nil? {:render :render_to_string} (send _ :new ...) ...)
33
+ PATTERN
34
+
35
+ def_node_matcher :render_view_component_collection?, <<-PATTERN
36
+ (send nil? {:render :render_to_string} (send _ :with_collection ...) ...)
37
+ PATTERN
38
+
39
+ def_node_matcher :locals_key?, <<-PATTERN
40
+ (pair (sym :locals) $_)
41
+ PATTERN
42
+
43
+ def hash_with_literal_keys?(hash)
44
+ hash.pairs.all? { |pair| literal?(pair.key) }
45
+ end
46
+
47
+ def render_view_component?(node)
48
+ render_view_component_instance?(node) ||
49
+ render_view_component_collection?(node)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-github
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.0
4
+ version: 0.16.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-21 00:00:00.000000000 Z
11
+ date: 2021-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "<="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.82.0
19
+ version: 1.6.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "<="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.82.0
26
+ version: 1.6.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rubocop-performance
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - "<="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.0'
33
+ version: 1.7.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - "<="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.0'
40
+ version: 1.7.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rubocop-rails
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - "<="
46
46
  - !ruby/object:Gem::Version
47
- version: '2.0'
47
+ version: 2.7.1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - "<="
53
53
  - !ruby/object:Gem::Version
54
- version: '2.0'
54
+ version: 2.7.1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: actionview
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '5.10'
75
+ version: '5.14'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '5.10'
82
+ version: '5.14'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -115,6 +115,7 @@ files:
115
115
  - guides/rails-render-inline.md
116
116
  - guides/rails-render-literal.md
117
117
  - lib/rubocop/cop/github.rb
118
+ - lib/rubocop/cop/github/insecure_hash_algorithm.rb
118
119
  - lib/rubocop/cop/github/rails_application_record.rb
119
120
  - lib/rubocop/cop/github/rails_controller_render_action_symbol.rb
120
121
  - lib/rubocop/cop/github/rails_controller_render_literal.rb
@@ -125,11 +126,12 @@ files:
125
126
  - lib/rubocop/cop/github/rails_view_render_literal.rb
126
127
  - lib/rubocop/cop/github/rails_view_render_paths_exist.rb
127
128
  - lib/rubocop/cop/github/rails_view_render_shorthand.rb
129
+ - lib/rubocop/cop/github/render_literal_helpers.rb
128
130
  homepage: https://github.com/github/rubocop-github
129
131
  licenses:
130
132
  - MIT
131
133
  metadata: {}
132
- post_install_message:
134
+ post_install_message:
133
135
  rdoc_options: []
134
136
  require_paths:
135
137
  - lib
@@ -137,15 +139,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
137
139
  requirements:
138
140
  - - ">="
139
141
  - !ruby/object:Gem::Version
140
- version: 2.1.0
142
+ version: 2.5.0
141
143
  required_rubygems_version: !ruby/object:Gem::Requirement
142
144
  requirements:
143
145
  - - ">="
144
146
  - !ruby/object:Gem::Version
145
147
  version: '0'
146
148
  requirements: []
147
- rubygems_version: 3.1.2
148
- signing_key:
149
+ rubygems_version: 3.1.4
150
+ signing_key:
149
151
  specification_version: 4
150
152
  summary: RuboCop GitHub
151
153
  test_files: []