rubocop-sorbet 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/config/default.yml +3 -0
- data/lib/rubocop/cop/sorbet/binding_constants_without_type_alias.rb +21 -2
- data/lib/rubocop/cop/sorbet/sigils/enforce_sigil_order.rb +105 -0
- data/lib/rubocop/cop/sorbet/{allow_incompatible_override.rb → signatures/allow_incompatible_override.rb} +0 -0
- data/lib/rubocop/cop/sorbet/{checked_true_in_signature.rb → signatures/checked_true_in_signature.rb} +3 -8
- data/lib/rubocop/cop/sorbet/signatures/enforce_signatures.rb +135 -0
- data/lib/rubocop/cop/sorbet/{keyword_argument_ordering.rb → signatures/keyword_argument_ordering.rb} +4 -9
- data/lib/rubocop/cop/sorbet/{parameters_ordering_in_signature.rb → signatures/parameters_ordering_in_signature.rb} +3 -8
- data/lib/rubocop/cop/sorbet/{signature_build_order.rb → signatures/signature_build_order.rb} +3 -8
- data/lib/rubocop/cop/sorbet/signatures/signature_cop.rb +28 -0
- data/lib/rubocop_sorbet.rb +8 -5
- data/rubocop-sorbet.gemspec +1 -1
- metadata +10 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 680171335e42d9f614626c06b286af906fbd4a71473ad36a5133e343ca202376
|
4
|
+
data.tar.gz: c84b1f2a66e5f2406640d5c2543f5a936b61b25141a8136a1cdf94f36f6af2cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c93471fa6670ce5c257fa7604bf9755bd910baffcfed62348f22dcb9242868ec42c9738f2b507317340085b22ada30140e3ad618408a5563fd00d449d4a8e81
|
7
|
+
data.tar.gz: e105b484e8b8e75177e126e8dd3b682514a4deb4f9135ace3e97ca49d4f9dcd54dc23800676cb48386faabe7a779deca53335f01affdc981351d11647cbed47c
|
data/Gemfile.lock
CHANGED
data/config/default.yml
CHANGED
@@ -14,13 +14,22 @@ module RuboCop
|
|
14
14
|
# FooOrBar = T.any(Foo, Bar)
|
15
15
|
#
|
16
16
|
# # good
|
17
|
-
# FooOrBar = T.type_alias
|
17
|
+
# FooOrBar = T.type_alias { T.any(Foo, Bar) }
|
18
18
|
class BindingConstantWithoutTypeAlias < RuboCop::Cop::Cop
|
19
19
|
def_node_matcher(:binding_unaliased_type?, <<-PATTERN)
|
20
20
|
(casgn _ _ [#not_nil? #not_t_let? #method_needing_aliasing_on_t?])
|
21
21
|
PATTERN
|
22
22
|
|
23
23
|
def_node_matcher(:using_type_alias?, <<-PATTERN)
|
24
|
+
(block
|
25
|
+
(send
|
26
|
+
(const nil? :T) :type_alias)
|
27
|
+
_
|
28
|
+
_
|
29
|
+
)
|
30
|
+
PATTERN
|
31
|
+
|
32
|
+
def_node_matcher(:using_deprecated_type_alias_syntax?, <<-PATTERN)
|
24
33
|
(
|
25
34
|
send
|
26
35
|
(const nil? :T)
|
@@ -58,6 +67,16 @@ module RuboCop
|
|
58
67
|
|
59
68
|
def on_casgn(node)
|
60
69
|
return unless binding_unaliased_type?(node) && !using_type_alias?(node.children[2])
|
70
|
+
if using_deprecated_type_alias_syntax?(node.children[2])
|
71
|
+
add_offense(
|
72
|
+
node.children[2],
|
73
|
+
message: "It looks like you're using the old `T.type_alias` syntax. " \
|
74
|
+
'`T.type_alias` now expects a block.' \
|
75
|
+
'Run Sorbet with the options "--autocorrect --error-white-list=5043" ' \
|
76
|
+
'to automatically upgrade to the new syntax.'
|
77
|
+
)
|
78
|
+
return
|
79
|
+
end
|
61
80
|
add_offense(
|
62
81
|
node.children[2],
|
63
82
|
message: "It looks like you're trying to bind a type to a constant. " \
|
@@ -69,7 +88,7 @@ module RuboCop
|
|
69
88
|
lambda do |corrector|
|
70
89
|
corrector.replace(
|
71
90
|
node.source_range,
|
72
|
-
"T.type_alias
|
91
|
+
"T.type_alias { #{node.source} }"
|
73
92
|
)
|
74
93
|
end
|
75
94
|
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rubocop'
|
4
|
+
|
5
|
+
module RuboCop
|
6
|
+
module Cop
|
7
|
+
module Sorbet
|
8
|
+
# This cop checks that the Sorbet sigil comes as the first magic comment in the file.
|
9
|
+
#
|
10
|
+
# The expected order for magic comments is: typed, (en)?coding, warn_indent then frozen_string_literal.
|
11
|
+
#
|
12
|
+
# For example, the following bad ordering:
|
13
|
+
#
|
14
|
+
# ```ruby
|
15
|
+
# # frozen_string_literal: true
|
16
|
+
# # typed: true
|
17
|
+
# class Foo; end
|
18
|
+
# ```
|
19
|
+
#
|
20
|
+
# Will be corrected as:
|
21
|
+
#
|
22
|
+
# ```ruby
|
23
|
+
# # typed: true
|
24
|
+
# # frozen_string_literal: true
|
25
|
+
# class Foo; end
|
26
|
+
# ```
|
27
|
+
#
|
28
|
+
# Only `typed`, `(en)?coding`, `warn_indent` and `frozen_string_literal` magic comments are considered,
|
29
|
+
# other comments or magic comments are left in the same place.
|
30
|
+
class EnforceSigilOrder < ValidSigil
|
31
|
+
def investigate(processed_source)
|
32
|
+
return if processed_source.tokens.empty?
|
33
|
+
|
34
|
+
tokens = extract_magic_comments(processed_source)
|
35
|
+
return if tokens.empty?
|
36
|
+
|
37
|
+
check_magic_comments_order(tokens)
|
38
|
+
end
|
39
|
+
|
40
|
+
def autocorrect(_node)
|
41
|
+
lambda do |corrector|
|
42
|
+
tokens = extract_magic_comments(processed_source)
|
43
|
+
|
44
|
+
# Get the magic comments tokens in their expected order
|
45
|
+
expected = PREFERRED_ORDER.keys.map do |re|
|
46
|
+
tokens.select { |token| re.match?(token.text) }
|
47
|
+
end.flatten
|
48
|
+
|
49
|
+
tokens.each_with_index do |token, index|
|
50
|
+
corrector.replace(token.pos, expected[index].text)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
protected
|
56
|
+
|
57
|
+
CODING_REGEX = /#\s+(en)?coding:(?:\s+([\w]+))?/
|
58
|
+
INDENT_REGEX = /#\s+warn_indent:(?:\s+([\w]+))?/
|
59
|
+
FROZEN_REGEX = /#\s+frozen_string_literal:(?:\s+([\w]+))?/
|
60
|
+
|
61
|
+
PREFERRED_ORDER = {
|
62
|
+
SIGIL_REGEX => 'typed',
|
63
|
+
CODING_REGEX => 'encoding',
|
64
|
+
INDENT_REGEX => 'warn_indent',
|
65
|
+
FROZEN_REGEX => 'frozen_string_literal',
|
66
|
+
}.freeze
|
67
|
+
|
68
|
+
MAGIC_REGEX = Regexp.union(*PREFERRED_ORDER.keys)
|
69
|
+
|
70
|
+
# extraction
|
71
|
+
|
72
|
+
# Get all the tokens in `processed_source` that match `MAGIC_REGEX`
|
73
|
+
def extract_magic_comments(processed_source)
|
74
|
+
processed_source.tokens
|
75
|
+
.take_while { |token| token.type == :tCOMMENT }
|
76
|
+
.select { |token| MAGIC_REGEX.match?(token.text) }
|
77
|
+
end
|
78
|
+
|
79
|
+
# checks
|
80
|
+
|
81
|
+
def check_magic_comments_order(tokens)
|
82
|
+
# Get the current magic comments order
|
83
|
+
order = tokens.map do |token|
|
84
|
+
PREFERRED_ORDER.keys.find { |re| re.match?(token.text) }
|
85
|
+
end.compact.uniq
|
86
|
+
|
87
|
+
# Get the expected magic comments order based on the one used in the actual source
|
88
|
+
expected = PREFERRED_ORDER.keys.select do |re|
|
89
|
+
tokens.any? { |token| re.match?(token.text) }
|
90
|
+
end.uniq
|
91
|
+
|
92
|
+
if order != expected
|
93
|
+
tokens.each do |token|
|
94
|
+
add_offense(
|
95
|
+
token,
|
96
|
+
location: token.pos,
|
97
|
+
message: "Magic comments should be in the following order: #{PREFERRED_ORDER.values.join(', ')}."
|
98
|
+
)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
File without changes
|
data/lib/rubocop/cop/sorbet/{checked_true_in_signature.rb → signatures/checked_true_in_signature.rb}
RENAMED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rubocop'
|
4
|
+
require_relative 'signature_cop'
|
4
5
|
|
5
6
|
module RuboCop
|
6
7
|
module Cop
|
@@ -18,13 +19,9 @@ module RuboCop
|
|
18
19
|
#
|
19
20
|
# # good
|
20
21
|
# sig { void }
|
21
|
-
class CheckedTrueInSignature <
|
22
|
+
class CheckedTrueInSignature < SignatureCop
|
22
23
|
include(RuboCop::Cop::RangeHelp)
|
23
24
|
|
24
|
-
def_node_matcher(:signature?, <<~PATTERN)
|
25
|
-
(block (send nil? :sig) (args) ...)
|
26
|
-
PATTERN
|
27
|
-
|
28
25
|
def_node_search(:offending_node, <<~PATTERN)
|
29
26
|
(send _ :checked (true))
|
30
27
|
PATTERN
|
@@ -36,9 +33,7 @@ module RuboCop
|
|
36
33
|
'`include(WaffleCone::RuntimeChecks)` to this module and set other methods to `checked(false)`.'
|
37
34
|
private_constant(:MESSAGE)
|
38
35
|
|
39
|
-
def
|
40
|
-
return unless signature?(node)
|
41
|
-
|
36
|
+
def on_signature(node)
|
42
37
|
error = offending_node(node).first
|
43
38
|
return unless error
|
44
39
|
|
@@ -0,0 +1,135 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rubocop'
|
4
|
+
require 'stringio'
|
5
|
+
require_relative 'signature_cop'
|
6
|
+
|
7
|
+
module RuboCop
|
8
|
+
module Cop
|
9
|
+
module Sorbet
|
10
|
+
# This cop checks that every method definition and attribute accessor has a Sorbet signature.
|
11
|
+
#
|
12
|
+
# It also suggest an autocorrect with placeholders so the following code:
|
13
|
+
#
|
14
|
+
# ```
|
15
|
+
# def foo(a, b, c); end
|
16
|
+
# ```
|
17
|
+
#
|
18
|
+
# Will be corrected as:
|
19
|
+
#
|
20
|
+
# ```
|
21
|
+
# sig { params(a: T.untyped, b: T.untyped, c: T.untyped).returns(T.untyped)
|
22
|
+
# def foo(a, b, c); end
|
23
|
+
# ```
|
24
|
+
#
|
25
|
+
# You can configure the placeholders used by changing the following options:
|
26
|
+
#
|
27
|
+
# * `ParameterTypePlaceholder`: placeholders used for parameter types (default: 'T.untyped')
|
28
|
+
# * `ReturnTypePlaceholder`: placeholders used for return types (default: 'T.untyped')
|
29
|
+
class EnforceSignatures < SignatureCop
|
30
|
+
def_node_matcher(:accessor?, <<-PATTERN)
|
31
|
+
(send nil? {:attr_reader :attr_writer :attr_accessor} ...)
|
32
|
+
PATTERN
|
33
|
+
|
34
|
+
def on_def(node)
|
35
|
+
check_node(node)
|
36
|
+
end
|
37
|
+
|
38
|
+
def on_defs(node)
|
39
|
+
check_node(node)
|
40
|
+
end
|
41
|
+
|
42
|
+
def on_send(node)
|
43
|
+
return unless accessor?(node)
|
44
|
+
check_node(node)
|
45
|
+
end
|
46
|
+
|
47
|
+
def autocorrect(node)
|
48
|
+
lambda do |corrector|
|
49
|
+
suggest = SigSuggestion.new(node.loc.column, param_type_placeholder, return_type_placeholder)
|
50
|
+
|
51
|
+
if node.is_a?(RuboCop::AST::DefNode) # def something
|
52
|
+
node.arguments.each do |arg|
|
53
|
+
suggest.params << arg.children.first
|
54
|
+
end
|
55
|
+
elsif accessor?(node) # attr reader, writer, accessor
|
56
|
+
method = node.children[1]
|
57
|
+
symbol = node.children[2]
|
58
|
+
suggest.params << symbol.value if symbol && (method == :attr_writer || method == :attr_accessor)
|
59
|
+
suggest.returns = 'void' if method == :attr_writer
|
60
|
+
end
|
61
|
+
|
62
|
+
corrector.insert_before(node.loc.expression, suggest.to_autocorrect)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def check_node(node)
|
69
|
+
prev = previous_node(node)
|
70
|
+
unless signature?(prev)
|
71
|
+
add_offense(
|
72
|
+
node,
|
73
|
+
message: "Each method is required to have a signature."
|
74
|
+
)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def previous_node(node)
|
79
|
+
parent = node.parent
|
80
|
+
return nil unless parent
|
81
|
+
parent.children[node.sibling_index - 1]
|
82
|
+
end
|
83
|
+
|
84
|
+
def param_type_placeholder
|
85
|
+
cop_config['ParameterTypePlaceholder'] || 'T.untyped'
|
86
|
+
end
|
87
|
+
|
88
|
+
def return_type_placeholder
|
89
|
+
cop_config['ReturnTypePlaceholder'] || 'T.untyped'
|
90
|
+
end
|
91
|
+
|
92
|
+
class SigSuggestion
|
93
|
+
attr_accessor :params, :returns
|
94
|
+
|
95
|
+
def initialize(indent, param_placeholder, return_placeholder)
|
96
|
+
@params = []
|
97
|
+
@returns = nil
|
98
|
+
@indent = indent
|
99
|
+
@param_placeholder = param_placeholder
|
100
|
+
@return_placeholder = return_placeholder
|
101
|
+
end
|
102
|
+
|
103
|
+
def to_autocorrect
|
104
|
+
out = StringIO.new
|
105
|
+
out << 'sig { '
|
106
|
+
out << generate_params
|
107
|
+
out << generate_return
|
108
|
+
out << " }\n"
|
109
|
+
out << ' ' * @indent # preserve indent for the next line
|
110
|
+
out.string
|
111
|
+
end
|
112
|
+
|
113
|
+
private
|
114
|
+
|
115
|
+
def generate_params
|
116
|
+
return if @params.empty?
|
117
|
+
out = StringIO.new
|
118
|
+
out << 'params('
|
119
|
+
out << @params.map do |param|
|
120
|
+
"#{param}: #{@param_placeholder}"
|
121
|
+
end.join(", ")
|
122
|
+
out << ').'
|
123
|
+
out.string
|
124
|
+
end
|
125
|
+
|
126
|
+
def generate_return
|
127
|
+
return "returns(#{@return_placeholder})" if @returns.nil?
|
128
|
+
return @returns if @returns == 'void'
|
129
|
+
"returns(#{@returns})"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
data/lib/rubocop/cop/sorbet/{keyword_argument_ordering.rb → signatures/keyword_argument_ordering.rb}
RENAMED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rubocop'
|
4
|
+
require_relative 'signature_cop'
|
4
5
|
|
5
6
|
module RuboCop
|
6
7
|
module Cop
|
@@ -19,14 +20,8 @@ module RuboCop
|
|
19
20
|
# # good
|
20
21
|
# sig { params(b: String, a: Integer).void }
|
21
22
|
# def foo(b:, a: 1); end
|
22
|
-
class KeywordArgumentOrdering <
|
23
|
-
|
24
|
-
(block (send nil? :sig) (args) ...)
|
25
|
-
PATTERN
|
26
|
-
|
27
|
-
def on_block(node)
|
28
|
-
return unless signature?(node)
|
29
|
-
|
23
|
+
class KeywordArgumentOrdering < SignatureCop
|
24
|
+
def on_signature(node)
|
30
25
|
method_node = node.parent.children[node.sibling_index + 1]
|
31
26
|
return if method_node.nil?
|
32
27
|
method_parameters = method_node.arguments
|
@@ -40,7 +35,7 @@ module RuboCop
|
|
40
35
|
out_of_kwoptarg = false
|
41
36
|
|
42
37
|
parameters.reverse.each do |param|
|
43
|
-
out_of_kwoptarg = true unless param.type == :kwoptarg || param.type == :blockarg
|
38
|
+
out_of_kwoptarg = true unless param.type == :kwoptarg || param.type == :blockarg || param.type == :kwrestarg
|
44
39
|
|
45
40
|
next unless param.type == :kwoptarg && out_of_kwoptarg
|
46
41
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rubocop'
|
4
|
+
require_relative 'signature_cop'
|
4
5
|
|
5
6
|
module RuboCop
|
6
7
|
module Cop
|
@@ -18,18 +19,12 @@ module RuboCop
|
|
18
19
|
# # good
|
19
20
|
# sig { params(a: Integer, b: String).void }
|
20
21
|
# def foo(a:, b:); end
|
21
|
-
class ParametersOrderingInSignature <
|
22
|
-
def_node_matcher(:signature?, <<-PATTERN)
|
23
|
-
(block (send nil? :sig) (args) ...)
|
24
|
-
PATTERN
|
25
|
-
|
22
|
+
class ParametersOrderingInSignature < SignatureCop
|
26
23
|
def_node_search(:signature_params, <<-PATTERN)
|
27
24
|
(send _ :params ...)
|
28
25
|
PATTERN
|
29
26
|
|
30
|
-
def
|
31
|
-
return unless signature?(node)
|
32
|
-
|
27
|
+
def on_signature(node)
|
33
28
|
sig_params = signature_params(node).first
|
34
29
|
sig_params_order =
|
35
30
|
if sig_params.nil?
|
data/lib/rubocop/cop/sorbet/{signature_build_order.rb → signatures/signature_build_order.rb}
RENAMED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rubocop'
|
4
|
+
require_relative 'signature_cop'
|
4
5
|
|
5
6
|
begin
|
6
7
|
require 'unparser'
|
@@ -11,7 +12,7 @@ end
|
|
11
12
|
module RuboCop
|
12
13
|
module Cop
|
13
14
|
module Sorbet
|
14
|
-
class SignatureBuildOrder <
|
15
|
+
class SignatureBuildOrder < SignatureCop
|
15
16
|
ORDER =
|
16
17
|
[
|
17
18
|
:type_parameters,
|
@@ -27,17 +28,11 @@ module RuboCop
|
|
27
28
|
:on_failure,
|
28
29
|
].each_with_index.to_h.freeze
|
29
30
|
|
30
|
-
def_node_matcher(:signature?, <<~PATTERN)
|
31
|
-
(block (send nil? :sig) (args) ...)
|
32
|
-
PATTERN
|
33
|
-
|
34
31
|
def_node_search(:root_call, <<~PATTERN)
|
35
32
|
(send nil? {#{ORDER.keys.map(&:inspect).join(' ')}} ...)
|
36
33
|
PATTERN
|
37
34
|
|
38
|
-
def
|
39
|
-
return unless signature?(node)
|
40
|
-
|
35
|
+
def on_signature(node)
|
41
36
|
calls = call_chain(node.children[2]).map(&:method_name)
|
42
37
|
return unless calls.any?
|
43
38
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rubocop'
|
4
|
+
|
5
|
+
module RuboCop
|
6
|
+
module Cop
|
7
|
+
module Sorbet
|
8
|
+
# Abstract cop specific to Sorbet signatures
|
9
|
+
#
|
10
|
+
# You can subclass it to use the `on_signature` trigger and the `signature?` node matcher.
|
11
|
+
class SignatureCop < RuboCop::Cop::Cop
|
12
|
+
@registry = Cop.registry # So we can properly subclass this cop
|
13
|
+
|
14
|
+
def_node_matcher(:signature?, <<~PATTERN)
|
15
|
+
(block (send nil? :sig) (args) ...)
|
16
|
+
PATTERN
|
17
|
+
|
18
|
+
def on_block(node)
|
19
|
+
on_signature(node) if signature?(node)
|
20
|
+
end
|
21
|
+
|
22
|
+
def on_signature(_)
|
23
|
+
# To be defined in subclasses
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/rubocop_sorbet.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative 'rubocop/cop/sorbet/allow_incompatible_override'
|
4
3
|
require_relative 'rubocop/cop/sorbet/binding_constants_without_type_alias'
|
5
|
-
require_relative 'rubocop/cop/sorbet/checked_true_in_signature'
|
6
4
|
require_relative 'rubocop/cop/sorbet/constants_from_strings'
|
7
|
-
require_relative 'rubocop/cop/sorbet/signature_build_order'
|
8
5
|
require_relative 'rubocop/cop/sorbet/forbid_superclass_const_literal'
|
9
6
|
require_relative 'rubocop/cop/sorbet/forbid_include_const_literal'
|
10
|
-
|
11
|
-
require_relative 'rubocop/cop/sorbet/
|
7
|
+
|
8
|
+
require_relative 'rubocop/cop/sorbet/signatures/allow_incompatible_override'
|
9
|
+
require_relative 'rubocop/cop/sorbet/signatures/checked_true_in_signature'
|
10
|
+
require_relative 'rubocop/cop/sorbet/signatures/keyword_argument_ordering'
|
11
|
+
require_relative 'rubocop/cop/sorbet/signatures/parameters_ordering_in_signature'
|
12
|
+
require_relative 'rubocop/cop/sorbet/signatures/signature_build_order'
|
13
|
+
require_relative 'rubocop/cop/sorbet/signatures/enforce_signatures'
|
12
14
|
|
13
15
|
require_relative 'rubocop/cop/sorbet/sigils/valid_sigil'
|
14
16
|
require_relative 'rubocop/cop/sorbet/sigils/has_sigil'
|
@@ -17,3 +19,4 @@ require_relative 'rubocop/cop/sorbet/sigils/false_sigil'
|
|
17
19
|
require_relative 'rubocop/cop/sorbet/sigils/true_sigil'
|
18
20
|
require_relative 'rubocop/cop/sorbet/sigils/strict_sigil'
|
19
21
|
require_relative 'rubocop/cop/sorbet/sigils/strong_sigil'
|
22
|
+
require_relative 'rubocop/cop/sorbet/sigils/enforce_sigil_order'
|
data/rubocop-sorbet.gemspec
CHANGED
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'rubocop-sorbet'
|
8
|
-
spec.version = '0.3.
|
8
|
+
spec.version = '0.3.4'
|
9
9
|
spec.authors = ['Ufuk Kayserilioglu', 'Alan Wu', 'Alexandre Terrasa', 'Peter Zhu']
|
10
10
|
spec.email = ['ruby@shopify.com']
|
11
11
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-sorbet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ufuk Kayserilioglu
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date: 2019-
|
14
|
+
date: 2019-12-02 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rspec
|
@@ -80,14 +80,11 @@ files:
|
|
80
80
|
- config/default.yml
|
81
81
|
- dev.yml
|
82
82
|
- lib/rubocop-sorbet.rb
|
83
|
-
- lib/rubocop/cop/sorbet/allow_incompatible_override.rb
|
84
83
|
- lib/rubocop/cop/sorbet/binding_constants_without_type_alias.rb
|
85
|
-
- lib/rubocop/cop/sorbet/checked_true_in_signature.rb
|
86
84
|
- lib/rubocop/cop/sorbet/constants_from_strings.rb
|
87
85
|
- lib/rubocop/cop/sorbet/forbid_include_const_literal.rb
|
88
86
|
- lib/rubocop/cop/sorbet/forbid_superclass_const_literal.rb
|
89
|
-
- lib/rubocop/cop/sorbet/
|
90
|
-
- lib/rubocop/cop/sorbet/parameters_ordering_in_signature.rb
|
87
|
+
- lib/rubocop/cop/sorbet/sigils/enforce_sigil_order.rb
|
91
88
|
- lib/rubocop/cop/sorbet/sigils/false_sigil.rb
|
92
89
|
- lib/rubocop/cop/sorbet/sigils/has_sigil.rb
|
93
90
|
- lib/rubocop/cop/sorbet/sigils/ignore_sigil.rb
|
@@ -95,7 +92,13 @@ files:
|
|
95
92
|
- lib/rubocop/cop/sorbet/sigils/strong_sigil.rb
|
96
93
|
- lib/rubocop/cop/sorbet/sigils/true_sigil.rb
|
97
94
|
- lib/rubocop/cop/sorbet/sigils/valid_sigil.rb
|
98
|
-
- lib/rubocop/cop/sorbet/
|
95
|
+
- lib/rubocop/cop/sorbet/signatures/allow_incompatible_override.rb
|
96
|
+
- lib/rubocop/cop/sorbet/signatures/checked_true_in_signature.rb
|
97
|
+
- lib/rubocop/cop/sorbet/signatures/enforce_signatures.rb
|
98
|
+
- lib/rubocop/cop/sorbet/signatures/keyword_argument_ordering.rb
|
99
|
+
- lib/rubocop/cop/sorbet/signatures/parameters_ordering_in_signature.rb
|
100
|
+
- lib/rubocop/cop/sorbet/signatures/signature_build_order.rb
|
101
|
+
- lib/rubocop/cop/sorbet/signatures/signature_cop.rb
|
99
102
|
- lib/rubocop_sorbet.rb
|
100
103
|
- rubocop-sorbet.gemspec
|
101
104
|
- service.yml
|