solargraph 0.58.1 → 0.59.0.dev.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/.envrc +3 -0
- data/.github/workflows/linting.yml +4 -5
- data/.github/workflows/plugins.yml +40 -36
- data/.github/workflows/rspec.yml +45 -13
- data/.github/workflows/typecheck.yml +2 -2
- data/.rubocop_todo.yml +27 -49
- data/README.md +3 -3
- data/Rakefile +1 -0
- data/lib/solargraph/api_map/cache.rb +110 -110
- data/lib/solargraph/api_map/constants.rb +289 -279
- data/lib/solargraph/api_map/index.rb +204 -193
- data/lib/solargraph/api_map/source_to_yard.rb +109 -97
- data/lib/solargraph/api_map/store.rb +387 -384
- data/lib/solargraph/api_map.rb +1000 -945
- data/lib/solargraph/complex_type/conformance.rb +176 -0
- data/lib/solargraph/complex_type/type_methods.rb +242 -228
- data/lib/solargraph/complex_type/unique_type.rb +632 -482
- data/lib/solargraph/complex_type.rb +549 -444
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +93 -91
- data/lib/solargraph/convention/data_definition.rb +108 -105
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +62 -61
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +103 -102
- data/lib/solargraph/convention/struct_definition.rb +168 -164
- data/lib/solargraph/diagnostics/require_not_found.rb +54 -53
- data/lib/solargraph/diagnostics/rubocop.rb +119 -118
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +70 -68
- data/lib/solargraph/diagnostics/type_check.rb +56 -55
- data/lib/solargraph/doc_map.rb +200 -439
- data/lib/solargraph/equality.rb +34 -34
- data/lib/solargraph/gem_pins.rb +97 -98
- data/lib/solargraph/language_server/host/dispatch.rb +131 -130
- data/lib/solargraph/language_server/host/message_worker.rb +113 -112
- data/lib/solargraph/language_server/host/sources.rb +100 -99
- data/lib/solargraph/language_server/host.rb +883 -878
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +109 -114
- data/lib/solargraph/language_server/message/extended/document.rb +24 -23
- data/lib/solargraph/language_server/message/text_document/completion.rb +58 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +42 -40
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +28 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
- data/lib/solargraph/language_server/message/text_document/hover.rb +60 -58
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +25 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +27 -25
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +25 -23
- data/lib/solargraph/library.rb +729 -683
- data/lib/solargraph/location.rb +87 -82
- data/lib/solargraph/logging.rb +57 -37
- data/lib/solargraph/parser/comment_ripper.rb +76 -69
- data/lib/solargraph/parser/flow_sensitive_typing.rb +483 -255
- data/lib/solargraph/parser/node_processor/base.rb +122 -92
- data/lib/solargraph/parser/node_processor.rb +63 -62
- data/lib/solargraph/parser/parser_gem/class_methods.rb +167 -149
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
- data/lib/solargraph/parser/parser_gem/node_methods.rb +506 -486
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +61 -59
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +24 -15
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +60 -53
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +41 -40
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +30 -29
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +61 -59
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
- data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +39 -38
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +53 -52
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +296 -291
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +33 -29
- data/lib/solargraph/parser/parser_gem/node_processors.rb +74 -70
- data/lib/solargraph/parser/region.rb +75 -69
- data/lib/solargraph/parser/snippet.rb +17 -17
- data/lib/solargraph/pin/base.rb +761 -729
- data/lib/solargraph/pin/base_variable.rb +418 -126
- data/lib/solargraph/pin/block.rb +126 -104
- data/lib/solargraph/pin/breakable.rb +13 -9
- data/lib/solargraph/pin/callable.rb +278 -231
- data/lib/solargraph/pin/closure.rb +68 -72
- data/lib/solargraph/pin/common.rb +94 -79
- data/lib/solargraph/pin/compound_statement.rb +55 -0
- data/lib/solargraph/pin/conversions.rb +124 -123
- data/lib/solargraph/pin/delegated_method.rb +131 -120
- data/lib/solargraph/pin/documenting.rb +115 -114
- data/lib/solargraph/pin/instance_variable.rb +38 -34
- data/lib/solargraph/pin/keyword.rb +16 -20
- data/lib/solargraph/pin/local_variable.rb +31 -75
- data/lib/solargraph/pin/method.rb +720 -672
- data/lib/solargraph/pin/method_alias.rb +42 -34
- data/lib/solargraph/pin/namespace.rb +121 -115
- data/lib/solargraph/pin/parameter.rb +338 -275
- data/lib/solargraph/pin/proxy_type.rb +40 -39
- data/lib/solargraph/pin/reference/override.rb +47 -47
- data/lib/solargraph/pin/reference/superclass.rb +17 -15
- data/lib/solargraph/pin/reference.rb +41 -39
- data/lib/solargraph/pin/search.rb +62 -61
- data/lib/solargraph/pin/signature.rb +69 -61
- data/lib/solargraph/pin/symbol.rb +53 -53
- data/lib/solargraph/pin/until.rb +18 -18
- data/lib/solargraph/pin/while.rb +18 -18
- data/lib/solargraph/pin.rb +46 -44
- data/lib/solargraph/pin_cache.rb +665 -245
- data/lib/solargraph/position.rb +118 -119
- data/lib/solargraph/range.rb +112 -112
- data/lib/solargraph/rbs_map/conversions.rb +846 -823
- data/lib/solargraph/rbs_map/core_map.rb +65 -58
- data/lib/solargraph/rbs_map/stdlib_map.rb +72 -43
- data/lib/solargraph/rbs_map.rb +217 -163
- data/lib/solargraph/shell.rb +397 -352
- data/lib/solargraph/source/chain/call.rb +372 -337
- data/lib/solargraph/source/chain/constant.rb +28 -26
- data/lib/solargraph/source/chain/hash.rb +35 -34
- data/lib/solargraph/source/chain/if.rb +29 -28
- data/lib/solargraph/source/chain/instance_variable.rb +34 -13
- data/lib/solargraph/source/chain/literal.rb +53 -48
- data/lib/solargraph/source/chain/or.rb +31 -23
- data/lib/solargraph/source/chain.rb +294 -291
- data/lib/solargraph/source/change.rb +89 -82
- data/lib/solargraph/source/cursor.rb +172 -166
- data/lib/solargraph/source/source_chainer.rb +204 -194
- data/lib/solargraph/source/updater.rb +59 -55
- data/lib/solargraph/source.rb +524 -498
- data/lib/solargraph/source_map/clip.rb +237 -226
- data/lib/solargraph/source_map/data.rb +37 -34
- data/lib/solargraph/source_map/mapper.rb +282 -259
- data/lib/solargraph/source_map.rb +220 -212
- data/lib/solargraph/type_checker/problem.rb +34 -32
- data/lib/solargraph/type_checker/rules.rb +157 -84
- data/lib/solargraph/type_checker.rb +895 -814
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +257 -255
- data/lib/solargraph/workspace/gemspecs.rb +367 -0
- data/lib/solargraph/workspace/require_paths.rb +98 -97
- data/lib/solargraph/workspace.rb +362 -220
- data/lib/solargraph/yard_map/helpers.rb +45 -44
- data/lib/solargraph/yard_map/mapper/to_method.rb +134 -130
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
- data/lib/solargraph/yard_map/mapper.rb +84 -79
- data/lib/solargraph/yardoc.rb +97 -87
- data/lib/solargraph.rb +126 -105
- data/rbs/fills/rubygems/0/dependency.rbs +193 -0
- data/rbs/fills/tuple/tuple.rbs +28 -0
- data/rbs/shims/ast/0/node.rbs +5 -0
- data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
- data/rbs_collection.yaml +1 -1
- data/solargraph.gemspec +2 -1
- metadata +22 -17
- data/lib/solargraph/type_checker/checks.rb +0 -124
- data/lib/solargraph/type_checker/param_def.rb +0 -37
- data/lib/solargraph/yard_map/to_method.rb +0 -89
- data/sig/shims/ast/0/node.rbs +0 -5
- /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
|
@@ -1,112 +1,113 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module LanguageServer
|
|
5
|
-
class Host
|
|
6
|
-
# A serial worker Thread to handle incoming messages.
|
|
7
|
-
#
|
|
8
|
-
class MessageWorker
|
|
9
|
-
UPDATE_METHODS = [
|
|
10
|
-
'textDocument/didChange',
|
|
11
|
-
'textDocument/didClose',
|
|
12
|
-
'textDocument/didOpen',
|
|
13
|
-
'textDocument/didSave',
|
|
14
|
-
'workspace/didChangeConfiguration',
|
|
15
|
-
'workspace/didChangeWatchedFiles',
|
|
16
|
-
'workspace/didCreateFiles',
|
|
17
|
-
'workspace/didChangeWorkspaceFolders',
|
|
18
|
-
'workspace/didDeleteFiles',
|
|
19
|
-
'workspace/didRenameFiles'
|
|
20
|
-
].freeze
|
|
21
|
-
|
|
22
|
-
# @param host [Host]
|
|
23
|
-
def initialize(host)
|
|
24
|
-
@host = host
|
|
25
|
-
@mutex = Mutex.new
|
|
26
|
-
@resource = ConditionVariable.new
|
|
27
|
-
@stopped = true
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# pending handle messages
|
|
31
|
-
# @return [Array<Hash>]
|
|
32
|
-
def messages
|
|
33
|
-
@messages ||= []
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def stopped?
|
|
37
|
-
@stopped
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# @return [void]
|
|
41
|
-
def stop
|
|
42
|
-
@stopped = true
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# @param message [Hash] The message to handle. Will be forwarded to Host#receive
|
|
46
|
-
# @return [void]
|
|
47
|
-
def queue(message)
|
|
48
|
-
@mutex.synchronize do
|
|
49
|
-
messages.push(message)
|
|
50
|
-
@resource.signal
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# @return [void]
|
|
55
|
-
def start
|
|
56
|
-
return unless @stopped
|
|
57
|
-
@stopped = false
|
|
58
|
-
Thread.new do
|
|
59
|
-
tick until stopped?
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# @return [void]
|
|
64
|
-
def tick
|
|
65
|
-
message = @mutex.synchronize do
|
|
66
|
-
@resource.wait(@mutex) if messages.empty?
|
|
67
|
-
next_message
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
handler
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
messages
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
#
|
|
102
|
-
#
|
|
103
|
-
#
|
|
104
|
-
# @
|
|
105
|
-
# @
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module LanguageServer
|
|
5
|
+
class Host
|
|
6
|
+
# A serial worker Thread to handle incoming messages.
|
|
7
|
+
#
|
|
8
|
+
class MessageWorker
|
|
9
|
+
UPDATE_METHODS = [
|
|
10
|
+
'textDocument/didChange',
|
|
11
|
+
'textDocument/didClose',
|
|
12
|
+
'textDocument/didOpen',
|
|
13
|
+
'textDocument/didSave',
|
|
14
|
+
'workspace/didChangeConfiguration',
|
|
15
|
+
'workspace/didChangeWatchedFiles',
|
|
16
|
+
'workspace/didCreateFiles',
|
|
17
|
+
'workspace/didChangeWorkspaceFolders',
|
|
18
|
+
'workspace/didDeleteFiles',
|
|
19
|
+
'workspace/didRenameFiles'
|
|
20
|
+
].freeze
|
|
21
|
+
|
|
22
|
+
# @param host [Host]
|
|
23
|
+
def initialize(host)
|
|
24
|
+
@host = host
|
|
25
|
+
@mutex = Mutex.new
|
|
26
|
+
@resource = ConditionVariable.new
|
|
27
|
+
@stopped = true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# pending handle messages
|
|
31
|
+
# @return [Array<Hash{String => undefined}>]
|
|
32
|
+
def messages
|
|
33
|
+
@messages ||= []
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def stopped?
|
|
37
|
+
@stopped
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# @return [void]
|
|
41
|
+
def stop
|
|
42
|
+
@stopped = true
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# @param message [Hash] The message to handle. Will be forwarded to Host#receive
|
|
46
|
+
# @return [void]
|
|
47
|
+
def queue(message)
|
|
48
|
+
@mutex.synchronize do
|
|
49
|
+
messages.push(message)
|
|
50
|
+
@resource.signal
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# @return [void]
|
|
55
|
+
def start
|
|
56
|
+
return unless @stopped
|
|
57
|
+
@stopped = false
|
|
58
|
+
Thread.new do
|
|
59
|
+
tick until stopped?
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# @return [void]
|
|
64
|
+
def tick
|
|
65
|
+
message = @mutex.synchronize do
|
|
66
|
+
@resource.wait(@mutex) if messages.empty?
|
|
67
|
+
next_message
|
|
68
|
+
end
|
|
69
|
+
# @sg-ignore Need to add nil check here
|
|
70
|
+
handler = @host.receive(message)
|
|
71
|
+
handler&.send_response
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
# @return [Hash, nil]
|
|
77
|
+
def next_message
|
|
78
|
+
cancel_message || next_priority
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# @return [Hash, nil]
|
|
82
|
+
def cancel_message
|
|
83
|
+
# Handle cancellations first
|
|
84
|
+
idx = messages.find_index { |msg| msg['method'] == '$/cancelRequest' }
|
|
85
|
+
return unless idx
|
|
86
|
+
|
|
87
|
+
msg = messages[idx]
|
|
88
|
+
messages.delete_at idx
|
|
89
|
+
msg
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# @return [Hash, nil]
|
|
93
|
+
def next_priority
|
|
94
|
+
# Prioritize updates and version-dependent messages for performance
|
|
95
|
+
idx = messages.find_index do |msg|
|
|
96
|
+
UPDATE_METHODS.include?(msg['method']) || version_dependent?(msg)
|
|
97
|
+
end
|
|
98
|
+
idx ? messages.delete_at(idx) : messages.shift
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# True if the message requires a previous update to have executed in
|
|
102
|
+
# order to work correctly.
|
|
103
|
+
#
|
|
104
|
+
# @param msg [Hash{String => Object}]
|
|
105
|
+
# @todo need boolish type from RBS
|
|
106
|
+
# @return [Object]
|
|
107
|
+
def version_dependent? msg
|
|
108
|
+
msg['textDocument'] && msg['position']
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
@@ -1,99 +1,100 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'observer'
|
|
4
|
-
|
|
5
|
-
module Solargraph
|
|
6
|
-
module LanguageServer
|
|
7
|
-
class Host
|
|
8
|
-
# A Host class for managing sources.
|
|
9
|
-
#
|
|
10
|
-
class Sources
|
|
11
|
-
include Observable
|
|
12
|
-
include UriHelpers
|
|
13
|
-
|
|
14
|
-
# @param uri [String]
|
|
15
|
-
# @return [void]
|
|
16
|
-
def add_uri(uri)
|
|
17
|
-
queue.push(uri)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
# Open a source.
|
|
21
|
-
#
|
|
22
|
-
# @param uri [String]
|
|
23
|
-
# @param text [String]
|
|
24
|
-
# @param version [Integer]
|
|
25
|
-
# @return [Source]
|
|
26
|
-
def open uri, text, version
|
|
27
|
-
filename = uri_to_file(uri)
|
|
28
|
-
source = Solargraph::Source.new(text, filename, version)
|
|
29
|
-
open_source_hash[uri] = source
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# @param uri [String]
|
|
33
|
-
# @return [void]
|
|
34
|
-
def open_from_disk uri
|
|
35
|
-
source = Solargraph::Source.load(UriHelpers.uri_to_file(uri))
|
|
36
|
-
open_source_hash[uri] = source
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# Update an existing source.
|
|
40
|
-
#
|
|
41
|
-
# @raise [FileNotFoundError] if the URI does not match an open source.
|
|
42
|
-
#
|
|
43
|
-
# @param uri [String]
|
|
44
|
-
# @param updater [Source::Updater]
|
|
45
|
-
# @return [void]
|
|
46
|
-
def update uri, updater
|
|
47
|
-
src = find(uri)
|
|
48
|
-
open_source_hash[uri] = src.synchronize(updater)
|
|
49
|
-
changed
|
|
50
|
-
notify_observers uri
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Find the source with the given URI.
|
|
54
|
-
#
|
|
55
|
-
# @raise [FileNotFoundError] if the URI does not match an open source.
|
|
56
|
-
#
|
|
57
|
-
# @param uri [String]
|
|
58
|
-
# @
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
#
|
|
65
|
-
#
|
|
66
|
-
# @
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
#
|
|
73
|
-
# @
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
#
|
|
92
|
-
#
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'observer'
|
|
4
|
+
|
|
5
|
+
module Solargraph
|
|
6
|
+
module LanguageServer
|
|
7
|
+
class Host
|
|
8
|
+
# A Host class for managing sources.
|
|
9
|
+
#
|
|
10
|
+
class Sources
|
|
11
|
+
include Observable
|
|
12
|
+
include UriHelpers
|
|
13
|
+
|
|
14
|
+
# @param uri [String]
|
|
15
|
+
# @return [void]
|
|
16
|
+
def add_uri(uri)
|
|
17
|
+
queue.push(uri)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Open a source.
|
|
21
|
+
#
|
|
22
|
+
# @param uri [String]
|
|
23
|
+
# @param text [String]
|
|
24
|
+
# @param version [Integer]
|
|
25
|
+
# @return [Source]
|
|
26
|
+
def open uri, text, version
|
|
27
|
+
filename = uri_to_file(uri)
|
|
28
|
+
source = Solargraph::Source.new(text, filename, version)
|
|
29
|
+
open_source_hash[uri] = source
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# @param uri [String]
|
|
33
|
+
# @return [void]
|
|
34
|
+
def open_from_disk uri
|
|
35
|
+
source = Solargraph::Source.load(UriHelpers.uri_to_file(uri))
|
|
36
|
+
open_source_hash[uri] = source
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Update an existing source.
|
|
40
|
+
#
|
|
41
|
+
# @raise [FileNotFoundError] if the URI does not match an open source.
|
|
42
|
+
#
|
|
43
|
+
# @param uri [String]
|
|
44
|
+
# @param updater [Source::Updater]
|
|
45
|
+
# @return [void]
|
|
46
|
+
def update uri, updater
|
|
47
|
+
src = find(uri)
|
|
48
|
+
open_source_hash[uri] = src.synchronize(updater)
|
|
49
|
+
changed
|
|
50
|
+
notify_observers uri
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Find the source with the given URI.
|
|
54
|
+
#
|
|
55
|
+
# @raise [FileNotFoundError] if the URI does not match an open source.
|
|
56
|
+
#
|
|
57
|
+
# @param uri [String]
|
|
58
|
+
# @sg-ignore flow ensitive typing should understand raise
|
|
59
|
+
# @return [Solargraph::Source]
|
|
60
|
+
def find uri
|
|
61
|
+
open_source_hash[uri] || raise(Solargraph::FileNotFoundError, "Host could not find #{uri}")
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Close the source with the given URI.
|
|
65
|
+
#
|
|
66
|
+
# @param uri [String]
|
|
67
|
+
# @return [void]
|
|
68
|
+
def close uri
|
|
69
|
+
open_source_hash.delete uri
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# True if a source with given URI is currently open.
|
|
73
|
+
# @param uri [String]
|
|
74
|
+
# @return [Boolean]
|
|
75
|
+
def include? uri
|
|
76
|
+
open_source_hash.key? uri
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# @return [void]
|
|
80
|
+
def clear
|
|
81
|
+
open_source_hash.clear
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
private
|
|
85
|
+
|
|
86
|
+
# @return [Hash{String => Solargraph::Source}]
|
|
87
|
+
def open_source_hash
|
|
88
|
+
@open_source_hash ||= {}
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# An array of source URIs that are waiting to finish synchronizing.
|
|
92
|
+
#
|
|
93
|
+
# @return [::Array<String>]
|
|
94
|
+
def queue
|
|
95
|
+
@queue ||= []
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|