steep 1.1.1 → 1.2.0.pre.1
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/CHANGELOG.md +20 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +12 -11
- data/Gemfile.steep +1 -1
- data/Gemfile.steep.lock +9 -9
- data/README.md +3 -3
- data/Steepfile +23 -0
- data/bin/steep-prof +2 -1
- data/lib/steep/annotation_parser.rb +1 -1
- data/lib/steep/ast/types/class.rb +4 -0
- data/lib/steep/ast/types/factory.rb +86 -602
- data/lib/steep/ast/types/instance.rb +4 -0
- data/lib/steep/ast/types/literal.rb +1 -1
- data/lib/steep/ast/types/proc.rb +22 -8
- data/lib/steep/ast/types/self.rb +4 -0
- data/lib/steep/ast/types/union.rb +1 -1
- data/lib/steep/cli.rb +24 -1
- data/lib/steep/diagnostic/ruby.rb +17 -22
- data/lib/steep/drivers/checkfile.rb +205 -0
- data/lib/steep/drivers/validate.rb +3 -1
- data/lib/steep/equatable.rb +2 -0
- data/lib/steep/interface/block.rb +21 -11
- data/lib/steep/interface/builder.rb +756 -0
- data/lib/steep/interface/function.rb +32 -24
- data/lib/steep/interface/method_type.rb +191 -78
- data/lib/steep/interface/shape.rb +132 -0
- data/lib/steep/interface/substitution.rb +23 -12
- data/lib/steep/interface/type_param.rb +1 -2
- data/lib/steep/path_helper.rb +1 -1
- data/lib/steep/project.rb +5 -7
- data/lib/steep/server/base_worker.rb +2 -2
- data/lib/steep/server/change_buffer.rb +4 -3
- data/lib/steep/server/interaction_worker.rb +1 -1
- data/lib/steep/server/master.rb +69 -9
- data/lib/steep/server/type_check_worker.rb +13 -11
- data/lib/steep/server/worker_process.rb +9 -7
- data/lib/steep/services/completion_provider.rb +15 -3
- data/lib/steep/services/hover_provider/singleton_methods.rb +5 -6
- data/lib/steep/services/signature_service.rb +13 -8
- data/lib/steep/services/type_check_service.rb +2 -0
- data/lib/steep/signature/validator.rb +1 -1
- data/lib/steep/subtyping/check.rb +154 -103
- data/lib/steep/subtyping/relation.rb +3 -3
- data/lib/steep/subtyping/result.rb +20 -2
- data/lib/steep/subtyping/variable_variance.rb +9 -0
- data/lib/steep/type_construction.rb +558 -299
- data/lib/steep/type_inference/block_params.rb +169 -86
- data/lib/steep/type_inference/logic_type_interpreter.rb +9 -14
- data/lib/steep/type_inference/method_params.rb +12 -7
- data/lib/steep/type_inference/send_args.rb +41 -35
- data/lib/steep/type_inference/type_env_builder.rb +1 -1
- data/lib/steep/version.rb +1 -1
- data/lib/steep.rb +71 -2
- data/rbs_collection.steep.lock.yaml +18 -30
- data/rbs_collection.steep.yaml +1 -0
- data/sig/shims/language-server_protocol.rbs +20 -0
- data/sig/shims/tagged_logging.rbs +6 -0
- data/sig/steep/ast/annotation/collection.rbs +6 -6
- data/sig/steep/ast/types/class.rbs +3 -0
- data/sig/steep/ast/types/factory.rbs +38 -32
- data/sig/steep/ast/types/instance.rbs +3 -0
- data/sig/steep/ast/types/intersection.rbs +1 -1
- data/sig/steep/ast/types/literal.rbs +7 -7
- data/sig/steep/ast/types/name.rbs +14 -13
- data/sig/steep/ast/types/proc.rbs +3 -1
- data/sig/steep/ast/types/self.rbs +3 -0
- data/sig/steep/ast/types/var.rbs +1 -1
- data/sig/steep/diagnostic/ruby.rbs +30 -34
- data/sig/steep/drivers/annotations.rbs +17 -0
- data/sig/steep/drivers/check.rbs +33 -0
- data/sig/steep/drivers/checkfile.rbs +26 -0
- data/sig/steep/drivers/diagnostic_printer.rbs +25 -0
- data/sig/steep/drivers/init.rbs +19 -0
- data/sig/steep/drivers/langserver.rbs +35 -0
- data/sig/steep/drivers/print_project.rbs +15 -0
- data/sig/steep/drivers/stats.rbs +37 -0
- data/sig/steep/drivers/utils/driver_helper.rbs +23 -0
- data/sig/steep/drivers/utils/jobs_count.rbs +11 -0
- data/sig/steep/drivers/validate.rbs +15 -0
- data/sig/steep/drivers/vendor.rbs +19 -0
- data/sig/steep/drivers/watch.rbs +27 -0
- data/sig/steep/drivers/worker.rbs +31 -0
- data/sig/steep/equatable.rbs +11 -0
- data/sig/steep/index/rbs_index.rbs +91 -0
- data/sig/steep/index/signature_symbol_provider.rbs +29 -0
- data/sig/steep/index/source_index.rbs +63 -0
- data/sig/steep/interface/block.rbs +3 -1
- data/sig/steep/interface/builder.rbs +152 -0
- data/sig/steep/interface/function.rbs +67 -55
- data/sig/steep/interface/method_type.rbs +60 -12
- data/sig/steep/interface/shape.rbs +61 -0
- data/sig/steep/interface/substitution.rbs +18 -22
- data/sig/steep/interface/type_param.rbs +9 -1
- data/sig/steep/path_helper.rbs +7 -0
- data/sig/steep/project/pattern.rbs +10 -10
- data/sig/steep/project/target.rbs +2 -2
- data/sig/steep/project.rbs +15 -8
- data/sig/steep/server/base_worker.rbs +49 -0
- data/sig/steep/server/change_buffer.rbs +32 -0
- data/sig/steep/server/interaction_worker.rbs +41 -0
- data/sig/steep/server/lsp_formatter.rbs +29 -0
- data/sig/steep/server/master.rbs +260 -0
- data/sig/steep/server/type_check_worker.rbs +135 -0
- data/sig/steep/server/worker_process.rbs +29 -0
- data/sig/steep/services/completion_provider.rbs +5 -5
- data/sig/steep/services/content_change.rbs +14 -12
- data/sig/steep/services/file_loader.rbs +12 -4
- data/sig/steep/services/hover_provider/singleton_methods.rbs +1 -1
- data/sig/steep/services/path_assignment.rbs +7 -7
- data/sig/steep/services/signature_service.rbs +67 -40
- data/sig/steep/services/type_check_service.rbs +53 -39
- data/sig/steep/subtyping/check.rbs +80 -44
- data/sig/steep/subtyping/relation.rbs +24 -22
- data/sig/steep/subtyping/result.rbs +48 -30
- data/sig/steep/subtyping/variable_variance.rbs +2 -0
- data/sig/steep/type_construction.rbs +132 -23
- data/sig/steep/type_inference/block_params.rbs +120 -18
- data/sig/steep/type_inference/context.rbs +45 -20
- data/sig/steep/type_inference/context_array.rbs +37 -0
- data/sig/steep/type_inference/logic_type_interpreter.rbs +3 -1
- data/sig/steep/type_inference/method_params.rbs +13 -9
- data/sig/steep/type_inference/send_args.rbs +229 -0
- data/sig/steep/type_inference/type_env_builder.rbs +1 -1
- data/sig/steep/typing.rbs +4 -4
- data/sig/steep.rbs +4 -2
- data/smoke/block/e.rb +12 -0
- data/smoke/block/e.rbs +4 -0
- data/smoke/block/test_expectations.yml +12 -0
- data/smoke/regression/block_param_split.rb +7 -0
- data/smoke/regression/block_param_split.rbs +3 -0
- data/smoke/regression/empty_yield.rb +5 -0
- data/smoke/regression/empty_yield.rbs +3 -0
- data/smoke/regression/test_expectations.yml +12 -0
- data/smoke/yield/test_expectations.yml +4 -4
- data/steep.gemspec +2 -1
- metadata +61 -9
- data/lib/steep/interface/interface.rb +0 -34
- data/sig/steep/interface/interface.rbs +0 -23
- data/sig/version.rbs +0 -3
@@ -2,21 +2,28 @@ module Steep
|
|
2
2
|
module TypeInference
|
3
3
|
class Context
|
4
4
|
class MethodContext
|
5
|
-
attr_reader name:
|
5
|
+
attr_reader name: Symbol?
|
6
6
|
|
7
|
-
attr_reader method:
|
7
|
+
attr_reader method: RBS::Definition::Method?
|
8
8
|
|
9
|
-
attr_reader method_type:
|
9
|
+
attr_reader method_type: Interface::MethodType?
|
10
10
|
|
11
|
-
attr_reader return_type:
|
11
|
+
attr_reader return_type: AST::Types::t
|
12
12
|
|
13
|
-
attr_reader constructor:
|
13
|
+
attr_reader constructor: bool
|
14
14
|
|
15
|
-
attr_reader super_method:
|
15
|
+
attr_reader super_method: RBS::Definition::Method?
|
16
16
|
|
17
|
-
def initialize: (
|
17
|
+
def initialize: (
|
18
|
+
name: Symbol,
|
19
|
+
method: RBS::Definition::Method?,
|
20
|
+
method_type: Interface::MethodType?,
|
21
|
+
return_type: AST::Types::t,
|
22
|
+
constructor: bool,
|
23
|
+
super_method: RBS::Definition::Method?
|
24
|
+
) -> void
|
18
25
|
|
19
|
-
def block_type: () ->
|
26
|
+
def block_type: () -> Interface::Block?
|
20
27
|
end
|
21
28
|
|
22
29
|
class BlockContext
|
@@ -62,15 +69,33 @@ module Steep
|
|
62
69
|
|
63
70
|
attr_reader class_name: RBS::TypeName
|
64
71
|
|
65
|
-
attr_reader instance_definition: RBS::Definition
|
66
|
-
|
67
|
-
attr_reader module_definition: RBS::Definition
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
def
|
72
|
-
|
73
|
-
|
72
|
+
attr_reader instance_definition: RBS::Definition?
|
73
|
+
|
74
|
+
attr_reader module_definition: RBS::Definition?
|
75
|
+
|
76
|
+
@class_variables: Hash[Symbol, RBS::Types::t]?
|
77
|
+
|
78
|
+
def initialize: (
|
79
|
+
instance_type: AST::Types::t,
|
80
|
+
module_type: AST::Types::t,
|
81
|
+
implement_name: untyped,
|
82
|
+
class_name: RBS::TypeName,
|
83
|
+
nesting: RBS::Resolver::context,
|
84
|
+
?instance_definition: RBS::Definition?,
|
85
|
+
?module_definition: RBS::Definition?
|
86
|
+
) -> void
|
87
|
+
|
88
|
+
def class_variables: () -> Hash[Symbol, RBS::Types::t]?
|
89
|
+
|
90
|
+
def update: (
|
91
|
+
?instance_type: AST::Types::t,
|
92
|
+
?module_type: AST::Types::t,
|
93
|
+
?implement_name: untyped,
|
94
|
+
?class_name: RBS::TypeName,
|
95
|
+
?instance_definition: RBS::Definition?,
|
96
|
+
?module_definition: RBS::Definition?,
|
97
|
+
?nesting: RBS::Resolver::context
|
98
|
+
) -> ModuleContext
|
74
99
|
end
|
75
100
|
|
76
101
|
class TypeVariableContext
|
@@ -99,7 +124,7 @@ module Steep
|
|
99
124
|
|
100
125
|
attr_reader break_context: BreakContext?
|
101
126
|
|
102
|
-
attr_reader module_context:
|
127
|
+
attr_reader module_context: ModuleContext?
|
103
128
|
|
104
129
|
attr_reader self_type: AST::Types::t
|
105
130
|
|
@@ -111,7 +136,7 @@ module Steep
|
|
111
136
|
method_context: untyped,
|
112
137
|
block_context: BlockContext?,
|
113
138
|
break_context: BreakContext?,
|
114
|
-
module_context:
|
139
|
+
module_context: ModuleContext?,
|
115
140
|
self_type: untyped,
|
116
141
|
type_env: TypeEnv,
|
117
142
|
call_context: untyped,
|
@@ -122,7 +147,7 @@ module Steep
|
|
122
147
|
?method_context: untyped,
|
123
148
|
?block_context: BlockContext?,
|
124
149
|
?break_context: BreakContext?,
|
125
|
-
?module_context:
|
150
|
+
?module_context: ModuleContext?,
|
126
151
|
?self_type: untyped,
|
127
152
|
?type_env: TypeEnv,
|
128
153
|
?call_context: untyped,
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Steep
|
2
|
+
module TypeInference
|
3
|
+
class ContextArray
|
4
|
+
class Entry
|
5
|
+
attr_reader range: untyped
|
6
|
+
|
7
|
+
attr_reader context: untyped
|
8
|
+
|
9
|
+
attr_reader sub_entries: untyped
|
10
|
+
|
11
|
+
def initialize: (range: untyped, context: untyped) -> void
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_reader buffer: untyped
|
15
|
+
|
16
|
+
attr_reader root: untyped
|
17
|
+
|
18
|
+
def initialize: (buffer: untyped, context: untyped, ?range: untyped) -> void
|
19
|
+
|
20
|
+
def range: () -> untyped
|
21
|
+
|
22
|
+
def self.from_source: (source: untyped, ?range: untyped?, ?context: untyped?) -> untyped
|
23
|
+
|
24
|
+
def insert_context: (untyped range, context: untyped, ?entry: untyped) -> untyped
|
25
|
+
|
26
|
+
def each_entry: () { (untyped) -> untyped } -> untyped
|
27
|
+
|
28
|
+
def context_at: (untyped index, ?entry: untyped) -> (nil | untyped)
|
29
|
+
|
30
|
+
def []: (untyped index) -> untyped
|
31
|
+
|
32
|
+
def at: (line: untyped, column: untyped) -> untyped
|
33
|
+
|
34
|
+
def merge: (untyped subtree) -> untyped
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -7,7 +7,9 @@ module Steep
|
|
7
7
|
|
8
8
|
attr_reader factory (): AST::Types::Factory
|
9
9
|
|
10
|
-
|
10
|
+
attr_reader config: Interface::Builder::Config
|
11
|
+
|
12
|
+
def initialize: (subtyping: Subtyping::Check, typing: Typing, config: Interface::Builder::Config) -> void
|
11
13
|
|
12
14
|
def eval: (env: TypeEnv, node: Parser::AST::Node) -> [TypeEnv, TypeEnv, Set[Symbol | Parser::AST::Node], AST::Types::t, AST::Types::t]
|
13
15
|
|
@@ -45,7 +45,7 @@ module Steep
|
|
45
45
|
alias eql? ==
|
46
46
|
|
47
47
|
def hash: () -> Integer
|
48
|
-
|
48
|
+
|
49
49
|
def var_type: () -> AST::Types::t
|
50
50
|
end
|
51
51
|
|
@@ -58,23 +58,27 @@ module Steep
|
|
58
58
|
end
|
59
59
|
|
60
60
|
class BlockParameter
|
61
|
-
attr_reader name:
|
61
|
+
attr_reader name: Symbol
|
62
62
|
|
63
|
-
attr_reader type:
|
63
|
+
attr_reader type: Interface::Function?
|
64
|
+
|
65
|
+
attr_reader node: Parser::AST::Node
|
64
66
|
|
65
|
-
attr_reader
|
67
|
+
attr_reader self_type: AST::Types::t?
|
66
68
|
|
67
|
-
def initialize: (name:
|
69
|
+
def initialize: (name: Symbol, type: Interface::Function?, node: Parser::AST::Node, optional: boolish, self_type: AST::Types::t?) -> void
|
68
70
|
|
69
|
-
|
71
|
+
@optional: boolish
|
72
|
+
|
73
|
+
def optional?: () -> bool
|
70
74
|
|
71
75
|
def var_type: () -> AST::Types::t
|
72
76
|
|
73
|
-
def ==: (untyped other) ->
|
77
|
+
def ==: (untyped other) -> bool
|
74
78
|
|
75
79
|
alias eql? ==
|
76
80
|
|
77
|
-
def hash: () ->
|
81
|
+
def hash: () -> Integer
|
78
82
|
end
|
79
83
|
|
80
84
|
attr_reader args: untyped
|
@@ -94,7 +98,7 @@ module Steep
|
|
94
98
|
def each_param: () { (BaseParameter | BaseRestParameter | BlockParameter) -> void } -> void
|
95
99
|
| () -> Enumerator[BaseParameter | BaseRestParameter | BlockParameter, void]
|
96
100
|
|
97
|
-
def each: () { (Symbol,
|
101
|
+
def each: () { (Symbol, AST::Types::t) -> void } -> void
|
98
102
|
|
99
103
|
def self.empty: (node: Parser::AST::Node) -> MethodParams
|
100
104
|
|
@@ -0,0 +1,229 @@
|
|
1
|
+
module Steep
|
2
|
+
module TypeInference
|
3
|
+
class SendArgs
|
4
|
+
class PositionalArgs
|
5
|
+
class NodeParamPair
|
6
|
+
attr_reader node: Parser::AST::Node
|
7
|
+
|
8
|
+
attr_reader param: Interface::Function::Params::PositionalParams::param
|
9
|
+
|
10
|
+
def initialize: (node: Parser::AST::Node, param: Interface::Function::Params::PositionalParams::param) -> void
|
11
|
+
|
12
|
+
include Equatable
|
13
|
+
|
14
|
+
def to_ary: () -> [Parser::AST::Node, Interface::Function::Params::t]
|
15
|
+
end
|
16
|
+
|
17
|
+
class NodeTypePair
|
18
|
+
attr_reader node: Parser::AST::Node
|
19
|
+
|
20
|
+
attr_reader type: AST::Types::t
|
21
|
+
|
22
|
+
def initialize: (node: Parser::AST::Node, type: AST::Types::t) -> void
|
23
|
+
|
24
|
+
include Equatable
|
25
|
+
|
26
|
+
def node_type: () -> AST::Types::t
|
27
|
+
end
|
28
|
+
|
29
|
+
class SplatArg
|
30
|
+
attr_reader node: Parser::AST::Node
|
31
|
+
|
32
|
+
attr_accessor type: AST::Types::t?
|
33
|
+
|
34
|
+
def initialize: (node: Parser::AST::Node) -> void
|
35
|
+
|
36
|
+
include Equatable
|
37
|
+
end
|
38
|
+
|
39
|
+
class UnexpectedArg
|
40
|
+
attr_reader node: Parser::AST::Node
|
41
|
+
|
42
|
+
def initialize: (node: Parser::AST::Node) -> void
|
43
|
+
|
44
|
+
include Equatable
|
45
|
+
end
|
46
|
+
|
47
|
+
class MissingArg
|
48
|
+
attr_reader params: Interface::Function::Params::PositionalParams?
|
49
|
+
|
50
|
+
def initialize: (params: Interface::Function::Params::PositionalParams?) -> void
|
51
|
+
|
52
|
+
include Equatable
|
53
|
+
end
|
54
|
+
|
55
|
+
type arg = NodeParamPair | NodeTypePair | SplatArg | UnexpectedArg | MissingArg
|
56
|
+
|
57
|
+
attr_reader args: Array[Parser::AST::Node]
|
58
|
+
|
59
|
+
attr_reader index: Integer
|
60
|
+
|
61
|
+
attr_reader positional_params: Interface::Function::Params::PositionalParams?
|
62
|
+
|
63
|
+
attr_reader uniform: bool
|
64
|
+
|
65
|
+
def initialize: (args: Array[Parser::AST::Node], index: Integer, positional_params: Interface::Function::Params::PositionalParams?, ?uniform: bool) -> void
|
66
|
+
|
67
|
+
%a{pure} def node: () -> Parser::AST::Node?
|
68
|
+
|
69
|
+
def following_args: () -> Array[Parser::AST::Node]
|
70
|
+
|
71
|
+
def param: () -> Interface::Function::Params::PositionalParams::param?
|
72
|
+
|
73
|
+
def update: (?index: Integer, ?positional_params: Interface::Function::Params::PositionalParams?, ?uniform: bool) -> PositionalArgs
|
74
|
+
|
75
|
+
def next: () -> [arg, PositionalArgs]?
|
76
|
+
|
77
|
+
def uniform_type: () -> AST::Types::t?
|
78
|
+
|
79
|
+
def consume: (Integer n, node: Parser::AST::Node) -> [
|
80
|
+
UnexpectedArg | Array[Interface::Function::Params::PositionalParams::param] | nil,
|
81
|
+
PositionalArgs
|
82
|
+
]
|
83
|
+
|
84
|
+
def consume0: (
|
85
|
+
Integer n,
|
86
|
+
node: Parser::AST::Node,
|
87
|
+
params: Interface::Function::Params::PositionalParams?,
|
88
|
+
ps: Array[Interface::Function::Params::PositionalParams::param]
|
89
|
+
) -> (Interface::Function::Params::PositionalParams | UnexpectedArg | nil)
|
90
|
+
end
|
91
|
+
|
92
|
+
class KeywordArgs
|
93
|
+
class ArgTypePairs
|
94
|
+
attr_reader pairs: Array[untyped]
|
95
|
+
|
96
|
+
def initialize: (pairs: Array[untyped]) -> void
|
97
|
+
|
98
|
+
include Equatable
|
99
|
+
|
100
|
+
def []: (Integer index) -> untyped
|
101
|
+
|
102
|
+
def size: () -> Integer
|
103
|
+
end
|
104
|
+
|
105
|
+
class SplatArg
|
106
|
+
attr_reader node: Parser::AST::Node
|
107
|
+
|
108
|
+
attr_accessor type: AST::Types::t?
|
109
|
+
|
110
|
+
def initialize: (node: Parser::AST::Node) -> void
|
111
|
+
|
112
|
+
include Equatable
|
113
|
+
end
|
114
|
+
|
115
|
+
class UnexpectedKeyword
|
116
|
+
attr_reader keyword: Symbol?
|
117
|
+
|
118
|
+
attr_reader node: Parser::AST::Node
|
119
|
+
|
120
|
+
include Equatable
|
121
|
+
|
122
|
+
def initialize: (keyword: Symbol?, node: Parser::AST::Node) -> void
|
123
|
+
|
124
|
+
def key_node: () -> Parser::AST::Node?
|
125
|
+
|
126
|
+
def value_node: () -> Parser::AST::Node?
|
127
|
+
end
|
128
|
+
|
129
|
+
class MissingKeyword
|
130
|
+
attr_reader keywords: Set[Symbol]
|
131
|
+
|
132
|
+
include Equatable
|
133
|
+
|
134
|
+
def initialize: (keywords: Set[Symbol]) -> void
|
135
|
+
end
|
136
|
+
|
137
|
+
type arg = ArgTypePairs | SplatArg | UnexpectedKeyword | MissingKeyword
|
138
|
+
|
139
|
+
attr_reader kwarg_nodes: Array[Parser::AST::Node]
|
140
|
+
|
141
|
+
attr_reader keyword_params: Interface::Function::Params::KeywordParams
|
142
|
+
|
143
|
+
attr_reader index: Integer
|
144
|
+
|
145
|
+
attr_reader consumed_keywords: Set[Symbol]
|
146
|
+
|
147
|
+
def initialize: (
|
148
|
+
kwarg_nodes: Array[Parser::AST::Node],
|
149
|
+
keyword_params: Interface::Function::Params::KeywordParams,
|
150
|
+
?index: ::Integer,
|
151
|
+
?consumed_keywords: Set[Symbol]
|
152
|
+
) -> void
|
153
|
+
|
154
|
+
def update: (?index: Integer, ?consumed_keywords: Set[Symbol]) -> KeywordArgs
|
155
|
+
|
156
|
+
def keyword_pair: () -> Parser::AST::Node?
|
157
|
+
|
158
|
+
def required_keywords: () -> Hash[Symbol, AST::Types::t]
|
159
|
+
|
160
|
+
def optional_keywords: () -> Hash[Symbol, AST::Types::t]
|
161
|
+
|
162
|
+
%a{pure} def rest_type: () -> AST::Types::t?
|
163
|
+
|
164
|
+
def keyword_type: (Symbol key) -> AST::Types::t?
|
165
|
+
|
166
|
+
def all_keys: () -> Array[Symbol]
|
167
|
+
|
168
|
+
def all_values: () -> Array[AST::Types::t]
|
169
|
+
|
170
|
+
def possible_key_type: () -> AST::Types::t
|
171
|
+
|
172
|
+
def possible_value_type: () -> AST::Types::t
|
173
|
+
|
174
|
+
def next: () -> [arg, KeywordArgs]?
|
175
|
+
|
176
|
+
def consume_keys: (Array[Symbol] keys, node: Parser::AST::Node) -> [UnexpectedKeyword | Array[AST::Types::t], KeywordArgs]
|
177
|
+
end
|
178
|
+
|
179
|
+
class BlockPassArg
|
180
|
+
attr_reader node: Parser::AST::Node?
|
181
|
+
|
182
|
+
attr_reader block: Interface::Block?
|
183
|
+
|
184
|
+
def initialize: (node: Parser::AST::Node?, block: Interface::Block?) -> void
|
185
|
+
|
186
|
+
include Equatable
|
187
|
+
|
188
|
+
def no_block?: () -> bool
|
189
|
+
|
190
|
+
def compatible?: () -> bool
|
191
|
+
|
192
|
+
def block_missing?: () -> boolish
|
193
|
+
|
194
|
+
def unexpected_block?: () -> boolish
|
195
|
+
|
196
|
+
def pair: () -> [Parser::AST::Node, Interface::Function]?
|
197
|
+
|
198
|
+
def node_type: () -> AST::Types::t
|
199
|
+
end
|
200
|
+
|
201
|
+
attr_reader node: Parser::AST::Node
|
202
|
+
|
203
|
+
attr_reader arguments: Array[Parser::AST::Node]
|
204
|
+
|
205
|
+
attr_reader type: Interface::MethodType | AST::Types::Proc
|
206
|
+
|
207
|
+
def initialize: (node: Parser::AST::Node, arguments: Array[Parser::AST::Node], type: Interface::MethodType | AST::Types::Proc) -> void
|
208
|
+
|
209
|
+
attr_reader params (): Interface::Function::Params
|
210
|
+
|
211
|
+
attr_reader block (): Interface::Block?
|
212
|
+
|
213
|
+
def positional_params: () -> Interface::Function::Params::PositionalParams?
|
214
|
+
|
215
|
+
def keyword_params: () -> Interface::Function::Params::KeywordParams
|
216
|
+
|
217
|
+
def kwargs_node: () -> Parser::AST::Node?
|
218
|
+
|
219
|
+
def positional_arg: () -> PositionalArgs
|
220
|
+
|
221
|
+
def keyword_args: () -> KeywordArgs
|
222
|
+
|
223
|
+
def block_pass_arg: () -> BlockPassArg
|
224
|
+
|
225
|
+
def each: () { (PositionalArgs::arg | KeywordArgs::arg) -> void } -> Array[Diagnostic::Ruby::Base]
|
226
|
+
| () -> Enumerator[PositionalArgs::arg | KeywordArgs::arg, Array[Diagnostic::Ruby::Base]]
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
data/sig/steep/typing.rbs
CHANGED
@@ -10,11 +10,11 @@ module Steep
|
|
10
10
|
|
11
11
|
attr_reader source: Source
|
12
12
|
|
13
|
-
attr_reader errors:
|
13
|
+
attr_reader errors: Array[Diagnostic::Ruby::Base]
|
14
14
|
|
15
|
-
attr_reader typing:
|
15
|
+
attr_reader typing: Hash[Parser::AST::Node, AST::Types::t]
|
16
16
|
|
17
|
-
attr_reader parent:
|
17
|
+
attr_reader parent: Typing?
|
18
18
|
|
19
19
|
attr_reader parent_last_update: untyped
|
20
20
|
|
@@ -32,7 +32,7 @@ module Steep
|
|
32
32
|
|
33
33
|
def initialize: (source: untyped, root_context: untyped, ?parent: untyped?, ?parent_last_update: untyped, ?contexts: untyped?, ?source_index: untyped?) -> void
|
34
34
|
|
35
|
-
def add_error: (
|
35
|
+
def add_error: (Diagnostic::Ruby::Base error) -> void
|
36
36
|
|
37
37
|
def add_typing: (Parser::AST::Node node, AST::Types::t `type`, TypeInference::Context _context) -> untyped
|
38
38
|
|
data/sig/steep.rbs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module Steep
|
2
|
-
def self.logger: () -> Logger
|
2
|
+
def self.logger: () -> (Logger & ActiveSupport::TaggedLogging)
|
3
3
|
|
4
4
|
def self.new_logger: (untyped output, untyped prev_level) -> untyped
|
5
5
|
|
@@ -7,10 +7,12 @@ module Steep
|
|
7
7
|
|
8
8
|
def self.log_output=: (untyped output) -> untyped
|
9
9
|
|
10
|
-
def self.measure: (
|
10
|
+
def self.measure: [A] (String message, ?level: ::Symbol) { () -> A } -> A
|
11
11
|
|
12
12
|
def self.log_error: (untyped exn, ?message: ::String) -> untyped
|
13
13
|
|
14
|
+
self.@logger: ActiveSupport::TaggedLogging?
|
15
|
+
|
14
16
|
class Sampler
|
15
17
|
def initialize: () -> void
|
16
18
|
|
data/smoke/block/e.rb
ADDED
data/smoke/block/e.rbs
ADDED
@@ -123,3 +123,15 @@
|
|
123
123
|
def map: [U] () { (::Integer) -> U } -> ::Array[U]
|
124
124
|
| () -> ::Enumerator[::Integer, ::Array[untyped]]
|
125
125
|
code: Ruby::UnresolvedOverloading
|
126
|
+
- file: e.rb
|
127
|
+
diagnostics:
|
128
|
+
- range:
|
129
|
+
start:
|
130
|
+
line: 11
|
131
|
+
character: 2
|
132
|
+
end:
|
133
|
+
line: 11
|
134
|
+
character: 5
|
135
|
+
severity: ERROR
|
136
|
+
message: Type `(::Integer | ::String)` does not have method `foo`
|
137
|
+
code: Ruby::NoMethod
|
@@ -11,6 +11,18 @@
|
|
11
11
|
severity: ERROR
|
12
12
|
message: 'Cannot find the declaration of class: `Foo`'
|
13
13
|
code: Ruby::UnknownConstant
|
14
|
+
- file: empty_yield.rb
|
15
|
+
diagnostics:
|
16
|
+
- range:
|
17
|
+
start:
|
18
|
+
line: 3
|
19
|
+
character: 4
|
20
|
+
end:
|
21
|
+
line: 3
|
22
|
+
character: 9
|
23
|
+
severity: ERROR
|
24
|
+
message: More positional arguments are required
|
25
|
+
code: Ruby::InsufficientPositionalArguments
|
14
26
|
- file: hash.rb
|
15
27
|
diagnostics:
|
16
28
|
- range:
|
@@ -35,11 +35,11 @@
|
|
35
35
|
character: 11
|
36
36
|
severity: ERROR
|
37
37
|
message: |-
|
38
|
-
Cannot
|
38
|
+
Cannot pass a value of type `::String` as an argument of type `::Integer`
|
39
39
|
::String <: ::Integer
|
40
40
|
::Object <: ::Integer
|
41
41
|
::BasicObject <: ::Integer
|
42
|
-
code: Ruby::
|
42
|
+
code: Ruby::ArgumentTypeMismatch
|
43
43
|
- range:
|
44
44
|
start:
|
45
45
|
line: 13
|
@@ -81,8 +81,8 @@
|
|
81
81
|
character: 12
|
82
82
|
severity: ERROR
|
83
83
|
message: |-
|
84
|
-
Cannot
|
84
|
+
Cannot pass a value of type `::String` as an argument of type `::Integer`
|
85
85
|
::String <: ::Integer
|
86
86
|
::Object <: ::Integer
|
87
87
|
::BasicObject <: ::Integer
|
88
|
-
code: Ruby::
|
88
|
+
code: Ruby::ArgumentTypeMismatch
|
data/steep.gemspec
CHANGED
@@ -33,7 +33,8 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.add_runtime_dependency "rainbow", ">= 2.2.2", "< 4.0"
|
34
34
|
spec.add_runtime_dependency "listen", "~> 3.0"
|
35
35
|
spec.add_runtime_dependency "language_server-protocol", ">= 3.15", "< 4.0"
|
36
|
-
spec.add_runtime_dependency "rbs", ">= 2.
|
36
|
+
spec.add_runtime_dependency "rbs", ">= 2.7.0.pre"
|
37
37
|
spec.add_runtime_dependency "parallel", ">= 1.0.0"
|
38
38
|
spec.add_runtime_dependency "terminal-table", ">= 2", "< 4"
|
39
|
+
spec.add_runtime_dependency "securerandom", ">= 0.1"
|
39
40
|
end
|