yoda-language-server 0.6.1 → 0.6.2
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/client/atom/main.js +50 -13
- data/lib/yoda/evaluation/current_node_explain.rb +1 -0
- data/lib/yoda/evaluation/signature_discovery.rb +2 -0
- data/lib/yoda/model/descriptions.rb +1 -0
- data/lib/yoda/model/descriptions/node_description.rb +46 -0
- data/lib/yoda/model/node_signature.rb +16 -1
- data/lib/yoda/server.rb +12 -4
- data/lib/yoda/server/hover_provider.rb +1 -0
- data/lib/yoda/server/notifier.rb +8 -0
- data/lib/yoda/store/actions/import_core_library.rb +1 -0
- data/lib/yoda/store/project/library_doc_loader.rb +1 -0
- data/lib/yoda/version.rb +1 -1
- data/yoda-language-server.gemspec +1 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 45f3bb7e65e24213b3d1c0e60110c08498d765e6a27732800d2c02e3508b03e4
|
4
|
+
data.tar.gz: 4e99d7cba046557256be92cfcf747e194086c52dedd94e7db344cc6fb8e9a2b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a278106001664f9468805400c571a333765c16f9557345d9295e2afee2a1a1a82e7d3a3022aaaefee04c7ee6b2c9d3dd23b3f634bca35c5150d5f99dd7cc8916
|
7
|
+
data.tar.gz: d13b8b7bde1b5b0dc7028f8df270186e767bae83e901885288b677ca64c9e0326ef788eed7c1578a5a0b359fb33716c89fdad2f203244fb3b14eb796d3fca465
|
data/client/atom/main.js
CHANGED
@@ -2,28 +2,27 @@ const { AutoLanguageClient } = require('atom-languageclient')
|
|
2
2
|
const { spawn } = require('child_process')
|
3
3
|
const { resolve } = require('path')
|
4
4
|
|
5
|
+
const busyMessages = {
|
6
|
+
text_document_hover: 'Preparing hover help',
|
7
|
+
text_document_signature_help: 'Preparing signature help',
|
8
|
+
text_document_completion: 'Completing',
|
9
|
+
text_document_definition: 'Finding definition',
|
10
|
+
};
|
11
|
+
|
5
12
|
class YodaClient extends AutoLanguageClient {
|
6
13
|
constructor() {
|
7
14
|
super()
|
15
|
+
this.busyHandlers = {};
|
8
16
|
}
|
9
17
|
|
10
18
|
preInitialization(connection) {
|
11
|
-
connection.onTelemetryEvent((
|
12
|
-
if (!this.busySignalService) { return; }
|
13
|
-
if (type != 'initialization') { return; }
|
14
|
-
|
15
|
-
if (this.initializationBusyMessage) {
|
16
|
-
this.initializationBusyMessage.setTitle(message);
|
17
|
-
} else {
|
18
|
-
this.initializationBusyMessage = this.busySignalService.reportBusy(message);
|
19
|
-
}
|
20
|
-
});
|
19
|
+
connection.onTelemetryEvent((event) => this.handleTelemetryEvent(event));
|
21
20
|
}
|
22
21
|
|
23
22
|
postInitialization(_server) {
|
24
|
-
if (this.
|
25
|
-
this.
|
26
|
-
this.
|
23
|
+
if (this.busyHandlers.initialization) {
|
24
|
+
this.busyHandlers.initialization.dispose();
|
25
|
+
this.busyHandlers.initialization = null;
|
27
26
|
}
|
28
27
|
}
|
29
28
|
|
@@ -52,6 +51,44 @@ class YodaClient extends AutoLanguageClient {
|
|
52
51
|
const commandOptions = { cwd: projectPath };
|
53
52
|
return spawn(this.getServerPath(), ['server'], commandOptions);
|
54
53
|
}
|
54
|
+
|
55
|
+
handleTelemetryEvent(eventBody) {
|
56
|
+
if (!this.busySignalService || !eventBody) { return; }
|
57
|
+
switch (eventBody.type) {
|
58
|
+
case 'initialization':
|
59
|
+
return this.handleInitializationEvent(eventBody);
|
60
|
+
case 'text_document_hover':
|
61
|
+
case 'text_document_completion':
|
62
|
+
case 'text_document_signature_help':
|
63
|
+
case 'text_document_completion':
|
64
|
+
return this.handleBusyEvent(eventBody.type, eventBody);
|
65
|
+
default:
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
handleInitializationEvent({ phase, message }) {
|
70
|
+
if (this.busyHandlers.initialization) {
|
71
|
+
this.busyHandlers.initialization.setTitle(message);
|
72
|
+
} else {
|
73
|
+
this.busyHandlers.initialization = this.busySignalService.reportBusy(message);
|
74
|
+
}
|
75
|
+
}
|
76
|
+
|
77
|
+
handleBusyEvent(handlerName, { phase, message }) {
|
78
|
+
switch (phase) {
|
79
|
+
case 'begin':
|
80
|
+
if (!this.busyHandlers[handlerName]) {
|
81
|
+
this.busyHandlers[handlerName] = this.busySignalService.reportBusy("(Yoda) " + busyMessages[handlerName]);
|
82
|
+
}
|
83
|
+
break;
|
84
|
+
case 'end':
|
85
|
+
if (this.busyHandlers[handlerName]) {
|
86
|
+
this.busyHandlers[handlerName].dispose();
|
87
|
+
this.busyHandlers[handlerName] = null;
|
88
|
+
}
|
89
|
+
break;
|
90
|
+
}
|
91
|
+
}
|
55
92
|
}
|
56
93
|
|
57
94
|
module.exports = new YodaClient()
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Yoda
|
2
2
|
module Evaluation
|
3
|
+
# SignatureDiscovery infers method candidates for the nearest send node and specify the number of index of these parameters.
|
4
|
+
# SignatureDiscovery shows help for the current parameter of method candidates.
|
3
5
|
class SignatureDiscovery
|
4
6
|
# @return [Store::Registry]
|
5
7
|
attr_reader :registry
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'unparser'
|
2
|
+
|
3
|
+
module Yoda
|
4
|
+
module Model
|
5
|
+
module Descriptions
|
6
|
+
class NodeDescription < Base
|
7
|
+
# @return [::Parser::AST::Node]
|
8
|
+
attr_reader :node
|
9
|
+
|
10
|
+
# @return [Typing::Traces::Base]
|
11
|
+
attr_reader :trace
|
12
|
+
|
13
|
+
# @param node [::Parser::AST::Node]
|
14
|
+
# @param trace [Typing::Traces::Base]
|
15
|
+
def initialize(node, trace)
|
16
|
+
@node = node
|
17
|
+
@trace = trace
|
18
|
+
end
|
19
|
+
|
20
|
+
# @return [String]
|
21
|
+
def title
|
22
|
+
node_body
|
23
|
+
end
|
24
|
+
|
25
|
+
# @return [String]
|
26
|
+
def sort_text
|
27
|
+
node_body
|
28
|
+
end
|
29
|
+
|
30
|
+
# @return [String]
|
31
|
+
def to_markdown
|
32
|
+
<<~EOS
|
33
|
+
#{node_body.gsub("\n", ";")}: #{trace.type}
|
34
|
+
EOS
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
# @return [String]
|
40
|
+
def node_body
|
41
|
+
@node_body ||= Unparser.unparse(node)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -1,7 +1,12 @@
|
|
1
1
|
module Yoda
|
2
2
|
module Model
|
3
3
|
class NodeSignature
|
4
|
-
|
4
|
+
# @return [::Parser::AST::Node]
|
5
|
+
attr_reader :node
|
6
|
+
|
7
|
+
# @return [Typing::Traces::Base]
|
8
|
+
attr_reader :trace
|
9
|
+
|
5
10
|
# @param node [::Parser::AST::Node]
|
6
11
|
# @param trace [Typing::Traces::Base]
|
7
12
|
def initialize(node, trace)
|
@@ -16,6 +21,16 @@ module Yoda
|
|
16
21
|
|
17
22
|
# @return [Array<Descriptions::Base>]
|
18
23
|
def descriptions
|
24
|
+
[top_description, *type_descriptions]
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [Descriptions::NodeDescription]
|
28
|
+
def top_description
|
29
|
+
Descriptions::NodeDescription.new(node, trace)
|
30
|
+
end
|
31
|
+
|
32
|
+
# @return [Array<Descriptions::Base>]
|
33
|
+
def type_descriptions
|
19
34
|
case trace
|
20
35
|
when Typing::Traces::Send
|
21
36
|
trace.functions.map { |function| Descriptions::FunctionDescription.new(function) }.take(1)
|
data/lib/yoda/server.rb
CHANGED
@@ -213,28 +213,36 @@ module Yoda
|
|
213
213
|
uri = params[:text_document][:uri]
|
214
214
|
position = params[:position]
|
215
215
|
|
216
|
-
|
216
|
+
notifier.busy(type: :text_document_completion) do
|
217
|
+
completion_provider&.complete(uri, position)
|
218
|
+
end
|
217
219
|
end
|
218
220
|
|
219
221
|
def handle_text_document_hover(params)
|
220
222
|
uri = params[:text_document][:uri]
|
221
223
|
position = params[:position]
|
222
224
|
|
223
|
-
|
225
|
+
notifier.busy(type: :text_document_hover) do
|
226
|
+
hover_provider&.request_hover(uri, position)
|
227
|
+
end
|
224
228
|
end
|
225
229
|
|
226
230
|
def handle_text_document_signature_help(params)
|
227
231
|
uri = params[:text_document][:uri]
|
228
232
|
position = params[:position]
|
229
233
|
|
230
|
-
|
234
|
+
notifier.busy(type: :text_document_signature_help) do
|
235
|
+
signature_provider&.provide(uri, position)
|
236
|
+
end
|
231
237
|
end
|
232
238
|
|
233
239
|
def handle_text_document_definition(params)
|
234
240
|
uri = params[:text_document][:uri]
|
235
241
|
position = params[:position]
|
236
242
|
|
237
|
-
|
243
|
+
notifier.busy(type: :text_document_definition) do
|
244
|
+
definition_provider&.provide(uri, position)
|
245
|
+
end
|
238
246
|
end
|
239
247
|
end
|
240
248
|
include TextDocument
|
data/lib/yoda/server/notifier.rb
CHANGED
@@ -6,6 +6,14 @@ module Yoda
|
|
6
6
|
@server = server
|
7
7
|
end
|
8
8
|
|
9
|
+
# @param type [Symbol]
|
10
|
+
def busy(type:)
|
11
|
+
event(type: type, phase: :begin)
|
12
|
+
yield
|
13
|
+
ensure
|
14
|
+
event(type: type, phase: :end)
|
15
|
+
end
|
16
|
+
|
9
17
|
# @param params [Hash]
|
10
18
|
def event(params)
|
11
19
|
server.send_notification(method: 'telemetry/event', params: params)
|
@@ -58,6 +58,7 @@ module Yoda
|
|
58
58
|
unless bundle_status.all_present?
|
59
59
|
Logger.info 'Constructing database for the current project.'
|
60
60
|
bundle_status = import_deps(bundle_status)
|
61
|
+
Instrument.instance.initialization_progress(phase: :save, message: 'Saving registry')
|
61
62
|
registry.compress_and_save
|
62
63
|
end
|
63
64
|
bundle_status
|
data/lib/yoda/version.rb
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_dependency 'thor', '~> 0.20.0'
|
26
26
|
spec.add_dependency 'parslet', '~> 1.8'
|
27
27
|
spec.add_dependency 'parser', '~> 2.0'
|
28
|
+
spec.add_dependency 'unparser', '~> 0.2.6'
|
28
29
|
spec.add_dependency 'language_server-protocol', '~> 3.7.0.0'
|
29
30
|
spec.add_dependency 'leveldb', '~> 0.1.9'
|
30
31
|
spec.add_dependency 'lmdb', '~> 0.4.8'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yoda-language-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomoya Chiba
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: yard
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '2.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: unparser
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.2.6
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.2.6
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: language_server-protocol
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -298,6 +312,7 @@ files:
|
|
298
312
|
- lib/yoda/model/descriptions.rb
|
299
313
|
- lib/yoda/model/descriptions/base.rb
|
300
314
|
- lib/yoda/model/descriptions/function_description.rb
|
315
|
+
- lib/yoda/model/descriptions/node_description.rb
|
301
316
|
- lib/yoda/model/descriptions/value_description.rb
|
302
317
|
- lib/yoda/model/descriptions/word_description.rb
|
303
318
|
- lib/yoda/model/function_signatures.rb
|