cosmicgraph 0.49.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 +7 -0
- data/.github/FUNDING.yml +1 -0
- data/.github/workflows/rspec.yml +41 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.yardopts +2 -0
- data/CHANGELOG.md +1150 -0
- data/Gemfile +7 -0
- data/LICENSE +21 -0
- data/README.md +136 -0
- data/Rakefile +25 -0
- data/SPONSORS.md +15 -0
- data/bin/solargraph +5 -0
- data/cosmicgraph.gemspec +44 -0
- data/lib/.rubocop.yml +22 -0
- data/lib/solargraph/api_map/bundler_methods.rb +22 -0
- data/lib/solargraph/api_map/cache.rb +70 -0
- data/lib/solargraph/api_map/source_to_yard.rb +81 -0
- data/lib/solargraph/api_map/store.rb +268 -0
- data/lib/solargraph/api_map.rb +704 -0
- data/lib/solargraph/bench.rb +27 -0
- data/lib/solargraph/cache.rb +51 -0
- data/lib/solargraph/complex_type/type_methods.rb +134 -0
- data/lib/solargraph/complex_type/unique_type.rb +132 -0
- data/lib/solargraph/complex_type.rb +254 -0
- data/lib/solargraph/convention/base.rb +33 -0
- data/lib/solargraph/convention/gemfile.rb +15 -0
- data/lib/solargraph/convention/gemspec.rb +22 -0
- data/lib/solargraph/convention/rakefile.rb +17 -0
- data/lib/solargraph/convention/rspec.rb +30 -0
- data/lib/solargraph/convention.rb +49 -0
- data/lib/solargraph/converters/dd.rb +12 -0
- data/lib/solargraph/converters/dl.rb +12 -0
- data/lib/solargraph/converters/dt.rb +12 -0
- data/lib/solargraph/converters/misc.rb +1 -0
- data/lib/solargraph/diagnostics/base.rb +29 -0
- data/lib/solargraph/diagnostics/require_not_found.rb +53 -0
- data/lib/solargraph/diagnostics/rubocop.rb +112 -0
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +65 -0
- data/lib/solargraph/diagnostics/severities.rb +15 -0
- data/lib/solargraph/diagnostics/type_check.rb +54 -0
- data/lib/solargraph/diagnostics/update_errors.rb +41 -0
- data/lib/solargraph/diagnostics.rb +55 -0
- data/lib/solargraph/documentor.rb +76 -0
- data/lib/solargraph/environ.rb +45 -0
- data/lib/solargraph/language_server/completion_item_kinds.rb +35 -0
- data/lib/solargraph/language_server/error_codes.rb +20 -0
- data/lib/solargraph/language_server/host/cataloger.rb +56 -0
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -0
- data/lib/solargraph/language_server/host/dispatch.rb +111 -0
- data/lib/solargraph/language_server/host/message_worker.rb +59 -0
- data/lib/solargraph/language_server/host/sources.rb +156 -0
- data/lib/solargraph/language_server/host.rb +869 -0
- data/lib/solargraph/language_server/message/base.rb +89 -0
- data/lib/solargraph/language_server/message/cancel_request.rb +13 -0
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -0
- data/lib/solargraph/language_server/message/client.rb +11 -0
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -0
- data/lib/solargraph/language_server/message/completion_item.rb +11 -0
- data/lib/solargraph/language_server/message/exit_notification.rb +13 -0
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +100 -0
- data/lib/solargraph/language_server/message/extended/document.rb +20 -0
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -0
- data/lib/solargraph/language_server/message/extended/download_core.rb +19 -0
- data/lib/solargraph/language_server/message/extended/environment.rb +25 -0
- data/lib/solargraph/language_server/message/extended/search.rb +20 -0
- data/lib/solargraph/language_server/message/extended.rb +21 -0
- data/lib/solargraph/language_server/message/initialize.rb +164 -0
- data/lib/solargraph/language_server/message/initialized.rb +27 -0
- data/lib/solargraph/language_server/message/method_not_found.rb +16 -0
- data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -0
- data/lib/solargraph/language_server/message/shutdown.rb +13 -0
- data/lib/solargraph/language_server/message/text_document/base.rb +19 -0
- data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -0
- data/lib/solargraph/language_server/message/text_document/completion.rb +59 -0
- data/lib/solargraph/language_server/message/text_document/definition.rb +38 -0
- data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -0
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -0
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +23 -0
- data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -0
- data/lib/solargraph/language_server/message/text_document/formatting.rb +126 -0
- data/lib/solargraph/language_server/message/text_document/hover.rb +56 -0
- data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -0
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -0
- data/lib/solargraph/language_server/message/text_document/references.rb +16 -0
- data/lib/solargraph/language_server/message/text_document/rename.rb +19 -0
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -0
- data/lib/solargraph/language_server/message/text_document.rb +28 -0
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +30 -0
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -0
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -0
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -0
- data/lib/solargraph/language_server/message/workspace.rb +14 -0
- data/lib/solargraph/language_server/message.rb +93 -0
- data/lib/solargraph/language_server/message_types.rb +14 -0
- data/lib/solargraph/language_server/request.rb +24 -0
- data/lib/solargraph/language_server/symbol_kinds.rb +36 -0
- data/lib/solargraph/language_server/transport/adapter.rb +53 -0
- data/lib/solargraph/language_server/transport/data_reader.rb +72 -0
- data/lib/solargraph/language_server/transport.rb +13 -0
- data/lib/solargraph/language_server/uri_helpers.rb +49 -0
- data/lib/solargraph/language_server.rb +19 -0
- data/lib/solargraph/library.rb +547 -0
- data/lib/solargraph/location.rb +37 -0
- data/lib/solargraph/logging.rb +27 -0
- data/lib/solargraph/page.rb +83 -0
- data/lib/solargraph/parser/comment_ripper.rb +52 -0
- data/lib/solargraph/parser/legacy/class_methods.rb +135 -0
- data/lib/solargraph/parser/legacy/flawed_builder.rb +16 -0
- data/lib/solargraph/parser/legacy/node_chainer.rb +148 -0
- data/lib/solargraph/parser/legacy/node_methods.rb +325 -0
- data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/args_node.rb +35 -0
- data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +15 -0
- data/lib/solargraph/parser/legacy/node_processors/block_node.rb +42 -0
- data/lib/solargraph/parser/legacy/node_processors/casgn_node.rb +35 -0
- data/lib/solargraph/parser/legacy/node_processors/cvasgn_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/def_node.rb +63 -0
- data/lib/solargraph/parser/legacy/node_processors/defs_node.rb +36 -0
- data/lib/solargraph/parser/legacy/node_processors/gvasgn_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/ivasgn_node.rb +38 -0
- data/lib/solargraph/parser/legacy/node_processors/lvasgn_node.rb +28 -0
- data/lib/solargraph/parser/legacy/node_processors/namespace_node.rb +39 -0
- data/lib/solargraph/parser/legacy/node_processors/orasgn_node.rb +16 -0
- data/lib/solargraph/parser/legacy/node_processors/resbody_node.rb +36 -0
- data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +42 -0
- data/lib/solargraph/parser/legacy/node_processors/send_node.rb +257 -0
- data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +18 -0
- data/lib/solargraph/parser/legacy/node_processors.rb +54 -0
- data/lib/solargraph/parser/legacy.rb +12 -0
- data/lib/solargraph/parser/node_methods.rb +43 -0
- data/lib/solargraph/parser/node_processor/base.rb +77 -0
- data/lib/solargraph/parser/node_processor.rb +43 -0
- data/lib/solargraph/parser/region.rb +66 -0
- data/lib/solargraph/parser/rubyvm/class_methods.rb +149 -0
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +160 -0
- data/lib/solargraph/parser/rubyvm/node_methods.rb +315 -0
- data/lib/solargraph/parser/rubyvm/node_processors/alias_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +85 -0
- data/lib/solargraph/parser/rubyvm/node_processors/begin_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +42 -0
- data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +33 -0
- data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +75 -0
- data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +68 -0
- data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +38 -0
- data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +39 -0
- data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +20 -0
- data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +27 -0
- data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +39 -0
- data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +26 -0
- data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +45 -0
- data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +32 -0
- data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +279 -0
- data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +18 -0
- data/lib/solargraph/parser/rubyvm/node_processors.rb +63 -0
- data/lib/solargraph/parser/rubyvm/node_wrapper.rb +47 -0
- data/lib/solargraph/parser/rubyvm.rb +40 -0
- data/lib/solargraph/parser/snippet.rb +13 -0
- data/lib/solargraph/parser.rb +26 -0
- data/lib/solargraph/pin/base.rb +299 -0
- data/lib/solargraph/pin/base_variable.rb +84 -0
- data/lib/solargraph/pin/block.rb +73 -0
- data/lib/solargraph/pin/class_variable.rb +8 -0
- data/lib/solargraph/pin/closure.rb +37 -0
- data/lib/solargraph/pin/common.rb +70 -0
- data/lib/solargraph/pin/constant.rb +43 -0
- data/lib/solargraph/pin/conversions.rb +92 -0
- data/lib/solargraph/pin/documenting.rb +105 -0
- data/lib/solargraph/pin/duck_method.rb +16 -0
- data/lib/solargraph/pin/global_variable.rb +8 -0
- data/lib/solargraph/pin/instance_variable.rb +30 -0
- data/lib/solargraph/pin/keyword.rb +15 -0
- data/lib/solargraph/pin/keyword_param.rb +8 -0
- data/lib/solargraph/pin/local_variable.rb +55 -0
- data/lib/solargraph/pin/method.rb +335 -0
- data/lib/solargraph/pin/method_alias.rb +31 -0
- data/lib/solargraph/pin/namespace.rb +94 -0
- data/lib/solargraph/pin/parameter.rb +206 -0
- data/lib/solargraph/pin/proxy_type.rb +29 -0
- data/lib/solargraph/pin/reference/extend.rb +10 -0
- data/lib/solargraph/pin/reference/include.rb +10 -0
- data/lib/solargraph/pin/reference/override.rb +29 -0
- data/lib/solargraph/pin/reference/prepend.rb +10 -0
- data/lib/solargraph/pin/reference/require.rb +14 -0
- data/lib/solargraph/pin/reference/superclass.rb +10 -0
- data/lib/solargraph/pin/reference.rb +14 -0
- data/lib/solargraph/pin/search.rb +56 -0
- data/lib/solargraph/pin/signature.rb +23 -0
- data/lib/solargraph/pin/singleton.rb +11 -0
- data/lib/solargraph/pin/symbol.rb +47 -0
- data/lib/solargraph/pin.rb +38 -0
- data/lib/solargraph/position.rb +100 -0
- data/lib/solargraph/range.rb +95 -0
- data/lib/solargraph/rbs_map/conversions.rb +394 -0
- data/lib/solargraph/rbs_map/core_fills.rb +61 -0
- data/lib/solargraph/rbs_map/core_map.rb +38 -0
- data/lib/solargraph/rbs_map/core_signs.rb +33 -0
- data/lib/solargraph/rbs_map/stdlib_map.rb +36 -0
- data/lib/solargraph/rbs_map.rb +73 -0
- data/lib/solargraph/server_methods.rb +16 -0
- data/lib/solargraph/shell.rb +234 -0
- data/lib/solargraph/source/chain/block_variable.rb +13 -0
- data/lib/solargraph/source/chain/call.rb +215 -0
- data/lib/solargraph/source/chain/class_variable.rb +13 -0
- data/lib/solargraph/source/chain/constant.rb +75 -0
- data/lib/solargraph/source/chain/global_variable.rb +13 -0
- data/lib/solargraph/source/chain/hash.rb +28 -0
- data/lib/solargraph/source/chain/head.rb +19 -0
- data/lib/solargraph/source/chain/instance_variable.rb +13 -0
- data/lib/solargraph/source/chain/link.rb +71 -0
- data/lib/solargraph/source/chain/literal.rb +23 -0
- data/lib/solargraph/source/chain/or.rb +23 -0
- data/lib/solargraph/source/chain/q_call.rb +11 -0
- data/lib/solargraph/source/chain/variable.rb +13 -0
- data/lib/solargraph/source/chain/z_super.rb +30 -0
- data/lib/solargraph/source/chain.rb +179 -0
- data/lib/solargraph/source/change.rb +79 -0
- data/lib/solargraph/source/cursor.rb +164 -0
- data/lib/solargraph/source/encoding_fixes.rb +23 -0
- data/lib/solargraph/source/source_chainer.rb +191 -0
- data/lib/solargraph/source/updater.rb +54 -0
- data/lib/solargraph/source.rb +522 -0
- data/lib/solargraph/source_map/clip.rb +229 -0
- data/lib/solargraph/source_map/completion.rb +23 -0
- data/lib/solargraph/source_map/mapper.rb +241 -0
- data/lib/solargraph/source_map.rb +180 -0
- data/lib/solargraph/type_checker/checks.rb +112 -0
- data/lib/solargraph/type_checker/param_def.rb +35 -0
- data/lib/solargraph/type_checker/problem.rb +32 -0
- data/lib/solargraph/type_checker/rules.rb +57 -0
- data/lib/solargraph/type_checker.rb +549 -0
- data/lib/solargraph/version.rb +5 -0
- data/lib/solargraph/views/_method.erb +62 -0
- data/lib/solargraph/views/_name_type_tag.erb +10 -0
- data/lib/solargraph/views/_namespace.erb +24 -0
- data/lib/solargraph/views/document.erb +23 -0
- data/lib/solargraph/views/environment.erb +58 -0
- data/lib/solargraph/views/layout.erb +44 -0
- data/lib/solargraph/views/search.erb +11 -0
- data/lib/solargraph/workspace/config.rb +231 -0
- data/lib/solargraph/workspace.rb +212 -0
- data/lib/solargraph/yard_map/cache.rb +19 -0
- data/lib/solargraph/yard_map/helpers.rb +16 -0
- data/lib/solargraph/yard_map/mapper/to_constant.rb +25 -0
- data/lib/solargraph/yard_map/mapper/to_method.rb +81 -0
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +27 -0
- data/lib/solargraph/yard_map/mapper.rb +77 -0
- data/lib/solargraph/yard_map/to_method.rb +79 -0
- data/lib/solargraph/yard_map.rb +301 -0
- data/lib/solargraph.rb +69 -0
- data/lib/yard-solargraph.rb +33 -0
- metadata +587 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module LanguageServer
|
5
|
+
module Message
|
6
|
+
class Base
|
7
|
+
# @return [Solargraph::LanguageServer::Host]
|
8
|
+
attr_reader :host
|
9
|
+
|
10
|
+
# @return [Integer]
|
11
|
+
attr_reader :id
|
12
|
+
|
13
|
+
# @return [Hash]
|
14
|
+
attr_reader :request
|
15
|
+
|
16
|
+
# @return [String]
|
17
|
+
attr_reader :method
|
18
|
+
|
19
|
+
# @return [Hash]
|
20
|
+
attr_reader :params
|
21
|
+
|
22
|
+
# @return [Hash, Array, nil]
|
23
|
+
attr_reader :result
|
24
|
+
|
25
|
+
# @return [Hash, nil]
|
26
|
+
attr_reader :error
|
27
|
+
|
28
|
+
# @param host [Solargraph::LanguageServer::Host]
|
29
|
+
# @param request [Hash]
|
30
|
+
def initialize host, request
|
31
|
+
@host = host
|
32
|
+
@id = request['id'].freeze
|
33
|
+
@request = request.freeze
|
34
|
+
@method = request['method'].freeze
|
35
|
+
@params = (request['params'] || {}).freeze
|
36
|
+
post_initialize
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [void]
|
40
|
+
def post_initialize; end
|
41
|
+
|
42
|
+
# @return [void]
|
43
|
+
def process; end
|
44
|
+
|
45
|
+
# @param data [Hash, Array, nil]
|
46
|
+
# @return [void]
|
47
|
+
def set_result data
|
48
|
+
@result = data
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param code [Integer] See Solargraph::LanguageServer::ErrorCodes
|
52
|
+
# @param message [String]
|
53
|
+
# @return [void]
|
54
|
+
def set_error code, message
|
55
|
+
@error = {
|
56
|
+
code: code,
|
57
|
+
message: message
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
# @return [void]
|
62
|
+
def send_response
|
63
|
+
return if id.nil?
|
64
|
+
if host.cancel?(id)
|
65
|
+
# https://microsoft.github.io/language-server-protocol/specifications/specification-current/#cancelRequest
|
66
|
+
# cancel should send response RequestCancelled
|
67
|
+
Solargraph::Logging.logger.info "Cancelled response to #{method}"
|
68
|
+
set_result nil
|
69
|
+
set_error ErrorCodes::REQUEST_CANCELLED, "cancelled by client"
|
70
|
+
else
|
71
|
+
Solargraph::Logging.logger.info "Sending response to #{method}"
|
72
|
+
end
|
73
|
+
response = {
|
74
|
+
jsonrpc: "2.0",
|
75
|
+
id: id,
|
76
|
+
}
|
77
|
+
response[:result] = result unless result.nil?
|
78
|
+
response[:error] = error unless error.nil?
|
79
|
+
response[:result] = nil if result.nil? and error.nil?
|
80
|
+
json = response.to_json
|
81
|
+
envelope = "Content-Length: #{json.bytesize}\r\n\r\n#{json}"
|
82
|
+
Solargraph.logger.debug envelope
|
83
|
+
host.queue envelope
|
84
|
+
host.clear id
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module LanguageServer
|
5
|
+
module Message
|
6
|
+
module CompletionItem
|
7
|
+
# completionItem/resolve message handler
|
8
|
+
#
|
9
|
+
class Resolve < Base
|
10
|
+
def process
|
11
|
+
pins = host.locate_pins(params)
|
12
|
+
set_result merge(pins)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
# @param pins [Array<Pin::Base>]
|
18
|
+
# @return [Hash]
|
19
|
+
def merge pins
|
20
|
+
return params if pins.empty?
|
21
|
+
docs = pins
|
22
|
+
.reject { |pin| pin.documentation.empty? && pin.return_type.undefined? }
|
23
|
+
result = params
|
24
|
+
.transform_keys(&:to_sym)
|
25
|
+
.merge(pins.first.resolve_completion_item)
|
26
|
+
.merge(documentation: markup_content(join_docs(docs)))
|
27
|
+
result[:detail] = pins.first.detail
|
28
|
+
result
|
29
|
+
end
|
30
|
+
|
31
|
+
# @param text [String]
|
32
|
+
# @return [Hash{Symbol => String}]
|
33
|
+
def markup_content text
|
34
|
+
return nil if text.strip.empty?
|
35
|
+
{
|
36
|
+
kind: 'markdown',
|
37
|
+
value: text
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
def join_docs pins
|
42
|
+
result = []
|
43
|
+
last_link = nil
|
44
|
+
pins.each_with_index do |pin|
|
45
|
+
this_link = host.options['enablePages'] ? pin.link_documentation : pin.text_documentation
|
46
|
+
if this_link && this_link != last_link && this_link != 'undefined'
|
47
|
+
result.push this_link
|
48
|
+
end
|
49
|
+
result.push pin.documentation unless result.last && result.last.end_with?(pin.documentation)
|
50
|
+
last_link = this_link
|
51
|
+
end
|
52
|
+
result.join("\n\n")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
|
5
|
+
module Solargraph
|
6
|
+
module LanguageServer
|
7
|
+
module Message
|
8
|
+
module Extended
|
9
|
+
# Check if a more recent version of the Solargraph gem is available.
|
10
|
+
# Notify the client when an update exists. If the `verbose` parameter
|
11
|
+
# is true, notify the client when the gem is up to date.
|
12
|
+
#
|
13
|
+
class CheckGemVersion < Base
|
14
|
+
def self.fetcher
|
15
|
+
@fetcher ||= Gem::SpecFetcher.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.fetcher= obj
|
19
|
+
@fetcher = obj
|
20
|
+
end
|
21
|
+
|
22
|
+
GEM_ZERO = Gem::Version.new('0.0.0')
|
23
|
+
|
24
|
+
def initialize host, request, current: Gem::Version.new(Solargraph::VERSION), available: nil
|
25
|
+
super(host, request)
|
26
|
+
@current = current
|
27
|
+
@available = available
|
28
|
+
end
|
29
|
+
|
30
|
+
def process
|
31
|
+
if available > GEM_ZERO
|
32
|
+
if available > current
|
33
|
+
host.show_message_request "Solargraph gem version #{available} is available. (Current version: #{current})",
|
34
|
+
LanguageServer::MessageTypes::INFO,
|
35
|
+
['Update now'] do |result|
|
36
|
+
next unless result == 'Update now'
|
37
|
+
cmd = if host.options['useBundler']
|
38
|
+
'bundle update solargraph'
|
39
|
+
else
|
40
|
+
'gem update solargraph'
|
41
|
+
end
|
42
|
+
o, s = Open3.capture2(cmd)
|
43
|
+
if s == 0
|
44
|
+
host.show_message 'Successfully updated the Solargraph gem.', LanguageServer::MessageTypes::INFO
|
45
|
+
host.send_notification '$/solargraph/restart', {}
|
46
|
+
else
|
47
|
+
host.show_message 'An error occurred while updating the gem.', LanguageServer::MessageTypes::ERROR
|
48
|
+
end
|
49
|
+
end
|
50
|
+
elsif params['verbose']
|
51
|
+
host.show_message "The Solargraph gem is up to date (version #{Solargraph::VERSION})."
|
52
|
+
end
|
53
|
+
elsif fetched?
|
54
|
+
Solargraph::Logging.logger.warn error
|
55
|
+
host.show_message(error, MessageTypes::ERROR) if params['verbose']
|
56
|
+
end
|
57
|
+
set_result({
|
58
|
+
installed: current,
|
59
|
+
available: available
|
60
|
+
})
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
# @return [Gem::Version]
|
66
|
+
attr_reader :current
|
67
|
+
|
68
|
+
# @return [Gem::Version]
|
69
|
+
def available
|
70
|
+
if !@available && !@fetched
|
71
|
+
@fetched = true
|
72
|
+
begin
|
73
|
+
@available ||= begin
|
74
|
+
tuple = CheckGemVersion.fetcher.search_for_dependency(Gem::Dependency.new('solargraph')).flatten.first
|
75
|
+
if tuple.nil?
|
76
|
+
@error = 'An error occurred fetching the gem data'
|
77
|
+
GEM_ZERO
|
78
|
+
else
|
79
|
+
tuple.version
|
80
|
+
end
|
81
|
+
end
|
82
|
+
rescue Errno::EADDRNOTAVAIL => e
|
83
|
+
@error = "Unable to connect to gem source: #{e.message}"
|
84
|
+
GEM_ZERO
|
85
|
+
end
|
86
|
+
end
|
87
|
+
@available
|
88
|
+
end
|
89
|
+
|
90
|
+
def fetched?
|
91
|
+
@fetched ||= false
|
92
|
+
end
|
93
|
+
|
94
|
+
# @return [String, nil]
|
95
|
+
attr_reader :error
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,20 @@
|
|
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
|
+
objects = host.document(params['query'])
|
10
|
+
page = Solargraph::Page.new(host.options['viewsPath'])
|
11
|
+
content = page.render('document', layout: true, locals: {objects: objects})
|
12
|
+
set_result(
|
13
|
+
content: content
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'open3'
|
4
|
+
|
5
|
+
module Solargraph
|
6
|
+
module LanguageServer
|
7
|
+
module Message
|
8
|
+
module Extended
|
9
|
+
# Update YARD documentation for installed gems. If the `rebuild`
|
10
|
+
# parameter is true, rebuild existing yardocs.
|
11
|
+
#
|
12
|
+
class DocumentGems < Base
|
13
|
+
def process
|
14
|
+
cmd = "yard gems"
|
15
|
+
cmd += " --rebuild" if params['rebuild']
|
16
|
+
o, s = Open3.capture2(cmd)
|
17
|
+
if s != 0
|
18
|
+
host.show_message "An error occurred while building gem documentation.", LanguageServer::MessageTypes::ERROR
|
19
|
+
set_result({
|
20
|
+
status: 'err'
|
21
|
+
})
|
22
|
+
else
|
23
|
+
set_result({
|
24
|
+
status: 'ok'
|
25
|
+
})
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'open3'
|
4
|
+
|
5
|
+
module Solargraph
|
6
|
+
module LanguageServer
|
7
|
+
module Message
|
8
|
+
module Extended
|
9
|
+
# Update core Ruby documentation.
|
10
|
+
#
|
11
|
+
class DownloadCore < Base
|
12
|
+
def process
|
13
|
+
host.show_message "Downloading cores is deprecated. Solargraph currently uses RBS for core and stdlib documentation", LanguageServer::MessageTypes::INFO
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module LanguageServer
|
5
|
+
module Message
|
6
|
+
module Extended
|
7
|
+
# Update YARD documentation for installed gems. If the `rebuild`
|
8
|
+
# parameter is true, rebuild existing yardocs.
|
9
|
+
#
|
10
|
+
class Environment < Base
|
11
|
+
def process
|
12
|
+
# Make sure the environment page can report RuboCop's version
|
13
|
+
require 'rubocop'
|
14
|
+
|
15
|
+
page = Solargraph::Page.new(host.options['viewsPath'])
|
16
|
+
content = page.render('environment', layout: true, locals: { config: host.options, folders: host.folders })
|
17
|
+
set_result(
|
18
|
+
content: content
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module LanguageServer
|
5
|
+
module Message
|
6
|
+
module Extended
|
7
|
+
class Search < Base
|
8
|
+
def process
|
9
|
+
results = host.search(params['query'])
|
10
|
+
page = Solargraph::Page.new(host.options['viewsPath'])
|
11
|
+
content = page.render('search', layout: true, locals: {query: params['query'], results: results})
|
12
|
+
set_result(
|
13
|
+
content: content
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module LanguageServer
|
5
|
+
module Message
|
6
|
+
# Messages in the Extended module are custom to the Solargraph
|
7
|
+
# implementation of the language server. In the protocol, the method
|
8
|
+
# names should start with "$/" so clients that don't recognize them can
|
9
|
+
# ignore them, as per the LSP specification.
|
10
|
+
#
|
11
|
+
module Extended
|
12
|
+
autoload :Document, 'solargraph/language_server/message/extended/document'
|
13
|
+
autoload :Search, 'solargraph/language_server/message/extended/search'
|
14
|
+
autoload :CheckGemVersion, 'solargraph/language_server/message/extended/check_gem_version'
|
15
|
+
autoload :DocumentGems, 'solargraph/language_server/message/extended/document_gems'
|
16
|
+
autoload :DownloadCore, 'solargraph/language_server/message/extended/download_core'
|
17
|
+
autoload :Environment, 'solargraph/language_server/message/extended/environment'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,164 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module LanguageServer
|
5
|
+
module Message
|
6
|
+
class Initialize < Base
|
7
|
+
def process
|
8
|
+
host.configure params['initializationOptions']
|
9
|
+
host.client_capabilities = params['capabilities']
|
10
|
+
if support_workspace_folders?
|
11
|
+
host.prepare_folders params['workspaceFolders']
|
12
|
+
elsif params['rootUri']
|
13
|
+
host.prepare UriHelpers.uri_to_file(params['rootUri'])
|
14
|
+
else
|
15
|
+
host.prepare params['rootPath']
|
16
|
+
end
|
17
|
+
result = {
|
18
|
+
capabilities: {
|
19
|
+
textDocumentSync: 2, # @todo What should this be?
|
20
|
+
workspace: {
|
21
|
+
workspaceFolders: {
|
22
|
+
supported: true,
|
23
|
+
changeNotifications: true
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
28
|
+
# FIXME: lsp default is utf-16, may have different position
|
29
|
+
result[:capabilities][:positionEncoding] = "utf-32" if params.dig("capabilities", "general", "positionEncodings")&.include?("utf-32")
|
30
|
+
result[:capabilities].merge! static_completion unless dynamic_registration_for?('textDocument', 'completion')
|
31
|
+
result[:capabilities].merge! static_signature_help unless dynamic_registration_for?('textDocument', 'signatureHelp')
|
32
|
+
# result[:capabilities].merge! static_on_type_formatting unless dynamic_registration_for?('textDocument', 'onTypeFormatting')
|
33
|
+
result[:capabilities].merge! static_hover unless dynamic_registration_for?('textDocument', 'hover')
|
34
|
+
result[:capabilities].merge! static_document_formatting unless dynamic_registration_for?('textDocument', 'formatting')
|
35
|
+
result[:capabilities].merge! static_document_symbols unless dynamic_registration_for?('textDocument', 'documentSymbol')
|
36
|
+
result[:capabilities].merge! static_definitions unless dynamic_registration_for?('textDocument', 'definition')
|
37
|
+
result[:capabilities].merge! static_rename unless dynamic_registration_for?('textDocument', 'rename')
|
38
|
+
result[:capabilities].merge! static_references unless dynamic_registration_for?('textDocument', 'references')
|
39
|
+
result[:capabilities].merge! static_workspace_symbols unless dynamic_registration_for?('workspace', 'symbol')
|
40
|
+
result[:capabilities].merge! static_folding_range unless dynamic_registration_for?('textDocument', 'foldingRange')
|
41
|
+
result[:capabilities].merge! static_highlights unless dynamic_registration_for?('textDocument', 'documentHighlight')
|
42
|
+
# @todo Temporarily disabled
|
43
|
+
# result[:capabilities].merge! static_code_action unless dynamic_registration_for?('textDocument', 'codeAction')
|
44
|
+
set_result result
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def support_workspace_folders?
|
50
|
+
params['capabilities'] &&
|
51
|
+
params['capabilities']['workspace'] &&
|
52
|
+
params['capabilities']['workspace']['workspaceFolders'] &&
|
53
|
+
params['workspaceFolders']
|
54
|
+
end
|
55
|
+
|
56
|
+
def static_completion
|
57
|
+
return {} unless host.options['completion']
|
58
|
+
{
|
59
|
+
completionProvider: {
|
60
|
+
resolveProvider: true,
|
61
|
+
triggerCharacters: ['.', ':', '@']
|
62
|
+
}
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
def static_code_action
|
67
|
+
{
|
68
|
+
codeActionProvider: true,
|
69
|
+
codeActionKinds: ["quickfix"]
|
70
|
+
}
|
71
|
+
end
|
72
|
+
|
73
|
+
def static_signature_help
|
74
|
+
{
|
75
|
+
signatureHelpProvider: {
|
76
|
+
triggerCharacters: ['(', ',']
|
77
|
+
}
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
def static_on_type_formatting
|
82
|
+
{
|
83
|
+
documentOnTypeFormattingProvider: {
|
84
|
+
firstTriggerCharacter: '{',
|
85
|
+
moreTriggerCharacter: ['(']
|
86
|
+
}
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
def static_hover
|
91
|
+
return {} unless host.options['hover']
|
92
|
+
{
|
93
|
+
hoverProvider: true
|
94
|
+
}
|
95
|
+
end
|
96
|
+
|
97
|
+
def static_document_formatting
|
98
|
+
return {} unless host.options['formatting']
|
99
|
+
{
|
100
|
+
documentFormattingProvider: true
|
101
|
+
}
|
102
|
+
end
|
103
|
+
|
104
|
+
def static_document_symbols
|
105
|
+
return {} unless host.options['symbols']
|
106
|
+
{
|
107
|
+
documentSymbolProvider: true
|
108
|
+
}
|
109
|
+
end
|
110
|
+
|
111
|
+
def static_workspace_symbols
|
112
|
+
{
|
113
|
+
workspaceSymbolProvider: true
|
114
|
+
}
|
115
|
+
end
|
116
|
+
|
117
|
+
def static_definitions
|
118
|
+
return {} unless host.options['definitions']
|
119
|
+
{
|
120
|
+
definitionProvider: true
|
121
|
+
}
|
122
|
+
end
|
123
|
+
|
124
|
+
def static_rename
|
125
|
+
{
|
126
|
+
renameProvider: {prepareProvider: true}
|
127
|
+
}
|
128
|
+
end
|
129
|
+
|
130
|
+
def static_references
|
131
|
+
return {} unless host.options['references']
|
132
|
+
{
|
133
|
+
referencesProvider: true
|
134
|
+
}
|
135
|
+
end
|
136
|
+
|
137
|
+
def static_folding_range
|
138
|
+
return {} unless host.options['folding']
|
139
|
+
{
|
140
|
+
foldingRangeProvider: true
|
141
|
+
}
|
142
|
+
end
|
143
|
+
|
144
|
+
def static_highlights
|
145
|
+
{
|
146
|
+
documentHighlightProvider: true
|
147
|
+
}
|
148
|
+
end
|
149
|
+
|
150
|
+
# @param section [String]
|
151
|
+
# @param capability [String]
|
152
|
+
# @return [Boolean]
|
153
|
+
def dynamic_registration_for? section, capability
|
154
|
+
result = (params['capabilities'] &&
|
155
|
+
params['capabilities'][section] &&
|
156
|
+
params['capabilities'][section][capability] &&
|
157
|
+
params['capabilities'][section][capability]['dynamicRegistration'])
|
158
|
+
host.allow_registration("#{section}/#{capability}") if result
|
159
|
+
result
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module LanguageServer
|
5
|
+
module Message
|
6
|
+
class Initialized < Base
|
7
|
+
def process
|
8
|
+
# @todo Temporarily removed textDocument/codeAction
|
9
|
+
host.register_capabilities %w[
|
10
|
+
textDocument/completion
|
11
|
+
textDocument/hover
|
12
|
+
textDocument/signatureHelp
|
13
|
+
textDocument/formatting
|
14
|
+
textDocument/documentSymbol
|
15
|
+
textDocument/definition
|
16
|
+
textDocument/references
|
17
|
+
textDocument/rename
|
18
|
+
textDocument/prepareRename
|
19
|
+
textDocument/foldingRange
|
20
|
+
textDocument/documentHighlight
|
21
|
+
workspace/symbol
|
22
|
+
]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module LanguageServer
|
5
|
+
module Message
|
6
|
+
class MethodNotFound < Base
|
7
|
+
def process
|
8
|
+
set_error(
|
9
|
+
Solargraph::LanguageServer::ErrorCodes::METHOD_NOT_FOUND,
|
10
|
+
"Method not found: #{request['method']}"
|
11
|
+
)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module LanguageServer
|
5
|
+
module Message
|
6
|
+
class MethodNotImplemented < Base
|
7
|
+
def process
|
8
|
+
# This method ignores optional requests, e.g., any method that
|
9
|
+
# starts with `$/`.
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|