steep 1.7.0.dev.4 → 1.7.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/CHANGELOG.md +43 -0
- data/README.md +18 -0
- data/guides/src/gem-rbs-collection/gem-rbs-collection.md +7 -24
- data/lib/steep/rake_task.rb +132 -0
- data/lib/steep/type_construction.rb +1 -0
- data/lib/steep/version.rb +1 -1
- data/steep.gemspec +4 -1
- metadata +4 -143
- data/.github/dependabot.yml +0 -28
- data/.github/workflows/ruby-windows.yml +0 -35
- data/.github/workflows/ruby.yml +0 -32
- data/.vscode/steep-shared.code-snippets +0 -41
- data/Gemfile +0 -14
- data/Gemfile.lock +0 -104
- data/Gemfile.steep +0 -0
- data/gemfile_steep/Gemfile +0 -3
- data/gemfile_steep/Gemfile.lock +0 -77
- data/rbs_collection.steep.lock.yaml +0 -108
- data/rbs_collection.steep.yaml +0 -23
- data/sig/shims/bundler.rbs +0 -3
- data/sig/shims/concurrent-ruby.rbs +0 -39
- data/sig/shims/exception.rbs +0 -4
- data/sig/shims/language-server_protocol.rbs +0 -450
- data/sig/shims/parser/comment.rbs +0 -33
- data/sig/shims/parser/nodes.rbs +0 -252
- data/sig/shims/parser/source/map.rbs +0 -146
- data/sig/shims/parser/source/range.rbs +0 -237
- data/sig/shims/parser.rbs +0 -69
- data/sig/shims/string.rbs +0 -4
- data/sig/shims/tagged_logging.rbs +0 -6
- data/sig/shims/yaml.rbs +0 -4
- data/sig/steep/annotation_parser.rbs +0 -60
- data/sig/steep/ast/annotation/collection.rbs +0 -78
- data/sig/steep/ast/annotation.rbs +0 -121
- data/sig/steep/ast/builtin.rbs +0 -69
- data/sig/steep/ast/ignore.rbs +0 -66
- data/sig/steep/ast/node/type_application.rbs +0 -31
- data/sig/steep/ast/node/type_assertion.rbs +0 -32
- data/sig/steep/ast/types/any.rbs +0 -29
- data/sig/steep/ast/types/boolean.rbs +0 -31
- data/sig/steep/ast/types/bot.rbs +0 -29
- data/sig/steep/ast/types/class.rbs +0 -33
- data/sig/steep/ast/types/factory.rbs +0 -110
- data/sig/steep/ast/types/helper.rbs +0 -24
- data/sig/steep/ast/types/instance.rbs +0 -33
- data/sig/steep/ast/types/intersection.rbs +0 -40
- data/sig/steep/ast/types/literal.rbs +0 -35
- data/sig/steep/ast/types/logic.rbs +0 -83
- data/sig/steep/ast/types/name.rbs +0 -84
- data/sig/steep/ast/types/nil.rbs +0 -31
- data/sig/steep/ast/types/proc.rbs +0 -53
- data/sig/steep/ast/types/record.rbs +0 -39
- data/sig/steep/ast/types/self.rbs +0 -33
- data/sig/steep/ast/types/top.rbs +0 -29
- data/sig/steep/ast/types/tuple.rbs +0 -37
- data/sig/steep/ast/types/union.rbs +0 -40
- data/sig/steep/ast/types/var.rbs +0 -42
- data/sig/steep/ast/types/void.rbs +0 -29
- data/sig/steep/ast/types.rbs +0 -16
- data/sig/steep/cli.rbs +0 -55
- data/sig/steep/diagnostic/deprecated/else_on_exhaustive_case.rbs +0 -13
- data/sig/steep/diagnostic/deprecated/unknown_constant_assigned.rbs +0 -15
- data/sig/steep/diagnostic/helper.rbs +0 -15
- data/sig/steep/diagnostic/lsp_formatter.rbs +0 -36
- data/sig/steep/diagnostic/ruby.rbs +0 -703
- data/sig/steep/diagnostic/signature.rbs +0 -252
- data/sig/steep/drivers/annotations.rbs +0 -17
- data/sig/steep/drivers/check.rbs +0 -33
- data/sig/steep/drivers/checkfile.rbs +0 -27
- data/sig/steep/drivers/diagnostic_printer.rbs +0 -25
- data/sig/steep/drivers/init.rbs +0 -19
- data/sig/steep/drivers/langserver.rbs +0 -36
- data/sig/steep/drivers/print_project.rbs +0 -15
- data/sig/steep/drivers/stats.rbs +0 -47
- data/sig/steep/drivers/utils/driver_helper.rbs +0 -25
- data/sig/steep/drivers/utils/jobs_option.rbs +0 -19
- data/sig/steep/drivers/validate.rbs +0 -15
- data/sig/steep/drivers/vendor.rbs +0 -19
- data/sig/steep/drivers/watch.rbs +0 -27
- data/sig/steep/drivers/worker.rbs +0 -29
- data/sig/steep/equatable.rbs +0 -11
- data/sig/steep/expectations.rbs +0 -72
- data/sig/steep/index/rbs_index.rbs +0 -141
- data/sig/steep/index/signature_symbol_provider.rbs +0 -41
- data/sig/steep/index/source_index.rbs +0 -63
- data/sig/steep/interface/block.rbs +0 -41
- data/sig/steep/interface/builder.rbs +0 -111
- data/sig/steep/interface/function.rbs +0 -271
- data/sig/steep/interface/method_type.rbs +0 -105
- data/sig/steep/interface/shape.rbs +0 -80
- data/sig/steep/interface/substitution.rbs +0 -51
- data/sig/steep/interface/type_param.rbs +0 -43
- data/sig/steep/method_name.rbs +0 -30
- data/sig/steep/module_helper.rbs +0 -16
- data/sig/steep/node_helper.rbs +0 -91
- data/sig/steep/path_helper.rbs +0 -15
- data/sig/steep/project/dsl.rbs +0 -108
- data/sig/steep/project/options.rbs +0 -47
- data/sig/steep/project/pattern.rbs +0 -47
- data/sig/steep/project/target.rbs +0 -25
- data/sig/steep/project.rbs +0 -26
- data/sig/steep/range_extension.rbs +0 -7
- data/sig/steep/server/base_worker.rbs +0 -49
- data/sig/steep/server/change_buffer.rbs +0 -38
- data/sig/steep/server/delay_queue.rbs +0 -37
- data/sig/steep/server/interaction_worker.rbs +0 -90
- data/sig/steep/server/lsp_formatter.rbs +0 -63
- data/sig/steep/server/master.rbs +0 -299
- data/sig/steep/server/type_check_worker.rbs +0 -141
- data/sig/steep/server/worker_process.rbs +0 -97
- data/sig/steep/services/completion_provider.rbs +0 -264
- data/sig/steep/services/content_change.rbs +0 -37
- data/sig/steep/services/file_loader.rbs +0 -21
- data/sig/steep/services/goto_service.rbs +0 -106
- data/sig/steep/services/hover_provider/rbs.rbs +0 -47
- data/sig/steep/services/hover_provider/ruby.rbs +0 -127
- data/sig/steep/services/hover_provider/singleton_methods.rbs +0 -11
- data/sig/steep/services/path_assignment.rbs +0 -21
- data/sig/steep/services/signature_help_provider.rbs +0 -51
- data/sig/steep/services/signature_service.rbs +0 -156
- data/sig/steep/services/stats_calculator.rbs +0 -41
- data/sig/steep/services/type_check_service.rbs +0 -112
- data/sig/steep/services/type_name_completion.rbs +0 -135
- data/sig/steep/signature/validator.rbs +0 -85
- data/sig/steep/source/ignore_ranges.rbs +0 -38
- data/sig/steep/source.rbs +0 -105
- data/sig/steep/subtyping/cache.rbs +0 -17
- data/sig/steep/subtyping/check.rbs +0 -131
- data/sig/steep/subtyping/constraints.rbs +0 -111
- data/sig/steep/subtyping/relation.rbs +0 -63
- data/sig/steep/subtyping/result.rbs +0 -179
- data/sig/steep/subtyping/variable_variance.rbs +0 -25
- data/sig/steep/thread_waiter.rbs +0 -13
- data/sig/steep/type_construction.rbs +0 -542
- data/sig/steep/type_inference/block_params.rbs +0 -170
- data/sig/steep/type_inference/case_when.rbs +0 -130
- data/sig/steep/type_inference/constant_env.rbs +0 -29
- data/sig/steep/type_inference/context.rbs +0 -216
- data/sig/steep/type_inference/context_array.rbs +0 -38
- data/sig/steep/type_inference/logic_type_interpreter.rbs +0 -108
- data/sig/steep/type_inference/method_call.rbs +0 -124
- data/sig/steep/type_inference/method_params.rbs +0 -127
- data/sig/steep/type_inference/multiple_assignment.rbs +0 -76
- data/sig/steep/type_inference/send_args.rbs +0 -243
- data/sig/steep/type_inference/type_env.rbs +0 -160
- data/sig/steep/type_inference/type_env_builder.rbs +0 -81
- data/sig/steep/typing.rbs +0 -75
- data/sig/steep.rbs +0 -45
data/sig/steep/server/master.rbs
DELETED
|
@@ -1,299 +0,0 @@
|
|
|
1
|
-
module Steep
|
|
2
|
-
module Server
|
|
3
|
-
class Master
|
|
4
|
-
module LSP = LanguageServer::Protocol
|
|
5
|
-
|
|
6
|
-
class TypeCheckRequest
|
|
7
|
-
attr_reader guid: String
|
|
8
|
-
|
|
9
|
-
attr_reader library_paths: Set[Pathname]
|
|
10
|
-
|
|
11
|
-
attr_reader signature_paths: Set[Pathname]
|
|
12
|
-
|
|
13
|
-
attr_reader code_paths: Set[Pathname]
|
|
14
|
-
|
|
15
|
-
attr_reader priority_paths: Set[Pathname]
|
|
16
|
-
|
|
17
|
-
attr_reader checked_paths: Set[Pathname]
|
|
18
|
-
|
|
19
|
-
def initialize: (guid: String) -> void
|
|
20
|
-
|
|
21
|
-
def uri: (Pathname path) -> URI::File
|
|
22
|
-
|
|
23
|
-
def as_json: (assignment: Services::PathAssignment) -> { guid: String, library_uris: Array[String], signature_uris: Array[String], code_uris: Array[String], priority_uris: Array[String] }
|
|
24
|
-
|
|
25
|
-
def total: () -> Integer
|
|
26
|
-
|
|
27
|
-
def percentage: () -> Integer
|
|
28
|
-
|
|
29
|
-
def all_paths: () -> Set[Pathname]
|
|
30
|
-
|
|
31
|
-
def checking_path?: (Pathname path) -> bool
|
|
32
|
-
|
|
33
|
-
def checked: (Pathname path) -> void
|
|
34
|
-
|
|
35
|
-
def finished?: () -> bool
|
|
36
|
-
|
|
37
|
-
def unchecked_paths: () -> Set[Pathname]
|
|
38
|
-
|
|
39
|
-
def unchecked_code_paths: () -> Set[Pathname]
|
|
40
|
-
|
|
41
|
-
def unchecked_library_paths: () -> Set[Pathname]
|
|
42
|
-
|
|
43
|
-
def unchecked_signature_paths: () -> Set[Pathname]
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# TypeCheckController remembers changed files, keep track of open editors, and make a TypeCheckRequest that contains list of all files to be type checked
|
|
47
|
-
#
|
|
48
|
-
# ```rb
|
|
49
|
-
# controller = TypeCheckController.new(project: project)
|
|
50
|
-
#
|
|
51
|
-
# controller.push_changes(file_path) # Remember that the path is changed
|
|
52
|
-
# controller.update_priority(open: file_path) # Remember that an editor opens the path
|
|
53
|
-
# controller.make_request(...) # Make an instance of TypeCheckRequest that contains list of all paths to type check
|
|
54
|
-
# ```
|
|
55
|
-
class TypeCheckController
|
|
56
|
-
attr_reader project: Project
|
|
57
|
-
|
|
58
|
-
attr_reader priority_paths: Set[Pathname]
|
|
59
|
-
|
|
60
|
-
attr_reader changed_paths: Set[Pathname]
|
|
61
|
-
|
|
62
|
-
attr_reader target_paths: Array[TargetPaths]
|
|
63
|
-
|
|
64
|
-
# TargetPaths object keeps track of the expanded absolute paths of each target
|
|
65
|
-
#
|
|
66
|
-
# 1. *Library path* is a RBS file that is loaded as a part of a library
|
|
67
|
-
# 2. *Signature path* is a RBS file that is loaded as a part of the application library
|
|
68
|
-
# 3. *Code path* is a Ruby file that is being type checked
|
|
69
|
-
#
|
|
70
|
-
class TargetPaths
|
|
71
|
-
attr_reader project: Project
|
|
72
|
-
|
|
73
|
-
attr_reader target: Project::Target
|
|
74
|
-
|
|
75
|
-
# Set of absolute paths of Ruby code
|
|
76
|
-
#
|
|
77
|
-
attr_reader code_paths: Set[Pathname]
|
|
78
|
-
|
|
79
|
-
# Set of absolute paths of app signatures
|
|
80
|
-
#
|
|
81
|
-
attr_reader signature_paths: Set[Pathname]
|
|
82
|
-
|
|
83
|
-
# Set of absolute paths of library signatures
|
|
84
|
-
#
|
|
85
|
-
# Unlike `code_paths` and `signature_paths`, the `library_paths` must be added explicitly not by `#add` method.
|
|
86
|
-
#
|
|
87
|
-
attr_reader library_paths: Set[Pathname]
|
|
88
|
-
|
|
89
|
-
def initialize: (project: Project, target: Project::Target) -> void
|
|
90
|
-
|
|
91
|
-
def all_paths: () -> Set[Pathname]
|
|
92
|
-
|
|
93
|
-
def library_path?: (Pathname path) -> bool
|
|
94
|
-
|
|
95
|
-
def signature_path?: (Pathname path) -> bool
|
|
96
|
-
|
|
97
|
-
def code_path?: (Pathname path) -> bool
|
|
98
|
-
|
|
99
|
-
# Adds `path` to the object
|
|
100
|
-
#
|
|
101
|
-
# Returns `false` if the path is not a part of the project.
|
|
102
|
-
#
|
|
103
|
-
# Whether `path` is a code path or signature path is automatically detected.
|
|
104
|
-
# `library: true` is required to add the path to library path.
|
|
105
|
-
#
|
|
106
|
-
def add: (Pathname path, ?library: bool) -> bool
|
|
107
|
-
|
|
108
|
-
alias << add
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
def initialize: (project: Project) -> void
|
|
112
|
-
|
|
113
|
-
def load: (command_line_args: Array[String]) -> void
|
|
114
|
-
|
|
115
|
-
def push_changes: (Pathname path) -> void
|
|
116
|
-
|
|
117
|
-
def update_priority: (open: Pathname) -> void
|
|
118
|
-
| (close: Pathname) -> void
|
|
119
|
-
|
|
120
|
-
def make_request: (?guid: String, ?last_request: TypeCheckRequest?, ?include_unchanged: bool) -> TypeCheckRequest?
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
type lsp_notification = { method: String, params: untyped }
|
|
124
|
-
|
|
125
|
-
type lsp_request = { id: String, method: String, params: untyped }
|
|
126
|
-
|
|
127
|
-
type lsp_response = { id: String, result: untyped }
|
|
128
|
-
|
|
129
|
-
type lsp_message = { method: String, id: String?, params: untyped?, result: untyped? }
|
|
130
|
-
|
|
131
|
-
class ResultHandler
|
|
132
|
-
attr_reader request: lsp_request
|
|
133
|
-
|
|
134
|
-
attr_reader completion_handler: (^(lsp_response) -> void)?
|
|
135
|
-
|
|
136
|
-
attr_reader response: lsp_response?
|
|
137
|
-
|
|
138
|
-
@completed: bool
|
|
139
|
-
|
|
140
|
-
def initialize: (request: untyped) -> void
|
|
141
|
-
|
|
142
|
-
def process_response: (lsp_response message) -> bool
|
|
143
|
-
|
|
144
|
-
def result: () -> untyped
|
|
145
|
-
|
|
146
|
-
def completed?: () -> bool
|
|
147
|
-
|
|
148
|
-
def on_completion: () ?{ (lsp_response) -> void } -> void
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
class GroupHandler
|
|
152
|
-
attr_reader request: lsp_request
|
|
153
|
-
|
|
154
|
-
attr_reader handlers: Hash[String, ResultHandler]
|
|
155
|
-
|
|
156
|
-
attr_reader completion_handler: (^(Array[ResultHandler]) -> void)?
|
|
157
|
-
|
|
158
|
-
def initialize: () -> void
|
|
159
|
-
|
|
160
|
-
def process_response: (lsp_response message) -> bool
|
|
161
|
-
|
|
162
|
-
def completed?: () -> bool
|
|
163
|
-
|
|
164
|
-
def <<: (ResultHandler handler) -> void
|
|
165
|
-
|
|
166
|
-
def on_completion: () { (Array[ResultHandler]) -> void } -> void
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
class ResultController
|
|
170
|
-
attr_reader handlers: Array[ResultHandler | GroupHandler]
|
|
171
|
-
|
|
172
|
-
def initialize: () -> void
|
|
173
|
-
|
|
174
|
-
def <<: (ResultHandler | GroupHandler handler) -> void
|
|
175
|
-
|
|
176
|
-
def request_group: () { (GroupHandler) -> void } -> GroupHandler
|
|
177
|
-
|
|
178
|
-
def process_response: (lsp_response message) -> bool
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
module MessageUtils : _WithMessage
|
|
182
|
-
interface _WithMessage
|
|
183
|
-
def message: () -> untyped
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
def request?: () -> bool
|
|
187
|
-
|
|
188
|
-
def notification?: () -> bool
|
|
189
|
-
|
|
190
|
-
def response?: () -> bool
|
|
191
|
-
|
|
192
|
-
%a{pure} def method: () -> String?
|
|
193
|
-
|
|
194
|
-
%a{pure} def id: () -> String?
|
|
195
|
-
|
|
196
|
-
%a{pure} def result: () -> untyped?
|
|
197
|
-
|
|
198
|
-
%a{pure} def params: () -> untyped?
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
class ReceiveMessageJob
|
|
202
|
-
attr_reader source: WorkerProcess | :client
|
|
203
|
-
|
|
204
|
-
attr_reader message: untyped
|
|
205
|
-
|
|
206
|
-
def initialize: (source: WorkerProcess | :client, message: untyped) -> void
|
|
207
|
-
|
|
208
|
-
include MessageUtils
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
class SendMessageJob
|
|
212
|
-
attr_reader dest: WorkerProcess | :client
|
|
213
|
-
|
|
214
|
-
attr_reader message: untyped
|
|
215
|
-
|
|
216
|
-
def initialize: (dest: WorkerProcess | :client, message: untyped) -> void
|
|
217
|
-
|
|
218
|
-
def self.to_worker: (WorkerProcess, message: untyped) -> SendMessageJob
|
|
219
|
-
|
|
220
|
-
def self.to_client: (message: untyped) -> SendMessageJob
|
|
221
|
-
|
|
222
|
-
include MessageUtils
|
|
223
|
-
end
|
|
224
|
-
|
|
225
|
-
attr_reader project: Project
|
|
226
|
-
|
|
227
|
-
attr_reader reader: LanguageServer::Protocol::Transport::Io::Reader
|
|
228
|
-
|
|
229
|
-
attr_reader writer: LanguageServer::Protocol::Transport::Io::Writer
|
|
230
|
-
|
|
231
|
-
attr_reader commandline_args: Array[String]
|
|
232
|
-
|
|
233
|
-
attr_reader interaction_worker: WorkerProcess?
|
|
234
|
-
|
|
235
|
-
attr_reader typecheck_workers: Array[WorkerProcess]
|
|
236
|
-
|
|
237
|
-
attr_reader job_queue: Thread::Queue
|
|
238
|
-
|
|
239
|
-
attr_reader current_type_check_request: TypeCheckRequest?
|
|
240
|
-
|
|
241
|
-
attr_reader controller: TypeCheckController
|
|
242
|
-
|
|
243
|
-
attr_reader result_controller: ResultController
|
|
244
|
-
|
|
245
|
-
attr_reader initialize_params: untyped
|
|
246
|
-
|
|
247
|
-
attr_accessor typecheck_automatically: bool
|
|
248
|
-
|
|
249
|
-
attr_reader start_type_checking_queue: DelayQueue
|
|
250
|
-
|
|
251
|
-
def initialize: (project: Project, reader: untyped, writer: untyped, interaction_worker: WorkerProcess?, typecheck_workers: Array[WorkerProcess], ?queue: Thread::Queue) -> void
|
|
252
|
-
|
|
253
|
-
# Start the Steep language server
|
|
254
|
-
#
|
|
255
|
-
# Returns after the language server shutdown.
|
|
256
|
-
# The shutdown process starts by `exit` message.
|
|
257
|
-
#
|
|
258
|
-
# Raises an exception if the worker processes doesn't shutdown properly, like being `#kill`-ed.
|
|
259
|
-
# Exiting the process is assumed in the case of error.
|
|
260
|
-
# The only one cleanup it does is stopping the worker processes, by `SIGKILL`.
|
|
261
|
-
#
|
|
262
|
-
def start: () -> void
|
|
263
|
-
|
|
264
|
-
# Stops the language server workers by sending SIGTERM
|
|
265
|
-
#
|
|
266
|
-
# This skips the normal shutdown process defined in LSP.
|
|
267
|
-
# The `#start` call will result in an exception.
|
|
268
|
-
#
|
|
269
|
-
def kill: () -> void
|
|
270
|
-
|
|
271
|
-
def each_worker: () { (WorkerProcess) -> void } -> void
|
|
272
|
-
| () -> Enumerator[WorkerProcess, void]
|
|
273
|
-
|
|
274
|
-
def pathname: (String uri) -> Pathname?
|
|
275
|
-
|
|
276
|
-
def work_done_progress_supported?: () -> bool
|
|
277
|
-
|
|
278
|
-
def file_system_watcher_supported?: () -> bool
|
|
279
|
-
|
|
280
|
-
def process_message_from_client: (untyped message) -> void
|
|
281
|
-
|
|
282
|
-
def process_message_from_worker: (untyped message, worker: WorkerProcess) -> void
|
|
283
|
-
|
|
284
|
-
def start_type_check: (TypeCheckRequest request, last_request: TypeCheckRequest?, start_progress: bool) -> void
|
|
285
|
-
|
|
286
|
-
def on_type_check_update: (guid: String, path: Pathname) -> void
|
|
287
|
-
|
|
288
|
-
def broadcast_notification: (lsp_notification message) -> void
|
|
289
|
-
|
|
290
|
-
def send_notification: (lsp_notification message, worker: WorkerProcess) -> void
|
|
291
|
-
|
|
292
|
-
def fresh_request_id: () -> String
|
|
293
|
-
|
|
294
|
-
def send_request: (method: String, worker: WorkerProcess, ?id: String, ?params: untyped?) ?{ (ResultHandler) -> void } -> ResultHandler
|
|
295
|
-
|
|
296
|
-
def group_request: () { (GroupHandler) -> void } -> GroupHandler
|
|
297
|
-
end
|
|
298
|
-
end
|
|
299
|
-
end
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
use Steep::Services::*, LanguageServer::Protocol as LSP
|
|
2
|
-
|
|
3
|
-
module Steep
|
|
4
|
-
module Server
|
|
5
|
-
# TypeCheckWorker provides two features:
|
|
6
|
-
#
|
|
7
|
-
# 1. Type check and validate source code invoked by `$/typecheck/start` notification
|
|
8
|
-
# 2. Language related features: `workspace/symbol`, `textDocument/definition`, `textDocument/implementation`, and `steep/stats` command
|
|
9
|
-
#
|
|
10
|
-
# `$/typecheck/start` notification is delivered to `#enqueue_typecheck_jobs` command that creates *jobs*.
|
|
11
|
-
#
|
|
12
|
-
# * `StartTypeCheckJob` applies the pending changes
|
|
13
|
-
# * `ValidateAppSignatureJob` validates an *application* RBS file
|
|
14
|
-
# * `ValidateLibrarySignatureJob` validates a *library* RBS file
|
|
15
|
-
# * `TypeCheckCodeJob` type checks a ruby code
|
|
16
|
-
#
|
|
17
|
-
class TypeCheckWorker < BaseWorker
|
|
18
|
-
attr_reader project: Project
|
|
19
|
-
|
|
20
|
-
attr_reader assignment: PathAssignment
|
|
21
|
-
|
|
22
|
-
attr_reader service: TypeCheckService
|
|
23
|
-
|
|
24
|
-
attr_reader commandline_args: Array[String]
|
|
25
|
-
|
|
26
|
-
attr_reader current_type_check_guid: String?
|
|
27
|
-
|
|
28
|
-
class WorkspaceSymbolJob
|
|
29
|
-
attr_reader id: String
|
|
30
|
-
|
|
31
|
-
attr_reader query: String
|
|
32
|
-
|
|
33
|
-
def initialize: (id: String, query: String) -> void
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
class StatsJob
|
|
37
|
-
attr_reader id: String
|
|
38
|
-
|
|
39
|
-
def initialize: (id: String) -> void
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
class StartTypeCheckJob
|
|
43
|
-
attr_reader guid: String
|
|
44
|
-
|
|
45
|
-
attr_reader changes: ChangeBuffer::changes
|
|
46
|
-
|
|
47
|
-
def initialize: (guid: String, changes: ChangeBuffer::changes) -> void
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
class TypeCheckCodeJob
|
|
51
|
-
attr_reader guid: String
|
|
52
|
-
|
|
53
|
-
attr_reader path: Pathname
|
|
54
|
-
|
|
55
|
-
def initialize: (guid: String, path: Pathname) -> void
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
class ValidateAppSignatureJob
|
|
59
|
-
attr_reader guid: String
|
|
60
|
-
|
|
61
|
-
attr_reader path: Pathname
|
|
62
|
-
|
|
63
|
-
def initialize: (guid: String, path: Pathname) -> void
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
class ValidateLibrarySignatureJob
|
|
67
|
-
attr_reader guid: String
|
|
68
|
-
|
|
69
|
-
attr_reader path: Pathname
|
|
70
|
-
|
|
71
|
-
def initialize: (guid: String, path: Pathname) -> void
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
class GotoJob
|
|
75
|
-
type kind = :implementation | :definition | :type_definition
|
|
76
|
-
|
|
77
|
-
attr_reader id: String
|
|
78
|
-
|
|
79
|
-
attr_reader kind: kind
|
|
80
|
-
|
|
81
|
-
type params = Hash[Symbol, untyped]
|
|
82
|
-
|
|
83
|
-
attr_reader params: params
|
|
84
|
-
|
|
85
|
-
def initialize: (id: String, params: params, kind: kind) -> void
|
|
86
|
-
|
|
87
|
-
def self.implementation: (id: String, params: params) -> GotoJob
|
|
88
|
-
|
|
89
|
-
def self.definition: (id: String, params: params) -> GotoJob
|
|
90
|
-
|
|
91
|
-
def self.type_definition: (id: String, params: params) -> GotoJob
|
|
92
|
-
|
|
93
|
-
def implementation?: () -> bool
|
|
94
|
-
|
|
95
|
-
def definition?: () -> bool
|
|
96
|
-
|
|
97
|
-
def type_definition?: () -> bool
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
include ChangeBuffer
|
|
101
|
-
|
|
102
|
-
def initialize: (
|
|
103
|
-
project: Project,
|
|
104
|
-
reader: LSP::Transport::Io::Reader,
|
|
105
|
-
writer: LSP::Transport::Io::Writer,
|
|
106
|
-
assignment: PathAssignment,
|
|
107
|
-
commandline_args: Array[String]
|
|
108
|
-
) -> void
|
|
109
|
-
|
|
110
|
-
def handle_request: (untyped request) -> void
|
|
111
|
-
|
|
112
|
-
type type_check_start_params = {
|
|
113
|
-
guid: String,
|
|
114
|
-
priority_uris: Array[String],
|
|
115
|
-
library_uris: Array[String],
|
|
116
|
-
signature_uris: Array[String],
|
|
117
|
-
code_uris: Array[String]
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
def enqueue_typecheck_jobs: (type_check_start_params) -> void
|
|
121
|
-
|
|
122
|
-
type job = WorkspaceSymbolJob
|
|
123
|
-
| StartTypeCheckJob
|
|
124
|
-
| TypeCheckCodeJob
|
|
125
|
-
| ValidateAppSignatureJob
|
|
126
|
-
| ValidateLibrarySignatureJob
|
|
127
|
-
| GotoJob
|
|
128
|
-
| StatsJob
|
|
129
|
-
|
|
130
|
-
def handle_job: (job) -> void
|
|
131
|
-
|
|
132
|
-
def typecheck_progress: (guid: String, path: Pathname) -> void
|
|
133
|
-
|
|
134
|
-
def workspace_symbol_result: (untyped query) -> untyped
|
|
135
|
-
|
|
136
|
-
def stats_result: () -> untyped
|
|
137
|
-
|
|
138
|
-
def goto: (GotoJob job) -> Array[untyped]
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
end
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
use LanguageServer::Protocol as LSP
|
|
2
|
-
|
|
3
|
-
module Steep
|
|
4
|
-
module Server
|
|
5
|
-
# WorkerProcess class represents a worker process
|
|
6
|
-
#
|
|
7
|
-
# Available operations are:
|
|
8
|
-
#
|
|
9
|
-
# 1. Sending a LSP message to the process
|
|
10
|
-
# 2. Receiving a LSP message from the process
|
|
11
|
-
# 3. Killing the process
|
|
12
|
-
#
|
|
13
|
-
# The process may be invoked by
|
|
14
|
-
#
|
|
15
|
-
# 1. `#fork` if available, or
|
|
16
|
-
# 2. `#spawn` otherwise
|
|
17
|
-
#
|
|
18
|
-
# `#fork` version is faster because it skips loading libraries.
|
|
19
|
-
#
|
|
20
|
-
#
|
|
21
|
-
class WorkerProcess
|
|
22
|
-
interface _ProcessWaitThread
|
|
23
|
-
def pid: () -> Integer
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
attr_reader reader: LSP::Transport::Io::Reader
|
|
27
|
-
|
|
28
|
-
attr_reader writer: LSP::Transport::Io::Writer
|
|
29
|
-
|
|
30
|
-
attr_reader stderr: IO?
|
|
31
|
-
|
|
32
|
-
attr_reader name: String
|
|
33
|
-
|
|
34
|
-
attr_reader wait_thread: Thread & _ProcessWaitThread
|
|
35
|
-
|
|
36
|
-
attr_reader index: Integer?
|
|
37
|
-
|
|
38
|
-
def initialize: (
|
|
39
|
-
reader: LSP::Transport::Io::Reader,
|
|
40
|
-
writer: LSP::Transport::Io::Writer,
|
|
41
|
-
stderr: IO?,
|
|
42
|
-
wait_thread: Thread & _ProcessWaitThread,
|
|
43
|
-
name: String,
|
|
44
|
-
?index: Integer?
|
|
45
|
-
) -> void
|
|
46
|
-
|
|
47
|
-
type worker_type = :interaction | :typecheck
|
|
48
|
-
|
|
49
|
-
def self.start_worker: (
|
|
50
|
-
worker_type `type`,
|
|
51
|
-
name: String,
|
|
52
|
-
steepfile: Pathname?,
|
|
53
|
-
steep_command: String?,
|
|
54
|
-
?patterns: Array[String],
|
|
55
|
-
?delay_shutdown: bool,
|
|
56
|
-
?index: [Integer, Integer]?
|
|
57
|
-
) -> WorkerProcess
|
|
58
|
-
|
|
59
|
-
def self.fork_worker: (
|
|
60
|
-
worker_type `type`,
|
|
61
|
-
name: String,
|
|
62
|
-
steepfile: Pathname?,
|
|
63
|
-
patterns: Array[String],
|
|
64
|
-
delay_shutdown: bool,
|
|
65
|
-
index: [Integer, Integer]?
|
|
66
|
-
) -> WorkerProcess
|
|
67
|
-
|
|
68
|
-
def self.spawn_worker: (
|
|
69
|
-
worker_type `type`,
|
|
70
|
-
name: String,
|
|
71
|
-
steepfile: Pathname?,
|
|
72
|
-
steep_command: ::String,
|
|
73
|
-
patterns: Array[String],
|
|
74
|
-
delay_shutdown: bool,
|
|
75
|
-
index: [Integer, Integer]?
|
|
76
|
-
) -> WorkerProcess
|
|
77
|
-
|
|
78
|
-
def self.start_typecheck_workers: (
|
|
79
|
-
steepfile: Pathname?,
|
|
80
|
-
args: Array[String],
|
|
81
|
-
steep_command: ::String?,
|
|
82
|
-
?count: Integer,
|
|
83
|
-
?delay_shutdown: bool
|
|
84
|
-
) -> Array[WorkerProcess]
|
|
85
|
-
|
|
86
|
-
def <<: (untyped message) -> void
|
|
87
|
-
|
|
88
|
-
def read: () { (untyped) -> void } -> void
|
|
89
|
-
|
|
90
|
-
# Stop the process by sending SIGTERM and wait for the process exit
|
|
91
|
-
#
|
|
92
|
-
# Send `SIGKILL` and returns immediately if `force:` is `true`.
|
|
93
|
-
#
|
|
94
|
-
def kill: (?force: bool) -> void
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
end
|