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,114 +1,109 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
# @return [Gem::SpecFetcher]
|
|
20
|
-
def self.fetcher
|
|
21
|
-
@fetcher
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
'
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
module Solargraph
|
|
5
|
+
module LanguageServer
|
|
6
|
+
module Message
|
|
7
|
+
module Extended
|
|
8
|
+
# Check if a more recent version of the Solargraph gem is available.
|
|
9
|
+
# Notify the client when an update exists. If the `verbose` parameter
|
|
10
|
+
# is true, notify the client when the gem is up to date.
|
|
11
|
+
#
|
|
12
|
+
class CheckGemVersion < Base
|
|
13
|
+
# @return [Gem::SpecFetcher]
|
|
14
|
+
def self.fetcher
|
|
15
|
+
@fetcher ||= Gem::SpecFetcher.new
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# @param obj [Gem::SpecFetcher]
|
|
19
|
+
# @return [Gem::SpecFetcher]
|
|
20
|
+
def self.fetcher= obj
|
|
21
|
+
@fetcher = obj
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
GEM_ZERO = Gem::Version.new('0.0.0')
|
|
25
|
+
|
|
26
|
+
# @param host [Solargraph::LanguageServer::Host]
|
|
27
|
+
# @param request [Hash]
|
|
28
|
+
# @param current [Gem::Version]
|
|
29
|
+
# @param available [Gem::Version, nil]
|
|
30
|
+
def initialize host, request, current: Gem::Version.new(Solargraph::VERSION), available: nil
|
|
31
|
+
super(host, request)
|
|
32
|
+
@current = current
|
|
33
|
+
@available = available
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def process
|
|
37
|
+
if available > GEM_ZERO
|
|
38
|
+
if available > current
|
|
39
|
+
host.show_message_request "Solargraph gem version #{available} is available. (Current version: #{current})",
|
|
40
|
+
LanguageServer::MessageTypes::INFO,
|
|
41
|
+
['Update now'] do |result|
|
|
42
|
+
next unless result == 'Update now'
|
|
43
|
+
cmd = if host.options['useBundler']
|
|
44
|
+
'bundle update solargraph'
|
|
45
|
+
else
|
|
46
|
+
'gem update solargraph'
|
|
47
|
+
end
|
|
48
|
+
o, s = Open3.capture2(cmd)
|
|
49
|
+
if s == 0
|
|
50
|
+
host.show_message 'Successfully updated the Solargraph gem.', LanguageServer::MessageTypes::INFO
|
|
51
|
+
host.send_notification '$/solargraph/restart', {}
|
|
52
|
+
else
|
|
53
|
+
host.show_message 'An error occurred while updating the gem.', LanguageServer::MessageTypes::ERROR
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
elsif params['verbose']
|
|
57
|
+
host.show_message "The Solargraph gem is up to date (version #{Solargraph::VERSION})."
|
|
58
|
+
end
|
|
59
|
+
elsif fetched?
|
|
60
|
+
Solargraph::Logging.logger.warn error
|
|
61
|
+
# @sg-ignore Need to add nil check here
|
|
62
|
+
host.show_message(error, MessageTypes::ERROR) if params['verbose']
|
|
63
|
+
end
|
|
64
|
+
set_result({
|
|
65
|
+
installed: current,
|
|
66
|
+
available: available
|
|
67
|
+
})
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
private
|
|
71
|
+
|
|
72
|
+
# @return [Gem::Version]
|
|
73
|
+
attr_reader :current
|
|
74
|
+
|
|
75
|
+
# @return [Gem::Version]
|
|
76
|
+
# @sg-ignore Need to add nil check here
|
|
77
|
+
def available
|
|
78
|
+
if !@available && !@fetched
|
|
79
|
+
@fetched = true
|
|
80
|
+
begin
|
|
81
|
+
@available ||= begin
|
|
82
|
+
# @type [Gem::Dependency, nil]
|
|
83
|
+
tuple = CheckGemVersion.fetcher.search_for_dependency(Gem::Dependency.new('solargraph')).flatten.first
|
|
84
|
+
if tuple.nil?
|
|
85
|
+
@error = 'An error occurred fetching the gem data'
|
|
86
|
+
GEM_ZERO
|
|
87
|
+
else
|
|
88
|
+
tuple.version
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
rescue Errno::EADDRNOTAVAIL => e
|
|
92
|
+
@error = "Unable to connect to gem source: #{e.message}"
|
|
93
|
+
GEM_ZERO
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
@available
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def fetched?
|
|
100
|
+
@fetched ||= false
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# @return [String, nil]
|
|
104
|
+
attr_reader :error
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
@@ -1,23 +1,24 @@
|
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
+
# @sg-ignore Need to add nil check here
|
|
18
|
+
Solargraph.logger.debug e.backtrace.join("\n")
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -1,56 +1,58 @@
|
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
Logging.logger.warn e.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
+
# @sg-ignore Need to add nil check here
|
|
19
|
+
completion.pins.each do |pin|
|
|
20
|
+
idx += 1 if last_context != pin.context
|
|
21
|
+
items.push pin.completion_item.merge({
|
|
22
|
+
textEdit: {
|
|
23
|
+
range: completion.range.to_hash,
|
|
24
|
+
newText: pin.name.sub(/=$/, ' = ').sub(/:$/, ': ')
|
|
25
|
+
},
|
|
26
|
+
sortText: "#{idx.to_s.rjust(4, '0')}#{pin.name}"
|
|
27
|
+
})
|
|
28
|
+
items.last[:data][:uri] = params['textDocument']['uri']
|
|
29
|
+
last_context = pin.context
|
|
30
|
+
end
|
|
31
|
+
set_result(
|
|
32
|
+
isIncomplete: false,
|
|
33
|
+
items: items
|
|
34
|
+
)
|
|
35
|
+
rescue InvalidOffsetError => e
|
|
36
|
+
Logging.logger.info "Completion ignored invalid offset: #{params['textDocument']['uri']}, line #{line}, character #{col}"
|
|
37
|
+
set_result empty_result
|
|
38
|
+
end
|
|
39
|
+
rescue FileNotFoundError => e
|
|
40
|
+
Logging.logger.warn "[#{e.class}] #{e.message}"
|
|
41
|
+
# @sg-ignore Need to add nil check here
|
|
42
|
+
Logging.logger.warn e.backtrace.join("\n")
|
|
43
|
+
set_result empty_result
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @param incomplete [Boolean]
|
|
47
|
+
# @return [Hash]
|
|
48
|
+
def empty_result incomplete = false
|
|
49
|
+
{
|
|
50
|
+
isIncomplete: incomplete,
|
|
51
|
+
items: []
|
|
52
|
+
}
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -1,40 +1,42 @@
|
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
+
# @sg-ignore Need to add nil check here
|
|
17
|
+
return nil if suggestions.empty?
|
|
18
|
+
# @sg-ignore Need to add nil check here
|
|
19
|
+
suggestions.reject { |pin| pin.best_location.nil? || pin.best_location.filename.nil? }.map do |pin|
|
|
20
|
+
{
|
|
21
|
+
uri: file_to_uri(pin.best_location.filename),
|
|
22
|
+
range: pin.best_location.range.to_hash
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @return [Array<Hash>, nil]
|
|
28
|
+
def require_location
|
|
29
|
+
# @todo Terrible hack
|
|
30
|
+
lib = host.library_for(params['textDocument']['uri'])
|
|
31
|
+
rloc = Solargraph::Location.new(uri_to_file(params['textDocument']['uri']), Solargraph::Range.from_to(@line, @column, @line, @column))
|
|
32
|
+
dloc = lib.locate_ref(rloc)
|
|
33
|
+
return nil if dloc.nil?
|
|
34
|
+
[
|
|
35
|
+
{
|
|
36
|
+
uri: file_to_uri(dloc.filename),
|
|
37
|
+
range: dloc.range.to_hash
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -1,26 +1,28 @@
|
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
+
# @sg-ignore Need to add nil check here
|
|
17
|
+
uri: file_to_uri(pin.best_location.filename),
|
|
18
|
+
# @sg-ignore Need to add nil check here
|
|
19
|
+
range: pin.best_location.range.to_hash
|
|
20
|
+
},
|
|
21
|
+
deprecated: pin.deprecated?
|
|
22
|
+
}
|
|
23
|
+
result
|
|
24
|
+
end.compact
|
|
25
|
+
|
|
26
|
+
set_result info
|
|
27
|
+
end
|
|
28
|
+
end
|