solargraph 0.58.1 → 0.58.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/.gitignore +1 -0
- data/CHANGELOG.md +7 -1
- data/lib/solargraph/api_map/cache.rb +110 -110
- data/lib/solargraph/api_map/constants.rb +279 -279
- data/lib/solargraph/api_map/index.rb +193 -193
- data/lib/solargraph/api_map/source_to_yard.rb +97 -97
- data/lib/solargraph/api_map/store.rb +384 -384
- data/lib/solargraph/api_map.rb +945 -945
- data/lib/solargraph/complex_type/type_methods.rb +228 -228
- data/lib/solargraph/complex_type/unique_type.rb +482 -482
- data/lib/solargraph/complex_type.rb +444 -444
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -91
- data/lib/solargraph/convention/data_definition.rb +105 -105
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -61
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -102
- data/lib/solargraph/convention/struct_definition.rb +164 -164
- data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
- data/lib/solargraph/diagnostics/rubocop.rb +118 -118
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -68
- data/lib/solargraph/diagnostics/type_check.rb +55 -55
- data/lib/solargraph/doc_map.rb +439 -439
- data/lib/solargraph/equality.rb +34 -34
- data/lib/solargraph/gem_pins.rb +98 -98
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +130 -130
- data/lib/solargraph/language_server/host/message_worker.rb +112 -112
- data/lib/solargraph/language_server/host/sources.rb +99 -99
- data/lib/solargraph/language_server/host.rb +878 -878
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -114
- data/lib/solargraph/language_server/message/extended/document.rb +23 -23
- data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +40 -40
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -148
- data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -25
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
- data/lib/solargraph/library.rb +683 -683
- data/lib/solargraph/location.rb +82 -82
- data/lib/solargraph/logging.rb +37 -37
- data/lib/solargraph/parser/comment_ripper.rb +69 -69
- data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -255
- data/lib/solargraph/parser/node_processor/base.rb +92 -92
- data/lib/solargraph/parser/node_processor.rb +62 -62
- data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -149
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -166
- data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -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 +59 -59
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -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 +53 -53
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -23
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -40
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -59
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -38
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -52
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -291
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -70
- data/lib/solargraph/parser/region.rb +69 -69
- data/lib/solargraph/parser/snippet.rb +17 -17
- data/lib/solargraph/pin/base.rb +729 -729
- data/lib/solargraph/pin/base_variable.rb +126 -126
- data/lib/solargraph/pin/block.rb +104 -104
- data/lib/solargraph/pin/breakable.rb +9 -9
- data/lib/solargraph/pin/callable.rb +231 -231
- data/lib/solargraph/pin/closure.rb +72 -72
- data/lib/solargraph/pin/common.rb +79 -79
- data/lib/solargraph/pin/conversions.rb +123 -123
- data/lib/solargraph/pin/delegated_method.rb +120 -120
- data/lib/solargraph/pin/documenting.rb +114 -114
- data/lib/solargraph/pin/instance_variable.rb +34 -34
- data/lib/solargraph/pin/keyword.rb +20 -20
- data/lib/solargraph/pin/local_variable.rb +75 -75
- data/lib/solargraph/pin/method.rb +672 -672
- data/lib/solargraph/pin/method_alias.rb +34 -34
- data/lib/solargraph/pin/namespace.rb +115 -115
- data/lib/solargraph/pin/parameter.rb +275 -275
- data/lib/solargraph/pin/proxy_type.rb +39 -39
- data/lib/solargraph/pin/reference/override.rb +47 -47
- data/lib/solargraph/pin/reference/superclass.rb +15 -15
- data/lib/solargraph/pin/reference.rb +39 -39
- data/lib/solargraph/pin/search.rb +61 -61
- data/lib/solargraph/pin/signature.rb +61 -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 +44 -44
- data/lib/solargraph/pin_cache.rb +245 -245
- data/lib/solargraph/position.rb +132 -119
- data/lib/solargraph/range.rb +112 -112
- data/lib/solargraph/rbs_map/conversions.rb +823 -823
- data/lib/solargraph/rbs_map/core_map.rb +58 -58
- data/lib/solargraph/rbs_map/stdlib_map.rb +43 -43
- data/lib/solargraph/rbs_map.rb +163 -163
- data/lib/solargraph/shell.rb +352 -352
- data/lib/solargraph/source/chain/call.rb +337 -337
- data/lib/solargraph/source/chain/constant.rb +26 -26
- data/lib/solargraph/source/chain/hash.rb +34 -34
- data/lib/solargraph/source/chain/if.rb +28 -28
- data/lib/solargraph/source/chain/instance_variable.rb +13 -13
- data/lib/solargraph/source/chain/literal.rb +48 -48
- data/lib/solargraph/source/chain/or.rb +23 -23
- data/lib/solargraph/source/chain.rb +291 -291
- data/lib/solargraph/source/change.rb +82 -82
- data/lib/solargraph/source/cursor.rb +166 -166
- data/lib/solargraph/source/source_chainer.rb +194 -194
- data/lib/solargraph/source/updater.rb +55 -55
- data/lib/solargraph/source.rb +498 -498
- data/lib/solargraph/source_map/clip.rb +226 -226
- data/lib/solargraph/source_map/data.rb +34 -34
- data/lib/solargraph/source_map/mapper.rb +259 -259
- data/lib/solargraph/source_map.rb +212 -212
- data/lib/solargraph/type_checker/checks.rb +124 -124
- data/lib/solargraph/type_checker/param_def.rb +37 -37
- data/lib/solargraph/type_checker/problem.rb +32 -32
- data/lib/solargraph/type_checker/rules.rb +84 -84
- data/lib/solargraph/type_checker.rb +814 -814
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +255 -255
- data/lib/solargraph/workspace/require_paths.rb +97 -97
- data/lib/solargraph/workspace.rb +220 -220
- data/lib/solargraph/yard_map/helpers.rb +44 -44
- data/lib/solargraph/yard_map/mapper/to_method.rb +130 -130
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -31
- data/lib/solargraph/yard_map/mapper.rb +79 -79
- data/lib/solargraph/yard_map/to_method.rb +89 -89
- data/lib/solargraph/yardoc.rb +87 -87
- data/lib/solargraph.rb +105 -105
- data/rbs_collection.yaml +1 -1
- metadata +12 -12
- /data/{sig → rbs}/shims/ast/0/node.rbs +0 -0
- /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,114 +1,114 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
# @todo PR the RBS gem to add this
|
|
5
|
-
# @!parse
|
|
6
|
-
# module ::Gem
|
|
7
|
-
# class SpecFetcher; end
|
|
8
|
-
# end
|
|
9
|
-
|
|
10
|
-
module Solargraph
|
|
11
|
-
module LanguageServer
|
|
12
|
-
module Message
|
|
13
|
-
module Extended
|
|
14
|
-
# Check if a more recent version of the Solargraph gem is available.
|
|
15
|
-
# Notify the client when an update exists. If the `verbose` parameter
|
|
16
|
-
# is true, notify the client when the gem is up to date.
|
|
17
|
-
#
|
|
18
|
-
class CheckGemVersion < Base
|
|
19
|
-
# @return [Gem::SpecFetcher]
|
|
20
|
-
def self.fetcher
|
|
21
|
-
@fetcher ||= Gem::SpecFetcher.new
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# @param obj [Gem::SpecFetcher]
|
|
25
|
-
# @return [Gem::SpecFetcher]
|
|
26
|
-
def self.fetcher= obj
|
|
27
|
-
@fetcher = obj
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
GEM_ZERO = Gem::Version.new('0.0.0')
|
|
31
|
-
|
|
32
|
-
# @param host [Solargraph::LanguageServer::Host]
|
|
33
|
-
# @param request [Hash]
|
|
34
|
-
# @param current [Gem::Version]
|
|
35
|
-
# @param available [Gem::Version, nil]
|
|
36
|
-
def initialize host, request, current: Gem::Version.new(Solargraph::VERSION), available: nil
|
|
37
|
-
super(host, request)
|
|
38
|
-
@current = current
|
|
39
|
-
@available = available
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def process
|
|
43
|
-
if available > GEM_ZERO
|
|
44
|
-
if available > current
|
|
45
|
-
host.show_message_request "Solargraph gem version #{available} is available. (Current version: #{current})",
|
|
46
|
-
LanguageServer::MessageTypes::INFO,
|
|
47
|
-
['Update now'] do |result|
|
|
48
|
-
next unless result == 'Update now'
|
|
49
|
-
cmd = if host.options['useBundler']
|
|
50
|
-
'bundle update solargraph'
|
|
51
|
-
else
|
|
52
|
-
'gem update solargraph'
|
|
53
|
-
end
|
|
54
|
-
o, s = Open3.capture2(cmd)
|
|
55
|
-
if s == 0
|
|
56
|
-
host.show_message 'Successfully updated the Solargraph gem.', LanguageServer::MessageTypes::INFO
|
|
57
|
-
host.send_notification '$/solargraph/restart', {}
|
|
58
|
-
else
|
|
59
|
-
host.show_message 'An error occurred while updating the gem.', LanguageServer::MessageTypes::ERROR
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
elsif params['verbose']
|
|
63
|
-
host.show_message "The Solargraph gem is up to date (version #{Solargraph::VERSION})."
|
|
64
|
-
end
|
|
65
|
-
elsif fetched?
|
|
66
|
-
Solargraph::Logging.logger.warn error
|
|
67
|
-
host.show_message(error, MessageTypes::ERROR) if params['verbose']
|
|
68
|
-
end
|
|
69
|
-
set_result({
|
|
70
|
-
installed: current,
|
|
71
|
-
available: available
|
|
72
|
-
})
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
private
|
|
76
|
-
|
|
77
|
-
# @return [Gem::Version]
|
|
78
|
-
attr_reader :current
|
|
79
|
-
|
|
80
|
-
# @return [Gem::Version]
|
|
81
|
-
def available
|
|
82
|
-
if !@available && !@fetched
|
|
83
|
-
@fetched = true
|
|
84
|
-
begin
|
|
85
|
-
@available ||= begin
|
|
86
|
-
# @sg-ignore Variable type could not be inferred for tuple
|
|
87
|
-
# @type [Gem::Dependency, nil]
|
|
88
|
-
tuple = CheckGemVersion.fetcher.search_for_dependency(Gem::Dependency.new('solargraph')).flatten.first
|
|
89
|
-
if tuple.nil?
|
|
90
|
-
@error = 'An error occurred fetching the gem data'
|
|
91
|
-
GEM_ZERO
|
|
92
|
-
else
|
|
93
|
-
tuple.version
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
rescue Errno::EADDRNOTAVAIL => e
|
|
97
|
-
@error = "Unable to connect to gem source: #{e.message}"
|
|
98
|
-
GEM_ZERO
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
@available
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def fetched?
|
|
105
|
-
@fetched ||= false
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
# @return [String, nil]
|
|
109
|
-
attr_reader :error
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
# @todo PR the RBS gem to add this
|
|
5
|
+
# @!parse
|
|
6
|
+
# module ::Gem
|
|
7
|
+
# class SpecFetcher; end
|
|
8
|
+
# end
|
|
9
|
+
|
|
10
|
+
module Solargraph
|
|
11
|
+
module LanguageServer
|
|
12
|
+
module Message
|
|
13
|
+
module Extended
|
|
14
|
+
# Check if a more recent version of the Solargraph gem is available.
|
|
15
|
+
# Notify the client when an update exists. If the `verbose` parameter
|
|
16
|
+
# is true, notify the client when the gem is up to date.
|
|
17
|
+
#
|
|
18
|
+
class CheckGemVersion < Base
|
|
19
|
+
# @return [Gem::SpecFetcher]
|
|
20
|
+
def self.fetcher
|
|
21
|
+
@fetcher ||= Gem::SpecFetcher.new
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @param obj [Gem::SpecFetcher]
|
|
25
|
+
# @return [Gem::SpecFetcher]
|
|
26
|
+
def self.fetcher= obj
|
|
27
|
+
@fetcher = obj
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
GEM_ZERO = Gem::Version.new('0.0.0')
|
|
31
|
+
|
|
32
|
+
# @param host [Solargraph::LanguageServer::Host]
|
|
33
|
+
# @param request [Hash]
|
|
34
|
+
# @param current [Gem::Version]
|
|
35
|
+
# @param available [Gem::Version, nil]
|
|
36
|
+
def initialize host, request, current: Gem::Version.new(Solargraph::VERSION), available: nil
|
|
37
|
+
super(host, request)
|
|
38
|
+
@current = current
|
|
39
|
+
@available = available
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def process
|
|
43
|
+
if available > GEM_ZERO
|
|
44
|
+
if available > current
|
|
45
|
+
host.show_message_request "Solargraph gem version #{available} is available. (Current version: #{current})",
|
|
46
|
+
LanguageServer::MessageTypes::INFO,
|
|
47
|
+
['Update now'] do |result|
|
|
48
|
+
next unless result == 'Update now'
|
|
49
|
+
cmd = if host.options['useBundler']
|
|
50
|
+
'bundle update solargraph'
|
|
51
|
+
else
|
|
52
|
+
'gem update solargraph'
|
|
53
|
+
end
|
|
54
|
+
o, s = Open3.capture2(cmd)
|
|
55
|
+
if s == 0
|
|
56
|
+
host.show_message 'Successfully updated the Solargraph gem.', LanguageServer::MessageTypes::INFO
|
|
57
|
+
host.send_notification '$/solargraph/restart', {}
|
|
58
|
+
else
|
|
59
|
+
host.show_message 'An error occurred while updating the gem.', LanguageServer::MessageTypes::ERROR
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
elsif params['verbose']
|
|
63
|
+
host.show_message "The Solargraph gem is up to date (version #{Solargraph::VERSION})."
|
|
64
|
+
end
|
|
65
|
+
elsif fetched?
|
|
66
|
+
Solargraph::Logging.logger.warn error
|
|
67
|
+
host.show_message(error, MessageTypes::ERROR) if params['verbose']
|
|
68
|
+
end
|
|
69
|
+
set_result({
|
|
70
|
+
installed: current,
|
|
71
|
+
available: available
|
|
72
|
+
})
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
private
|
|
76
|
+
|
|
77
|
+
# @return [Gem::Version]
|
|
78
|
+
attr_reader :current
|
|
79
|
+
|
|
80
|
+
# @return [Gem::Version]
|
|
81
|
+
def available
|
|
82
|
+
if !@available && !@fetched
|
|
83
|
+
@fetched = true
|
|
84
|
+
begin
|
|
85
|
+
@available ||= begin
|
|
86
|
+
# @sg-ignore Variable type could not be inferred for tuple
|
|
87
|
+
# @type [Gem::Dependency, nil]
|
|
88
|
+
tuple = CheckGemVersion.fetcher.search_for_dependency(Gem::Dependency.new('solargraph')).flatten.first
|
|
89
|
+
if tuple.nil?
|
|
90
|
+
@error = 'An error occurred fetching the gem data'
|
|
91
|
+
GEM_ZERO
|
|
92
|
+
else
|
|
93
|
+
tuple.version
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
rescue Errno::EADDRNOTAVAIL => e
|
|
97
|
+
@error = "Unable to connect to gem source: #{e.message}"
|
|
98
|
+
GEM_ZERO
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
@available
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def fetched?
|
|
105
|
+
@fetched ||= false
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# @return [String, nil]
|
|
109
|
+
attr_reader :error
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module LanguageServer
|
|
5
|
-
module Message
|
|
6
|
-
module Extended
|
|
7
|
-
class Document < Base
|
|
8
|
-
def process
|
|
9
|
-
api_map, pins = host.document(params['query'])
|
|
10
|
-
page = Solargraph::Page.new(host.options['viewsPath'])
|
|
11
|
-
content = page.render('document', layout: true, locals: { api_map: api_map, pins: pins })
|
|
12
|
-
set_result(
|
|
13
|
-
content: content
|
|
14
|
-
)
|
|
15
|
-
rescue StandardError => e
|
|
16
|
-
Solargraph.logger.warn "Error processing document: [#{e.class}] #{e.message}"
|
|
17
|
-
Solargraph.logger.debug e.backtrace.join("\n")
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module LanguageServer
|
|
5
|
+
module Message
|
|
6
|
+
module Extended
|
|
7
|
+
class Document < Base
|
|
8
|
+
def process
|
|
9
|
+
api_map, pins = host.document(params['query'])
|
|
10
|
+
page = Solargraph::Page.new(host.options['viewsPath'])
|
|
11
|
+
content = page.render('document', layout: true, locals: { api_map: api_map, pins: pins })
|
|
12
|
+
set_result(
|
|
13
|
+
content: content
|
|
14
|
+
)
|
|
15
|
+
rescue StandardError => e
|
|
16
|
+
Solargraph.logger.warn "Error processing document: [#{e.class}] #{e.message}"
|
|
17
|
+
Solargraph.logger.debug e.backtrace.join("\n")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module LanguageServer
|
|
5
|
-
module Message
|
|
6
|
-
module TextDocument
|
|
7
|
-
class Completion < Base
|
|
8
|
-
def process
|
|
9
|
-
return set_error(ErrorCodes::REQUEST_CANCELLED, "cancelled by so many request") if host.has_pending_completions?
|
|
10
|
-
|
|
11
|
-
line = params['position']['line']
|
|
12
|
-
col = params['position']['character']
|
|
13
|
-
begin
|
|
14
|
-
completion = host.completions_at(params['textDocument']['uri'], line, col)
|
|
15
|
-
items = []
|
|
16
|
-
last_context = nil
|
|
17
|
-
idx = -1
|
|
18
|
-
completion.pins.each do |pin|
|
|
19
|
-
idx += 1 if last_context != pin.context
|
|
20
|
-
items.push pin.completion_item.merge({
|
|
21
|
-
textEdit: {
|
|
22
|
-
range: completion.range.to_hash,
|
|
23
|
-
newText: pin.name.sub(/=$/, ' = ').sub(/:$/, ': ')
|
|
24
|
-
},
|
|
25
|
-
sortText: "#{idx.to_s.rjust(4, '0')}#{pin.name}"
|
|
26
|
-
})
|
|
27
|
-
items.last[:data][:uri] = params['textDocument']['uri']
|
|
28
|
-
last_context = pin.context
|
|
29
|
-
end
|
|
30
|
-
set_result(
|
|
31
|
-
isIncomplete: false,
|
|
32
|
-
items: items
|
|
33
|
-
)
|
|
34
|
-
rescue InvalidOffsetError => e
|
|
35
|
-
Logging.logger.info "Completion ignored invalid offset: #{params['textDocument']['uri']}, line #{line}, character #{col}"
|
|
36
|
-
set_result empty_result
|
|
37
|
-
end
|
|
38
|
-
rescue FileNotFoundError => e
|
|
39
|
-
Logging.logger.warn "[#{e.class}] #{e.message}"
|
|
40
|
-
Logging.logger.warn e.backtrace.join("\n")
|
|
41
|
-
set_result empty_result
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# @param incomplete [Boolean]
|
|
45
|
-
# @return [Hash]
|
|
46
|
-
def empty_result incomplete = false
|
|
47
|
-
{
|
|
48
|
-
isIncomplete: incomplete,
|
|
49
|
-
items: []
|
|
50
|
-
}
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module LanguageServer
|
|
5
|
+
module Message
|
|
6
|
+
module TextDocument
|
|
7
|
+
class Completion < Base
|
|
8
|
+
def process
|
|
9
|
+
return set_error(ErrorCodes::REQUEST_CANCELLED, "cancelled by so many request") if host.has_pending_completions?
|
|
10
|
+
|
|
11
|
+
line = params['position']['line']
|
|
12
|
+
col = params['position']['character']
|
|
13
|
+
begin
|
|
14
|
+
completion = host.completions_at(params['textDocument']['uri'], line, col)
|
|
15
|
+
items = []
|
|
16
|
+
last_context = nil
|
|
17
|
+
idx = -1
|
|
18
|
+
completion.pins.each do |pin|
|
|
19
|
+
idx += 1 if last_context != pin.context
|
|
20
|
+
items.push pin.completion_item.merge({
|
|
21
|
+
textEdit: {
|
|
22
|
+
range: completion.range.to_hash,
|
|
23
|
+
newText: pin.name.sub(/=$/, ' = ').sub(/:$/, ': ')
|
|
24
|
+
},
|
|
25
|
+
sortText: "#{idx.to_s.rjust(4, '0')}#{pin.name}"
|
|
26
|
+
})
|
|
27
|
+
items.last[:data][:uri] = params['textDocument']['uri']
|
|
28
|
+
last_context = pin.context
|
|
29
|
+
end
|
|
30
|
+
set_result(
|
|
31
|
+
isIncomplete: false,
|
|
32
|
+
items: items
|
|
33
|
+
)
|
|
34
|
+
rescue InvalidOffsetError => e
|
|
35
|
+
Logging.logger.info "Completion ignored invalid offset: #{params['textDocument']['uri']}, line #{line}, character #{col}"
|
|
36
|
+
set_result empty_result
|
|
37
|
+
end
|
|
38
|
+
rescue FileNotFoundError => e
|
|
39
|
+
Logging.logger.warn "[#{e.class}] #{e.message}"
|
|
40
|
+
Logging.logger.warn e.backtrace.join("\n")
|
|
41
|
+
set_result empty_result
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# @param incomplete [Boolean]
|
|
45
|
+
# @return [Hash]
|
|
46
|
+
def empty_result incomplete = false
|
|
47
|
+
{
|
|
48
|
+
isIncomplete: incomplete,
|
|
49
|
+
items: []
|
|
50
|
+
}
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph::LanguageServer::Message::TextDocument
|
|
4
|
-
class Definition < Base
|
|
5
|
-
def process
|
|
6
|
-
@line = params['position']['line']
|
|
7
|
-
@column = params['position']['character']
|
|
8
|
-
set_result(code_location || require_location || [])
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
private
|
|
12
|
-
|
|
13
|
-
# @return [Array<Hash>, nil]
|
|
14
|
-
def code_location
|
|
15
|
-
suggestions = host.definitions_at(params['textDocument']['uri'], @line, @column)
|
|
16
|
-
return nil if suggestions.empty?
|
|
17
|
-
suggestions.reject { |pin| pin.best_location.nil? || pin.best_location.filename.nil? }.map do |pin|
|
|
18
|
-
{
|
|
19
|
-
uri: file_to_uri(pin.best_location.filename),
|
|
20
|
-
range: pin.best_location.range.to_hash
|
|
21
|
-
}
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# @return [Array<Hash>, nil]
|
|
26
|
-
def require_location
|
|
27
|
-
# @todo Terrible hack
|
|
28
|
-
lib = host.library_for(params['textDocument']['uri'])
|
|
29
|
-
rloc = Solargraph::Location.new(uri_to_file(params['textDocument']['uri']), Solargraph::Range.from_to(@line, @column, @line, @column))
|
|
30
|
-
dloc = lib.locate_ref(rloc)
|
|
31
|
-
return nil if dloc.nil?
|
|
32
|
-
[
|
|
33
|
-
{
|
|
34
|
-
uri: file_to_uri(dloc.filename),
|
|
35
|
-
range: dloc.range.to_hash
|
|
36
|
-
}
|
|
37
|
-
]
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph::LanguageServer::Message::TextDocument
|
|
4
|
+
class Definition < Base
|
|
5
|
+
def process
|
|
6
|
+
@line = params['position']['line']
|
|
7
|
+
@column = params['position']['character']
|
|
8
|
+
set_result(code_location || require_location || [])
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
# @return [Array<Hash>, nil]
|
|
14
|
+
def code_location
|
|
15
|
+
suggestions = host.definitions_at(params['textDocument']['uri'], @line, @column)
|
|
16
|
+
return nil if suggestions.empty?
|
|
17
|
+
suggestions.reject { |pin| pin.best_location.nil? || pin.best_location.filename.nil? }.map do |pin|
|
|
18
|
+
{
|
|
19
|
+
uri: file_to_uri(pin.best_location.filename),
|
|
20
|
+
range: pin.best_location.range.to_hash
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# @return [Array<Hash>, nil]
|
|
26
|
+
def require_location
|
|
27
|
+
# @todo Terrible hack
|
|
28
|
+
lib = host.library_for(params['textDocument']['uri'])
|
|
29
|
+
rloc = Solargraph::Location.new(uri_to_file(params['textDocument']['uri']), Solargraph::Range.from_to(@line, @column, @line, @column))
|
|
30
|
+
dloc = lib.locate_ref(rloc)
|
|
31
|
+
return nil if dloc.nil?
|
|
32
|
+
[
|
|
33
|
+
{
|
|
34
|
+
uri: file_to_uri(dloc.filename),
|
|
35
|
+
range: dloc.range.to_hash
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Solargraph::LanguageServer::Message::TextDocument::DocumentSymbol < Solargraph::LanguageServer::Message::Base
|
|
4
|
-
include Solargraph::LanguageServer::UriHelpers
|
|
5
|
-
|
|
6
|
-
def process
|
|
7
|
-
pins = host.document_symbols params['textDocument']['uri']
|
|
8
|
-
info = pins.map do |pin|
|
|
9
|
-
next nil unless pin.best_location&.filename
|
|
10
|
-
|
|
11
|
-
result = {
|
|
12
|
-
name: pin.name,
|
|
13
|
-
containerName: pin.namespace,
|
|
14
|
-
kind: pin.symbol_kind,
|
|
15
|
-
location: {
|
|
16
|
-
uri: file_to_uri(pin.best_location.filename),
|
|
17
|
-
range: pin.best_location.range.to_hash
|
|
18
|
-
},
|
|
19
|
-
deprecated: pin.deprecated?
|
|
20
|
-
}
|
|
21
|
-
result
|
|
22
|
-
end.compact
|
|
23
|
-
|
|
24
|
-
set_result info
|
|
25
|
-
end
|
|
26
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class Solargraph::LanguageServer::Message::TextDocument::DocumentSymbol < Solargraph::LanguageServer::Message::Base
|
|
4
|
+
include Solargraph::LanguageServer::UriHelpers
|
|
5
|
+
|
|
6
|
+
def process
|
|
7
|
+
pins = host.document_symbols params['textDocument']['uri']
|
|
8
|
+
info = pins.map do |pin|
|
|
9
|
+
next nil unless pin.best_location&.filename
|
|
10
|
+
|
|
11
|
+
result = {
|
|
12
|
+
name: pin.name,
|
|
13
|
+
containerName: pin.namespace,
|
|
14
|
+
kind: pin.symbol_kind,
|
|
15
|
+
location: {
|
|
16
|
+
uri: file_to_uri(pin.best_location.filename),
|
|
17
|
+
range: pin.best_location.range.to_hash
|
|
18
|
+
},
|
|
19
|
+
deprecated: pin.deprecated?
|
|
20
|
+
}
|
|
21
|
+
result
|
|
22
|
+
end.compact
|
|
23
|
+
|
|
24
|
+
set_result info
|
|
25
|
+
end
|
|
26
|
+
end
|