steep 1.4.0.dev.3 → 1.4.0.dev.4
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 +3 -3
- data/Gemfile.steep.lock +5 -7
- data/lib/steep/diagnostic/ruby.rb +1 -2
- data/lib/steep/interface/builder.rb +3 -3
- data/lib/steep/method_name.rb +8 -0
- data/lib/steep/server/interaction_worker.rb +131 -177
- data/lib/steep/server/lsp_formatter.rb +308 -154
- data/lib/steep/server/master.rb +4 -1
- data/lib/steep/services/completion_provider.rb +140 -103
- data/lib/steep/services/hover_provider/rbs.rb +37 -32
- data/lib/steep/services/signature_help_provider.rb +108 -0
- data/lib/steep/services/type_name_completion.rb +9 -1
- data/lib/steep/type_construction.rb +61 -40
- data/lib/steep/type_inference/method_call.rb +1 -1
- data/lib/steep/type_inference/send_args.rb +3 -3
- data/lib/steep/type_inference/type_env.rb +5 -3
- data/lib/steep/version.rb +1 -1
- data/lib/steep.rb +1 -0
- data/sample/Steepfile +2 -0
- data/sig/shims/language-server_protocol.rbs +265 -0
- data/sig/shims/parser.rbs +3 -0
- data/sig/steep/method_name.rbs +5 -1
- data/sig/steep/server/interaction_worker.rbs +18 -12
- data/sig/steep/server/lsp_formatter.rbs +43 -18
- data/sig/steep/services/completion_provider.rbs +105 -29
- data/sig/steep/services/hover_provider/rbs.rbs +13 -9
- data/sig/steep/services/signature_help_provider.rbs +39 -0
- data/sig/steep/type_inference/method_call.rbs +1 -1
- data/sig/steep/type_inference/send_args.rbs +6 -2
- data/sig/steep/typing.rbs +1 -1
- metadata +4 -2
@@ -1,6 +1,10 @@
|
|
1
|
+
use RBS::Environment, RBS::TypeName
|
2
|
+
use Steep::TypeInference::MethodCall
|
3
|
+
|
1
4
|
module Steep
|
2
5
|
module Services
|
3
6
|
class CompletionProvider
|
7
|
+
# Cursor position
|
4
8
|
class Position
|
5
9
|
attr_reader line: Integer
|
6
10
|
|
@@ -40,7 +44,7 @@ module Steep
|
|
40
44
|
end
|
41
45
|
|
42
46
|
class ConstantItem
|
43
|
-
attr_reader env:
|
47
|
+
attr_reader env: Environment
|
44
48
|
|
45
49
|
attr_reader identifier: Symbol
|
46
50
|
|
@@ -48,36 +52,107 @@ module Steep
|
|
48
52
|
|
49
53
|
attr_reader type: AST::Types::t
|
50
54
|
|
51
|
-
attr_reader full_name:
|
55
|
+
attr_reader full_name: TypeName
|
52
56
|
|
53
|
-
def initialize: (env:
|
57
|
+
def initialize: (env: Environment, identifier: Symbol, range: Range, type: AST::Types::t, full_name: TypeName) -> void
|
54
58
|
|
55
59
|
def class?: () -> bool
|
56
60
|
|
57
61
|
def module?: () -> bool
|
58
62
|
|
59
|
-
def comments: () -> Array[RBS::AST::Comment]
|
63
|
+
def comments: () -> Array[RBS::AST::Comment?]
|
64
|
+
|
65
|
+
type const_decl = RBS::AST::Declarations::Constant
|
66
|
+
| RBS::AST::Declarations::Class
|
67
|
+
| RBS::AST::Declarations::Module
|
68
|
+
| RBS::AST::Declarations::ClassAlias
|
69
|
+
| RBS::AST::Declarations::ModuleAlias
|
70
|
+
|
71
|
+
def decl: () -> const_decl
|
72
|
+
end
|
73
|
+
|
74
|
+
# Method name completion item with *simple* receiver type
|
75
|
+
#
|
76
|
+
# Instance type, Singleton type, Interface type is simple.
|
77
|
+
# The item may have multiple overloads, but must have single method definition source.
|
78
|
+
#
|
79
|
+
class SimpleMethodNameItem
|
80
|
+
attr_reader identifier: Symbol
|
81
|
+
|
82
|
+
attr_reader range: Range
|
83
|
+
|
84
|
+
attr_reader receiver_type: AST::Types::Name::Instance | AST::Types::Name::Interface | AST::Types::Name::Singleton
|
85
|
+
|
86
|
+
attr_reader method_types: Array[RBS::MethodType]
|
87
|
+
|
88
|
+
attr_reader method_name: method_name
|
89
|
+
|
90
|
+
attr_reader method_member: RBS::Definition::Method::method_member
|
91
|
+
|
92
|
+
def initialize: (
|
93
|
+
identifier: Symbol,
|
94
|
+
range: Range,
|
95
|
+
receiver_type: AST::Types::Name::Instance | AST::Types::Name::Interface | AST::Types::Name::Singleton,
|
96
|
+
method_name: method_name,
|
97
|
+
method_types: Array[RBS::MethodType],
|
98
|
+
method_member: RBS::Definition::Method::method_member
|
99
|
+
) -> void
|
100
|
+
|
101
|
+
%a{pure} def comment: () -> RBS::AST::Comment?
|
60
102
|
end
|
61
103
|
|
62
|
-
|
104
|
+
# Method name completion item with *complex* receiver type
|
105
|
+
#
|
106
|
+
# The item may have multiple overloads and multiple method declarations.
|
107
|
+
#
|
108
|
+
class ComplexMethodNameItem
|
63
109
|
attr_reader identifier: Symbol
|
64
110
|
|
65
111
|
attr_reader range: Range
|
66
112
|
|
67
|
-
attr_reader
|
113
|
+
attr_reader reeiver_type: AST::Types::t
|
114
|
+
|
115
|
+
attr_reader method_types: Array[RBS::MethodType]
|
116
|
+
|
117
|
+
attr_reader method_decls: Array[MethodCall::MethodDecl]
|
118
|
+
|
119
|
+
def initialize: (
|
120
|
+
identifier: Symbol,
|
121
|
+
range: Range,
|
122
|
+
method_types: Array[RBS::MethodType],
|
123
|
+
method_decls: Array[MethodCall::MethodDecl],
|
124
|
+
receiver_type: AST::Types::t
|
125
|
+
) -> void
|
126
|
+
|
127
|
+
def method_names: () -> Array[method_name]
|
68
128
|
|
69
|
-
|
129
|
+
def method_definitions: () -> Hash[method_name, RBS::Definition::Method::method_member]
|
70
130
|
|
71
|
-
|
131
|
+
def defining_method_name: (TypeName, Symbol name, RBS::Definition::Method::method_member) -> method_name
|
132
|
+
end
|
133
|
+
|
134
|
+
# Method name completion item for generated methods, like `#first` in tuple types
|
135
|
+
#
|
136
|
+
# The generated methods doesn't have associated `MethodDecl`.
|
137
|
+
#
|
138
|
+
class GeneratedMethodNameItem
|
139
|
+
attr_reader identifier: Symbol
|
72
140
|
|
73
|
-
|
141
|
+
attr_reader range: Range
|
142
|
+
|
143
|
+
attr_reader reeiver_type: AST::Types::t
|
74
144
|
|
75
|
-
|
145
|
+
attr_reader method_types: Array[RBS::MethodType]
|
76
146
|
|
77
|
-
def
|
147
|
+
def initialize: (
|
148
|
+
identifier: Symbol,
|
149
|
+
range: Range,
|
150
|
+
receiver_type: AST::Types::t,
|
151
|
+
method_types: Array[RBS::MethodType]
|
152
|
+
) -> void
|
78
153
|
end
|
79
154
|
|
80
|
-
type item = InstanceVariableItem | LocalVariableItem | ConstantItem |
|
155
|
+
type item = InstanceVariableItem | LocalVariableItem | ConstantItem | SimpleMethodNameItem | ComplexMethodNameItem | GeneratedMethodNameItem
|
81
156
|
|
82
157
|
attr_reader source_text: String
|
83
158
|
|
@@ -91,41 +166,42 @@ module Steep
|
|
91
166
|
|
92
167
|
attr_reader typing: Typing
|
93
168
|
|
94
|
-
def initialize: (source_text:
|
169
|
+
def initialize: (source_text: String, path: Pathname, subtyping: Subtyping::Check) -> void
|
95
170
|
|
96
|
-
def type_check!: (
|
171
|
+
def type_check!: (String text, line: Integer, column: Integer) -> void
|
97
172
|
|
98
|
-
def env: () ->
|
173
|
+
def env: () -> Environment
|
99
174
|
|
100
|
-
def run: (line:
|
175
|
+
def run: (line: Integer, column: Integer) -> Array[item]
|
101
176
|
|
102
|
-
def range_from_loc: (
|
177
|
+
def range_from_loc: (Parser::Source::Range loc) -> Range
|
103
178
|
|
104
|
-
def at_end?: (
|
179
|
+
def at_end?: (Position pos, of: Parser::Source::Map | Parser::Source::Range | nil) -> boolish
|
105
180
|
|
106
|
-
def range_for: (
|
181
|
+
def range_for: (Position position, ?prefix: ::String) -> Range
|
107
182
|
|
108
|
-
def items_for_trigger: (position:
|
183
|
+
def items_for_trigger: (position: Position) -> Array[item]
|
109
184
|
|
110
|
-
def items_for_dot: (position: Position) ->
|
185
|
+
def items_for_dot: (position: Position) -> Array[item]
|
111
186
|
|
112
|
-
def items_for_colon2: (position:
|
187
|
+
def items_for_colon2: (position: Position) -> Array[item]
|
113
188
|
|
114
|
-
def items_for_atmark: (position:
|
189
|
+
def items_for_atmark: (position: Position) -> Array[item]
|
115
190
|
|
116
|
-
def method_items_for_receiver_type: (
|
191
|
+
def method_items_for_receiver_type: (AST::Types::t, include_private: bool, prefix: String, position: Position, items: Array[item]) -> void
|
117
192
|
|
118
|
-
def word_name?: (String name) ->
|
193
|
+
def word_name?: (String name) -> bool
|
119
194
|
|
120
|
-
def local_variable_items_for_context: (TypeInference::Context context, position: Position, prefix: String, items: Array[
|
195
|
+
def local_variable_items_for_context: (TypeInference::Context context, position: Position, prefix: String, items: Array[item]) -> void
|
121
196
|
|
122
|
-
def constant_items_for_context: (TypeInference::Context context, position: Position, prefix: String, items: Array[
|
197
|
+
def constant_items_for_context: (TypeInference::Context context, position: Position, prefix: String, items: Array[item], ?parent: Parser::AST::Node?) -> void
|
123
198
|
|
124
|
-
def instance_variable_items_for_context: (TypeInference::Context context, position: Position, prefix: String, items: Array[
|
199
|
+
def instance_variable_items_for_context: (TypeInference::Context context, position: Position, prefix: String, items: Array[item]) -> void
|
125
200
|
|
126
|
-
def index_for: (
|
201
|
+
def index_for: (String, line: Integer, column: Integer) -> Integer
|
127
202
|
|
128
203
|
def disallowed_method?: (Symbol name) -> bool
|
204
|
+
|
129
205
|
end
|
130
206
|
end
|
131
207
|
end
|
@@ -1,31 +1,33 @@
|
|
1
|
+
use RBS::Location, RBS::AST::Declarations, RBS::AST::Directives, RBS::TypeName, RBS::Environment
|
2
|
+
|
1
3
|
module Steep
|
2
4
|
module Services
|
3
5
|
module HoverProvider
|
4
6
|
class RBS
|
5
7
|
class TypeAliasContent
|
6
|
-
attr_reader location:
|
8
|
+
attr_reader location: Location[untyped, untyped]
|
7
9
|
|
8
|
-
attr_reader decl:
|
10
|
+
attr_reader decl: Declarations::TypeAlias
|
9
11
|
|
10
|
-
def initialize: (location:
|
12
|
+
def initialize: (location: Location[untyped, untyped], decl: Declarations::TypeAlias) -> void
|
11
13
|
end
|
12
14
|
|
13
15
|
class ClassContent
|
14
|
-
attr_reader location:
|
16
|
+
attr_reader location: Location[untyped, untyped]
|
15
17
|
|
16
|
-
type decl =
|
18
|
+
type decl = Declarations::Class | Declarations::Module | Declarations::ClassAlias | Declarations::ModuleAlias
|
17
19
|
|
18
20
|
attr_reader decl: decl
|
19
21
|
|
20
|
-
def initialize: (location:
|
22
|
+
def initialize: (location: Location[untyped, untyped], decl: decl) -> void
|
21
23
|
end
|
22
24
|
|
23
25
|
class InterfaceContent
|
24
|
-
attr_reader location:
|
26
|
+
attr_reader location: Location[untyped, untyped]
|
25
27
|
|
26
|
-
attr_reader decl:
|
28
|
+
attr_reader decl: Declarations::Interface
|
27
29
|
|
28
|
-
def initialize: (location:
|
30
|
+
def initialize: (location: Location[untyped, untyped], decl: Declarations::Interface) -> void
|
29
31
|
end
|
30
32
|
|
31
33
|
type content = TypeAliasContent | ClassContent | InterfaceContent
|
@@ -37,6 +39,8 @@ module Steep
|
|
37
39
|
def project: () -> Project
|
38
40
|
|
39
41
|
def content_for: (target: Project::Target, path: Pathname, line: Integer, column: Integer) -> content?
|
42
|
+
|
43
|
+
def content_for_type_name: (TypeName, env: Environment, location: Location[untyped, untyped]) -> content?
|
40
44
|
end
|
41
45
|
end
|
42
46
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
use RBS::Environment
|
2
|
+
|
3
|
+
module Steep
|
4
|
+
module Services
|
5
|
+
class SignatureHelpProvider
|
6
|
+
module MethodCall = TypeInference::MethodCall
|
7
|
+
|
8
|
+
class Item
|
9
|
+
attr_reader method_type: RBS::MethodType
|
10
|
+
|
11
|
+
attr_reader comment: RBS::AST::Comment?
|
12
|
+
|
13
|
+
def initialize: (RBS::MethodType, RBS::AST::Comment?) -> void
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_reader source: Source
|
17
|
+
|
18
|
+
attr_reader path: Pathname
|
19
|
+
|
20
|
+
attr_reader subtyping: Subtyping::Check
|
21
|
+
|
22
|
+
attr_reader buffer: RBS::Buffer
|
23
|
+
|
24
|
+
def env: () -> Environment
|
25
|
+
|
26
|
+
def initialize: (source: Source, subtyping: Subtyping::Check) -> void
|
27
|
+
|
28
|
+
# 1-origin line, 0-origin column
|
29
|
+
#
|
30
|
+
def run: (line: Integer, column: Integer) -> [Array[Item], Integer?]?
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def signature_help_for: (Parser::AST::Node, Typing) -> [Array[Item], Integer?]?
|
35
|
+
|
36
|
+
def type_check!: (line: Integer, column: Integer) -> Typing
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -52,7 +52,9 @@ module Steep
|
|
52
52
|
include Equatable
|
53
53
|
end
|
54
54
|
|
55
|
-
type arg = NodeParamPair | NodeTypePair | SplatArg |
|
55
|
+
type arg = NodeParamPair | NodeTypePair | SplatArg | error_arg
|
56
|
+
|
57
|
+
type error_arg = UnexpectedArg | MissingArg
|
56
58
|
|
57
59
|
attr_reader args: Array[Parser::AST::Node]
|
58
60
|
|
@@ -134,7 +136,9 @@ module Steep
|
|
134
136
|
def initialize: (keywords: Set[Symbol]) -> void
|
135
137
|
end
|
136
138
|
|
137
|
-
type arg = ArgTypePairs | SplatArg |
|
139
|
+
type arg = ArgTypePairs | SplatArg | error_arg
|
140
|
+
|
141
|
+
type error_arg = UnexpectedKeyword | MissingKeyword
|
138
142
|
|
139
143
|
attr_reader kwarg_nodes: Array[Parser::AST::Node]
|
140
144
|
|
data/sig/steep/typing.rbs
CHANGED
@@ -44,7 +44,7 @@ module Steep
|
|
44
44
|
|
45
45
|
def type_of: (node: Parser::AST::Node) -> AST::Types::t
|
46
46
|
|
47
|
-
def call_of: (node:
|
47
|
+
def call_of: (node: Parser::AST::Node) -> TypeInference::MethodCall::t
|
48
48
|
|
49
49
|
def add_context_for_node: (untyped node, context: untyped) -> untyped
|
50
50
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: steep
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.0.dev.
|
4
|
+
version: 1.4.0.dev.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Soutaro Matsumoto
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parser
|
@@ -343,6 +343,7 @@ files:
|
|
343
343
|
- lib/steep/services/hover_provider/ruby.rb
|
344
344
|
- lib/steep/services/hover_provider/singleton_methods.rb
|
345
345
|
- lib/steep/services/path_assignment.rb
|
346
|
+
- lib/steep/services/signature_help_provider.rb
|
346
347
|
- lib/steep/services/signature_service.rb
|
347
348
|
- lib/steep/services/stats_calculator.rb
|
348
349
|
- lib/steep/services/type_check_service.rb
|
@@ -474,6 +475,7 @@ files:
|
|
474
475
|
- sig/steep/services/hover_provider/ruby.rbs
|
475
476
|
- sig/steep/services/hover_provider/singleton_methods.rbs
|
476
477
|
- sig/steep/services/path_assignment.rbs
|
478
|
+
- sig/steep/services/signature_help_provider.rbs
|
477
479
|
- sig/steep/services/signature_service.rbs
|
478
480
|
- sig/steep/services/stats_calculator.rbs
|
479
481
|
- sig/steep/services/type_check_service.rbs
|