solargraph 0.46.0 → 0.54.5
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/.github/FUNDING.yml +1 -0
- data/.github/workflows/plugins.yml +40 -0
- data/.github/workflows/rspec.yml +37 -41
- data/.github/workflows/typecheck.yml +34 -0
- data/.gitignore +9 -9
- data/.rspec +2 -2
- data/.yardopts +2 -2
- data/CHANGELOG.md +1338 -1115
- data/Gemfile +0 -0
- data/LICENSE +1 -1
- data/README.md +131 -128
- data/Rakefile +0 -0
- data/SPONSORS.md +10 -18
- data/bin/solargraph +0 -0
- data/lib/solargraph/api_map/cache.rb +109 -70
- data/lib/solargraph/api_map/index.rb +167 -0
- data/lib/solargraph/api_map/source_to_yard.rb +88 -81
- data/lib/solargraph/api_map/store.rb +260 -256
- data/lib/solargraph/api_map.rb +870 -686
- data/lib/solargraph/bench.rb +44 -27
- data/lib/solargraph/cache.rb +77 -0
- data/lib/solargraph/complex_type/type_methods.rb +217 -130
- data/lib/solargraph/complex_type/unique_type.rb +386 -75
- data/lib/solargraph/complex_type.rb +394 -221
- data/lib/solargraph/convention/base.rb +33 -33
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +22 -22
- data/lib/solargraph/convention/rakefile.rb +17 -0
- data/lib/solargraph/convention.rb +47 -47
- data/lib/solargraph/converters/dd.rb +17 -12
- data/lib/solargraph/converters/dl.rb +15 -12
- data/lib/solargraph/converters/dt.rb +15 -12
- data/lib/solargraph/converters/misc.rb +1 -1
- data/lib/solargraph/diagnostics/base.rb +29 -29
- data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
- data/lib/solargraph/diagnostics/rubocop.rb +113 -98
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +66 -63
- data/lib/solargraph/diagnostics/severities.rb +15 -15
- data/lib/solargraph/diagnostics/type_check.rb +55 -54
- data/lib/solargraph/diagnostics/update_errors.rb +41 -41
- data/lib/solargraph/diagnostics.rb +55 -55
- data/lib/solargraph/doc_map.rb +188 -0
- data/lib/solargraph/environ.rb +45 -45
- data/lib/solargraph/equality.rb +33 -0
- data/lib/solargraph/gem_pins.rb +72 -0
- data/lib/solargraph/language_server/completion_item_kinds.rb +35 -35
- data/lib/solargraph/language_server/error_codes.rb +20 -20
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +128 -111
- data/lib/solargraph/language_server/host/message_worker.rb +106 -59
- data/lib/solargraph/language_server/host/sources.rb +99 -156
- data/lib/solargraph/language_server/host.rb +861 -865
- data/lib/solargraph/language_server/message/base.rb +96 -89
- data/lib/solargraph/language_server/message/cancel_request.rb +13 -13
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
- data/lib/solargraph/language_server/message/client.rb +11 -11
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -58
- data/lib/solargraph/language_server/message/completion_item.rb +11 -11
- data/lib/solargraph/language_server/message/exit_notification.rb +13 -13
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +112 -100
- data/lib/solargraph/language_server/message/extended/document.rb +20 -20
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +19 -23
- data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/extended.rb +21 -21
- data/lib/solargraph/language_server/message/initialize.rb +191 -162
- data/lib/solargraph/language_server/message/initialized.rb +28 -27
- data/lib/solargraph/language_server/message/method_not_found.rb +16 -16
- data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -14
- data/lib/solargraph/language_server/message/shutdown.rb +13 -13
- data/lib/solargraph/language_server/message/text_document/base.rb +19 -19
- data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -17
- data/lib/solargraph/language_server/message/text_document/completion.rb +56 -59
- data/lib/solargraph/language_server/message/text_document/definition.rb +38 -38
- data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -15
- data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -15
- data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -15
- data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -17
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -23
- data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +131 -126
- data/lib/solargraph/language_server/message/text_document/hover.rb +58 -54
- data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -34
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
- data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -29
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +24 -0
- data/lib/solargraph/language_server/message/text_document.rb +28 -28
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -30
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -33
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
- data/lib/solargraph/language_server/message/workspace.rb +14 -14
- data/lib/solargraph/language_server/message.rb +94 -93
- data/lib/solargraph/language_server/message_types.rb +14 -14
- data/lib/solargraph/language_server/progress.rb +135 -0
- data/lib/solargraph/language_server/request.rb +24 -24
- data/lib/solargraph/language_server/symbol_kinds.rb +36 -36
- data/lib/solargraph/language_server/transport/adapter.rb +68 -53
- data/lib/solargraph/language_server/transport/data_reader.rb +74 -72
- data/lib/solargraph/language_server/transport.rb +13 -13
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/language_server.rb +20 -19
- data/lib/solargraph/library.rb +663 -546
- data/lib/solargraph/location.rb +58 -37
- data/lib/solargraph/logging.rb +27 -27
- data/lib/solargraph/page.rb +89 -83
- data/lib/solargraph/parser/comment_ripper.rb +56 -52
- data/lib/solargraph/parser/node_methods.rb +83 -43
- data/lib/solargraph/parser/node_processor/base.rb +87 -77
- data/lib/solargraph/parser/node_processor.rb +45 -43
- data/lib/solargraph/parser/{legacy → parser_gem}/class_methods.rb +153 -135
- data/lib/solargraph/parser/{legacy → parser_gem}/flawed_builder.rb +18 -16
- data/lib/solargraph/parser/{legacy → parser_gem}/node_chainer.rb +164 -148
- data/lib/solargraph/parser/parser_gem/node_methods.rb +495 -0
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/alias_node.rb +23 -23
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +57 -0
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/begin_node.rb +15 -15
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/block_node.rb +43 -42
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/casgn_node.rb +35 -25
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/cvasgn_node.rb +23 -23
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/def_node.rb +50 -63
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/defs_node.rb +36 -36
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/gvasgn_node.rb +23 -23
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/ivasgn_node.rb +38 -38
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/lvasgn_node.rb +28 -28
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +53 -0
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/namespace_node.rb +39 -39
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/orasgn_node.rb +16 -16
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/resbody_node.rb +36 -36
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +42 -0
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/send_node.rb +259 -257
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/sym_node.rb +18 -18
- data/lib/solargraph/parser/parser_gem/node_processors.rb +56 -0
- data/lib/solargraph/parser/parser_gem.rb +12 -0
- data/lib/solargraph/parser/region.rb +66 -66
- data/lib/solargraph/parser/snippet.rb +15 -13
- data/lib/solargraph/parser.rb +22 -26
- data/lib/solargraph/pin/base.rb +378 -296
- data/lib/solargraph/pin/base_variable.rb +118 -84
- data/lib/solargraph/pin/block.rb +101 -72
- data/lib/solargraph/pin/callable.rb +147 -0
- data/lib/solargraph/pin/class_variable.rb +8 -8
- data/lib/solargraph/pin/closure.rb +57 -37
- data/lib/solargraph/pin/common.rb +70 -70
- data/lib/solargraph/pin/constant.rb +43 -43
- data/lib/solargraph/pin/conversions.rb +123 -96
- data/lib/solargraph/pin/delegated_method.rb +101 -0
- data/lib/solargraph/pin/documenting.rb +98 -105
- data/lib/solargraph/pin/duck_method.rb +16 -16
- data/lib/solargraph/pin/global_variable.rb +8 -8
- data/lib/solargraph/pin/instance_variable.rb +34 -30
- data/lib/solargraph/pin/keyword.rb +15 -15
- data/lib/solargraph/pin/keyword_param.rb +8 -8
- data/lib/solargraph/pin/local_variable.rb +67 -55
- data/lib/solargraph/pin/method.rb +527 -245
- data/lib/solargraph/pin/method_alias.rb +31 -31
- data/lib/solargraph/pin/namespace.rb +107 -91
- data/lib/solargraph/pin/parameter.rb +212 -201
- data/lib/solargraph/pin/proxy_type.rb +29 -29
- data/lib/solargraph/pin/reference/extend.rb +10 -10
- data/lib/solargraph/pin/reference/include.rb +10 -10
- data/lib/solargraph/pin/reference/override.rb +29 -29
- data/lib/solargraph/pin/reference/prepend.rb +10 -10
- data/lib/solargraph/pin/reference/require.rb +14 -14
- data/lib/solargraph/pin/reference/superclass.rb +10 -10
- data/lib/solargraph/pin/reference.rb +22 -14
- data/lib/solargraph/pin/search.rb +56 -56
- data/lib/solargraph/pin/signature.rb +17 -0
- data/lib/solargraph/pin/singleton.rb +11 -11
- data/lib/solargraph/pin/symbol.rb +47 -47
- data/lib/solargraph/pin.rb +41 -37
- data/lib/solargraph/position.rb +107 -100
- data/lib/solargraph/range.rb +98 -95
- data/lib/solargraph/rbs_map/conversions.rb +646 -0
- data/lib/solargraph/rbs_map/core_fills.rb +50 -0
- data/lib/solargraph/rbs_map/core_map.rb +28 -0
- data/lib/solargraph/rbs_map/stdlib_map.rb +33 -0
- data/lib/solargraph/rbs_map.rb +93 -0
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +269 -226
- data/lib/solargraph/source/chain/array.rb +33 -0
- data/lib/solargraph/source/chain/block_symbol.rb +13 -0
- data/lib/solargraph/source/chain/block_variable.rb +13 -13
- data/lib/solargraph/source/chain/call.rb +303 -204
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +89 -75
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +33 -28
- data/lib/solargraph/source/chain/head.rb +19 -19
- data/lib/solargraph/source/chain/if.rb +28 -0
- data/lib/solargraph/source/chain/instance_variable.rb +13 -13
- data/lib/solargraph/source/chain/link.rb +98 -71
- data/lib/solargraph/source/chain/literal.rb +28 -23
- data/lib/solargraph/source/chain/or.rb +23 -23
- data/lib/solargraph/source/chain/q_call.rb +11 -11
- data/lib/solargraph/source/chain/variable.rb +13 -13
- data/lib/solargraph/source/chain/z_super.rb +30 -30
- data/lib/solargraph/source/chain.rb +252 -164
- data/lib/solargraph/source/change.rb +82 -79
- data/lib/solargraph/source/cursor.rb +167 -164
- data/lib/solargraph/source/source_chainer.rb +194 -191
- data/lib/solargraph/source/updater.rb +55 -54
- data/lib/solargraph/source.rb +495 -522
- data/lib/solargraph/source_map/clip.rb +232 -224
- data/lib/solargraph/source_map/completion.rb +23 -23
- data/lib/solargraph/source_map/data.rb +30 -0
- data/lib/solargraph/source_map/mapper.rb +255 -212
- data/lib/solargraph/source_map.rb +217 -180
- data/lib/solargraph/type_checker/checks.rb +120 -99
- data/lib/solargraph/type_checker/param_def.rb +35 -35
- data/lib/solargraph/type_checker/problem.rb +32 -32
- data/lib/solargraph/type_checker/rules.rb +62 -57
- data/lib/solargraph/type_checker.rb +672 -543
- data/lib/solargraph/version.rb +5 -5
- data/lib/solargraph/views/environment.erb +56 -58
- data/lib/solargraph/workspace/config.rb +239 -231
- data/lib/solargraph/workspace.rb +239 -215
- data/lib/solargraph/yard_map/cache.rb +25 -19
- data/lib/solargraph/yard_map/helpers.rb +16 -16
- data/lib/solargraph/yard_map/mapper/to_constant.rb +26 -25
- data/lib/solargraph/yard_map/mapper/to_method.rb +94 -78
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +28 -27
- data/lib/solargraph/yard_map/mapper.rb +78 -77
- data/lib/solargraph/yard_map/to_method.rb +86 -79
- data/lib/solargraph/yard_map.rb +18 -460
- data/lib/solargraph/yard_tags.rb +20 -0
- data/lib/solargraph/yardoc.rb +52 -0
- data/lib/solargraph.rb +72 -69
- data/solargraph.gemspec +21 -10
- metadata +184 -115
- data/.travis.yml +0 -19
- data/lib/solargraph/api_map/bundler_methods.rb +0 -22
- data/lib/solargraph/compat.rb +0 -37
- data/lib/solargraph/convention/rspec.rb +0 -30
- data/lib/solargraph/documentor.rb +0 -76
- data/lib/solargraph/language_server/host/cataloger.rb +0 -56
- data/lib/solargraph/parser/legacy/node_methods.rb +0 -325
- data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +0 -23
- data/lib/solargraph/parser/legacy/node_processors/args_node.rb +0 -35
- data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +0 -15
- data/lib/solargraph/parser/legacy/node_processors/def_node.rb +0 -63
- data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +0 -21
- data/lib/solargraph/parser/legacy/node_processors.rb +0 -54
- data/lib/solargraph/parser/legacy.rb +0 -12
- data/lib/solargraph/parser/rubyvm/class_methods.rb +0 -144
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +0 -160
- data/lib/solargraph/parser/rubyvm/node_methods.rb +0 -315
- data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +0 -85
- data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +0 -42
- data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +0 -22
- data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +0 -23
- data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +0 -57
- data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +0 -23
- data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +0 -38
- data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +0 -39
- data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +0 -20
- data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +0 -27
- data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +0 -39
- data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +0 -26
- data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +0 -15
- data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +0 -45
- data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +0 -21
- data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +0 -15
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +0 -277
- data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +0 -18
- data/lib/solargraph/parser/rubyvm/node_processors.rb +0 -63
- data/lib/solargraph/parser/rubyvm.rb +0 -40
- data/lib/solargraph/yard_map/core_docs.rb +0 -170
- data/lib/solargraph/yard_map/core_fills.rb +0 -208
- data/lib/solargraph/yard_map/core_gen.rb +0 -76
- data/lib/solargraph/yard_map/rdoc_to_yard.rb +0 -140
- data/lib/solargraph/yard_map/stdlib_fills.rb +0 -43
- data/lib/yard-solargraph.rb +0 -33
- data/yardoc/2.2.2.tar.gz +0 -0
@@ -1,55 +1,55 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Solargraph
|
4
|
-
# The Diagnostics library provides reporters for analyzing problems in code
|
5
|
-
# and providing the results to language server clients.
|
6
|
-
#
|
7
|
-
module Diagnostics
|
8
|
-
autoload :Base, 'solargraph/diagnostics/base'
|
9
|
-
autoload :Severities, 'solargraph/diagnostics/severities'
|
10
|
-
autoload :Rubocop, 'solargraph/diagnostics/rubocop'
|
11
|
-
autoload :RubocopHelpers, 'solargraph/diagnostics/rubocop_helpers'
|
12
|
-
autoload :RequireNotFound, 'solargraph/diagnostics/require_not_found'
|
13
|
-
autoload :UpdateErrors, 'solargraph/diagnostics/update_errors'
|
14
|
-
autoload :TypeCheck, 'solargraph/diagnostics/type_check'
|
15
|
-
|
16
|
-
class << self
|
17
|
-
# Add a reporter with a name to identify it in .solargraph.yml files.
|
18
|
-
#
|
19
|
-
# @param name [String] The name
|
20
|
-
# @param klass [Class<Solargraph::Diagnostics::Base>] The class implementation
|
21
|
-
# @return [void]
|
22
|
-
def register name, klass
|
23
|
-
reporter_hash[name] = klass
|
24
|
-
end
|
25
|
-
|
26
|
-
# Get an array of reporter names.
|
27
|
-
#
|
28
|
-
# @return [Array<String>]
|
29
|
-
def reporters
|
30
|
-
reporter_hash.keys - ['type_not_defined'] # @todo Hide type_not_defined for now
|
31
|
-
end
|
32
|
-
|
33
|
-
# Find a reporter by name.
|
34
|
-
#
|
35
|
-
# @param name [String] The name with which the reporter was registered
|
36
|
-
# @return [Class<Solargraph::Diagnostics::Base
|
37
|
-
def reporter name
|
38
|
-
reporter_hash[name]
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
# @return [Hash]
|
44
|
-
def reporter_hash
|
45
|
-
@reporter_hash ||= {}
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
register 'rubocop', Rubocop
|
50
|
-
register 'require_not_found', RequireNotFound
|
51
|
-
register 'typecheck', TypeCheck
|
52
|
-
register 'update_errors', UpdateErrors
|
53
|
-
register 'type_not_defined', TypeCheck # @todo Retained for backwards compatibility
|
54
|
-
end
|
55
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
# The Diagnostics library provides reporters for analyzing problems in code
|
5
|
+
# and providing the results to language server clients.
|
6
|
+
#
|
7
|
+
module Diagnostics
|
8
|
+
autoload :Base, 'solargraph/diagnostics/base'
|
9
|
+
autoload :Severities, 'solargraph/diagnostics/severities'
|
10
|
+
autoload :Rubocop, 'solargraph/diagnostics/rubocop'
|
11
|
+
autoload :RubocopHelpers, 'solargraph/diagnostics/rubocop_helpers'
|
12
|
+
autoload :RequireNotFound, 'solargraph/diagnostics/require_not_found'
|
13
|
+
autoload :UpdateErrors, 'solargraph/diagnostics/update_errors'
|
14
|
+
autoload :TypeCheck, 'solargraph/diagnostics/type_check'
|
15
|
+
|
16
|
+
class << self
|
17
|
+
# Add a reporter with a name to identify it in .solargraph.yml files.
|
18
|
+
#
|
19
|
+
# @param name [String] The name
|
20
|
+
# @param klass [Class<Solargraph::Diagnostics::Base>] The class implementation
|
21
|
+
# @return [void]
|
22
|
+
def register name, klass
|
23
|
+
reporter_hash[name] = klass
|
24
|
+
end
|
25
|
+
|
26
|
+
# Get an array of reporter names.
|
27
|
+
#
|
28
|
+
# @return [Array<String>]
|
29
|
+
def reporters
|
30
|
+
reporter_hash.keys - ['type_not_defined'] # @todo Hide type_not_defined for now
|
31
|
+
end
|
32
|
+
|
33
|
+
# Find a reporter by name.
|
34
|
+
#
|
35
|
+
# @param name [String] The name with which the reporter was registered
|
36
|
+
# @return [Class<Solargraph::Diagnostics::Base>, nil]
|
37
|
+
def reporter name
|
38
|
+
reporter_hash[name]
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
# @return [Hash{String => Class<Solargraph::Diagnostics::Base>}]
|
44
|
+
def reporter_hash
|
45
|
+
@reporter_hash ||= {}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
register 'rubocop', Rubocop
|
50
|
+
register 'require_not_found', RequireNotFound
|
51
|
+
register 'typecheck', TypeCheck
|
52
|
+
register 'update_errors', UpdateErrors
|
53
|
+
register 'type_not_defined', TypeCheck # @todo Retained for backwards compatibility
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,188 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
# A collection of pins generated from required gems.
|
5
|
+
#
|
6
|
+
class DocMap
|
7
|
+
# @return [Array<String>]
|
8
|
+
attr_reader :requires
|
9
|
+
|
10
|
+
# @return [Array<Gem::Specification>]
|
11
|
+
attr_reader :preferences
|
12
|
+
|
13
|
+
# @return [Array<Pin::Base>]
|
14
|
+
attr_reader :pins
|
15
|
+
|
16
|
+
# @return [Array<Gem::Specification>]
|
17
|
+
attr_reader :uncached_gemspecs
|
18
|
+
|
19
|
+
# @param requires [Array<String>]
|
20
|
+
# @param preferences [Array<Gem::Specification>]
|
21
|
+
# @param rbs_path [String, Pathname, nil]
|
22
|
+
def initialize(requires, preferences, rbs_path = nil)
|
23
|
+
@requires = requires.compact
|
24
|
+
@preferences = preferences.compact
|
25
|
+
@rbs_path = rbs_path
|
26
|
+
generate
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Array<Gem::Specification>]
|
30
|
+
def gemspecs
|
31
|
+
@gemspecs ||= required_gem_map.values.compact
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [Array<String>]
|
35
|
+
def unresolved_requires
|
36
|
+
@unresolved_requires ||= required_gem_map.select { |_, gemspec| gemspec.nil? }.keys
|
37
|
+
end
|
38
|
+
|
39
|
+
# @return [Hash{Gem::Specification => Array[Pin::Base]}]
|
40
|
+
def self.gems_in_memory
|
41
|
+
@gems_in_memory ||= {}
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [Set<Gem::Specification>]
|
45
|
+
def dependencies
|
46
|
+
@dependencies ||= (gemspecs.flat_map { |spec| fetch_dependencies(spec) } - gemspecs).to_set
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
# @return [void]
|
52
|
+
def generate
|
53
|
+
@pins = []
|
54
|
+
@uncached_gemspecs = []
|
55
|
+
required_gem_map.each do |path, gemspec|
|
56
|
+
if gemspec
|
57
|
+
try_cache gemspec
|
58
|
+
else
|
59
|
+
try_stdlib_map path
|
60
|
+
end
|
61
|
+
end
|
62
|
+
dependencies.each { |dep| try_cache dep }
|
63
|
+
@uncached_gemspecs.uniq!
|
64
|
+
end
|
65
|
+
|
66
|
+
# @return [Hash{String => Gem::Specification, nil}]
|
67
|
+
def required_gem_map
|
68
|
+
@required_gem_map ||= requires.to_h { |path| [path, resolve_path_to_gemspec(path)] }
|
69
|
+
end
|
70
|
+
|
71
|
+
# @return [Hash{String => Gem::Specification}]
|
72
|
+
def preference_map
|
73
|
+
@preference_map ||= preferences.to_h { |gemspec| [gemspec.name, gemspec] }
|
74
|
+
end
|
75
|
+
|
76
|
+
# @param gemspec [Gem::Specification]
|
77
|
+
# @return [void]
|
78
|
+
def try_cache gemspec
|
79
|
+
return if try_gem_in_memory(gemspec)
|
80
|
+
cache_file = File.join('gems', "#{gemspec.name}-#{gemspec.version}.ser")
|
81
|
+
if Cache.exist?(cache_file)
|
82
|
+
cached = Cache.load(cache_file)
|
83
|
+
gempins = update_from_collection(gemspec, cached)
|
84
|
+
self.class.gems_in_memory[gemspec] = gempins
|
85
|
+
@pins.concat gempins
|
86
|
+
else
|
87
|
+
Solargraph.logger.debug "No pin cache for #{gemspec.name} #{gemspec.version}"
|
88
|
+
@uncached_gemspecs.push gemspec
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# @param path [String] require path that might be in the RBS stdlib collection
|
93
|
+
# @return [void]
|
94
|
+
def try_stdlib_map path
|
95
|
+
map = RbsMap::StdlibMap.load(path)
|
96
|
+
if map.resolved?
|
97
|
+
Solargraph.logger.debug "Loading stdlib pins for #{path}"
|
98
|
+
@pins.concat map.pins
|
99
|
+
else
|
100
|
+
# @todo Temporarily ignoring unresolved `require 'set'`
|
101
|
+
Solargraph.logger.debug "Require path #{path} could not be resolved" unless path == 'set'
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# @param gemspec [Gem::Specification]
|
106
|
+
# @return [Boolean]
|
107
|
+
def try_gem_in_memory gemspec
|
108
|
+
gempins = DocMap.gems_in_memory[gemspec]
|
109
|
+
return false unless gempins
|
110
|
+
Solargraph.logger.debug "Found #{gemspec.name} #{gemspec.version} in memory"
|
111
|
+
@pins.concat gempins
|
112
|
+
true
|
113
|
+
end
|
114
|
+
|
115
|
+
# @param gemspec [Gem::Specification]
|
116
|
+
def update_from_collection gemspec, gempins
|
117
|
+
return gempins unless @rbs_path && File.directory?(@rbs_path)
|
118
|
+
return gempins if RbsMap.new(gemspec.name, gemspec.version).resolved?
|
119
|
+
|
120
|
+
rbs_map = RbsMap.new(gemspec.name, gemspec.version, directories: [@rbs_path])
|
121
|
+
return gempins unless rbs_map.resolved?
|
122
|
+
|
123
|
+
Solargraph.logger.info "Updating #{gemspec.name} #{gemspec.version} from collection"
|
124
|
+
GemPins.combine(gempins, rbs_map)
|
125
|
+
end
|
126
|
+
|
127
|
+
# @param path [String]
|
128
|
+
# @return [Gem::Specification, nil]
|
129
|
+
def resolve_path_to_gemspec path
|
130
|
+
return nil if path.empty?
|
131
|
+
|
132
|
+
gemspec = Gem::Specification.find_by_path(path)
|
133
|
+
if gemspec.nil?
|
134
|
+
gem_name_guess = path.split('/').first
|
135
|
+
begin
|
136
|
+
# this can happen when the gem is included via a local path in
|
137
|
+
# a Gemfile; Gem doesn't try to index the paths in that case.
|
138
|
+
#
|
139
|
+
# See if we can make a good guess:
|
140
|
+
potential_gemspec = Gem::Specification.find_by_name(gem_name_guess)
|
141
|
+
file = "lib/#{path}.rb"
|
142
|
+
gemspec = potential_gemspec if potential_gemspec.files.any? { |gemspec_file| file == gemspec_file }
|
143
|
+
rescue Gem::MissingSpecError
|
144
|
+
Solargraph.logger.debug "Require path #{path} could not be resolved to a gem via find_by_path or guess of #{gem_name_guess}"
|
145
|
+
nil
|
146
|
+
end
|
147
|
+
end
|
148
|
+
gemspec_or_preference gemspec
|
149
|
+
end
|
150
|
+
|
151
|
+
# @param gemspec [Gem::Specification, nil]
|
152
|
+
# @return [Gem::Specification, nil]
|
153
|
+
def gemspec_or_preference gemspec
|
154
|
+
return gemspec unless gemspec && preference_map.key?(gemspec.name)
|
155
|
+
return gemspec if gemspec.version == preference_map[gemspec.name].version
|
156
|
+
|
157
|
+
change_gemspec_version gemspec, preference_map[by_path.name].version
|
158
|
+
end
|
159
|
+
|
160
|
+
# @param gemspec [Gem::Specification]
|
161
|
+
# @param version [Gem::Version]
|
162
|
+
# @return [Gem::Specification]
|
163
|
+
def change_gemspec_version gemspec, version
|
164
|
+
Gem::Specification.find_by_name(gemspec.name, "= #{version}")
|
165
|
+
rescue Gem::MissingSpecError
|
166
|
+
Solargraph.logger.info "Gem #{gemspec.name} version #{version} not found. Using #{gemspec.version} instead"
|
167
|
+
gemspec
|
168
|
+
end
|
169
|
+
|
170
|
+
# @param gemspec [Gem::Specification]
|
171
|
+
# @return [Array<Gem::Specification>]
|
172
|
+
def fetch_dependencies gemspec
|
173
|
+
only_runtime_dependencies(gemspec).each_with_object(Set.new) do |spec, deps|
|
174
|
+
Solargraph.logger.info "Adding #{spec.name} dependency for #{gemspec.name}"
|
175
|
+
dep = Gem::Specification.find_by_name(spec.name, spec.requirement)
|
176
|
+
deps.merge fetch_dependencies(dep) if deps.add?(dep)
|
177
|
+
rescue Gem::MissingSpecError
|
178
|
+
Solargraph.logger.warn "Gem dependency #{spec.name} #{spec.requirements} for #{gemspec.name} not found."
|
179
|
+
end.to_a
|
180
|
+
end
|
181
|
+
|
182
|
+
# @param gemspec [Gem::Specification]
|
183
|
+
# @return [Array<Gem::Dependency>]
|
184
|
+
def only_runtime_dependencies gemspec
|
185
|
+
gemspec.dependencies - gemspec.development_dependencies
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
data/lib/solargraph/environ.rb
CHANGED
@@ -1,45 +1,45 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Solargraph
|
4
|
-
# A collection of additional data, such as map pins and required paths, that
|
5
|
-
# can be added to an ApiMap.
|
6
|
-
#
|
7
|
-
# Conventions are used to add Environs.
|
8
|
-
#
|
9
|
-
class Environ
|
10
|
-
# @return [Array<String>]
|
11
|
-
attr_reader :requires
|
12
|
-
|
13
|
-
# @return [Array<String>]
|
14
|
-
attr_reader :domains
|
15
|
-
|
16
|
-
# @return [Array<Pin::Reference::Override>]
|
17
|
-
attr_reader :pins
|
18
|
-
|
19
|
-
# @param requires [Array<String>]
|
20
|
-
# @param domains [Array<String>]
|
21
|
-
# @param pins [Array<Pin::Base>]
|
22
|
-
def initialize requires: [], domains: [], pins: []
|
23
|
-
@requires = requires
|
24
|
-
@domains = domains
|
25
|
-
@pins = pins
|
26
|
-
end
|
27
|
-
|
28
|
-
# @return [self]
|
29
|
-
def clear
|
30
|
-
domains.clear
|
31
|
-
requires.clear
|
32
|
-
pins.clear
|
33
|
-
self
|
34
|
-
end
|
35
|
-
|
36
|
-
# @param other [Environ]
|
37
|
-
# @return [self]
|
38
|
-
def merge other
|
39
|
-
domains.concat other.domains
|
40
|
-
requires.concat other.requires
|
41
|
-
pins.concat other.pins
|
42
|
-
self
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
# A collection of additional data, such as map pins and required paths, that
|
5
|
+
# can be added to an ApiMap.
|
6
|
+
#
|
7
|
+
# Conventions are used to add Environs.
|
8
|
+
#
|
9
|
+
class Environ
|
10
|
+
# @return [Array<String>]
|
11
|
+
attr_reader :requires
|
12
|
+
|
13
|
+
# @return [Array<String>]
|
14
|
+
attr_reader :domains
|
15
|
+
|
16
|
+
# @return [Array<Pin::Reference::Override>]
|
17
|
+
attr_reader :pins
|
18
|
+
|
19
|
+
# @param requires [Array<String>]
|
20
|
+
# @param domains [Array<String>]
|
21
|
+
# @param pins [Array<Pin::Base>]
|
22
|
+
def initialize requires: [], domains: [], pins: []
|
23
|
+
@requires = requires
|
24
|
+
@domains = domains
|
25
|
+
@pins = pins
|
26
|
+
end
|
27
|
+
|
28
|
+
# @return [self]
|
29
|
+
def clear
|
30
|
+
domains.clear
|
31
|
+
requires.clear
|
32
|
+
pins.clear
|
33
|
+
self
|
34
|
+
end
|
35
|
+
|
36
|
+
# @param other [Environ]
|
37
|
+
# @return [self]
|
38
|
+
def merge other
|
39
|
+
domains.concat other.domains
|
40
|
+
requires.concat other.requires
|
41
|
+
pins.concat other.pins
|
42
|
+
self
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
# @abstract This mixin relies on these -
|
5
|
+
# methods:
|
6
|
+
# equality_fields()
|
7
|
+
module Equality
|
8
|
+
# @!method equality_fields
|
9
|
+
# @return [Array]
|
10
|
+
|
11
|
+
# @param other [Object]
|
12
|
+
# @return [Boolean]
|
13
|
+
def eql?(other)
|
14
|
+
self.class.eql?(other.class) &&
|
15
|
+
equality_fields.eql?(other.equality_fields)
|
16
|
+
end
|
17
|
+
|
18
|
+
# @param other [Object]
|
19
|
+
# @return [Boolean]
|
20
|
+
def ==(other)
|
21
|
+
self.eql?(other)
|
22
|
+
end
|
23
|
+
|
24
|
+
def hash
|
25
|
+
equality_fields.hash
|
26
|
+
end
|
27
|
+
|
28
|
+
def freeze
|
29
|
+
equality_fields.each(&:freeze)
|
30
|
+
super
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rbs'
|
4
|
+
|
5
|
+
module Solargraph
|
6
|
+
# A utility for building gem pins from a combination of YARD and RBS
|
7
|
+
# documentation.
|
8
|
+
#
|
9
|
+
module GemPins
|
10
|
+
# Build an array of pins from a gem specification. The process starts with
|
11
|
+
# YARD, enhances the resulting pins with RBS definitions, and appends RBS
|
12
|
+
# pins that don't exist in the YARD mapping.
|
13
|
+
#
|
14
|
+
# @param gemspec [Gem::Specification]
|
15
|
+
# @return [Array<Pin::Base>]
|
16
|
+
def self.build(gemspec)
|
17
|
+
yard_pins = build_yard_pins(gemspec)
|
18
|
+
rbs_map = RbsMap.from_gemspec(gemspec)
|
19
|
+
combine yard_pins, rbs_map
|
20
|
+
end
|
21
|
+
|
22
|
+
# @param yard_pins [Array<Pin::Base>]
|
23
|
+
# @param rbs_map [RbsMap]
|
24
|
+
# @return [Array<Pin::Base>]
|
25
|
+
def self.combine(yard_pins, rbs_map)
|
26
|
+
in_yard = Set.new
|
27
|
+
combined = yard_pins.map do |yard|
|
28
|
+
in_yard.add yard.path
|
29
|
+
next yard unless yard.is_a?(Pin::Method)
|
30
|
+
|
31
|
+
rbs = rbs_map.path_pin(yard.path, Pin::Method)
|
32
|
+
next yard unless rbs
|
33
|
+
|
34
|
+
# @sg-ignore
|
35
|
+
yard.class.new(
|
36
|
+
location: yard.location,
|
37
|
+
closure: yard.closure,
|
38
|
+
name: yard.name,
|
39
|
+
comments: yard.comments,
|
40
|
+
scope: yard.scope,
|
41
|
+
parameters: rbs.parameters,
|
42
|
+
generics: rbs.generics,
|
43
|
+
node: yard.node,
|
44
|
+
signatures: yard.signatures,
|
45
|
+
return_type: best_return_type(rbs.return_type, yard.return_type)
|
46
|
+
)
|
47
|
+
end
|
48
|
+
in_rbs = rbs_map.pins.reject { |pin| in_yard.include?(pin.path) }
|
49
|
+
combined + in_rbs
|
50
|
+
end
|
51
|
+
|
52
|
+
class << self
|
53
|
+
private
|
54
|
+
|
55
|
+
# @param gemspec [Gem::Specification]
|
56
|
+
# @return [Array<Pin::Base>]
|
57
|
+
def build_yard_pins(gemspec)
|
58
|
+
Yardoc.cache(gemspec) unless Yardoc.cached?(gemspec)
|
59
|
+
yardoc = Yardoc.load!(gemspec)
|
60
|
+
YardMap::Mapper.new(yardoc, gemspec).map
|
61
|
+
end
|
62
|
+
|
63
|
+
# Select the first defined type.
|
64
|
+
#
|
65
|
+
# @param choices [Array<ComplexType>]
|
66
|
+
# @return [ComplexType]
|
67
|
+
def best_return_type *choices
|
68
|
+
choices.find { |pin| pin.defined? } || choices.first || ComplexType::UNDEFINED
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -1,35 +1,35 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Solargraph
|
4
|
-
module LanguageServer
|
5
|
-
# The CompletionItemKind constants for the language server protocol.
|
6
|
-
#
|
7
|
-
module CompletionItemKinds
|
8
|
-
TEXT = 1
|
9
|
-
METHOD = 2
|
10
|
-
FUNCTION = 3
|
11
|
-
CONSTRUCTOR = 4
|
12
|
-
FIELD = 5
|
13
|
-
VARIABLE = 6
|
14
|
-
CLASS = 7
|
15
|
-
INTERFACE = 8
|
16
|
-
MODULE = 9
|
17
|
-
PROPERTY = 10
|
18
|
-
UNIT = 11
|
19
|
-
VALUE = 12
|
20
|
-
ENUM = 13
|
21
|
-
KEYWORD = 14
|
22
|
-
SNIPPET = 15
|
23
|
-
COLOR = 16
|
24
|
-
FILE = 17
|
25
|
-
REFERENCE = 18
|
26
|
-
FOLDER = 19
|
27
|
-
ENUM_MEMBER = 20
|
28
|
-
CONSTANT = 21
|
29
|
-
STRUCT = 22
|
30
|
-
EVENT = 23
|
31
|
-
OPERATOR = 24
|
32
|
-
TYPE_PARAMETER = 25
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module LanguageServer
|
5
|
+
# The CompletionItemKind constants for the language server protocol.
|
6
|
+
#
|
7
|
+
module CompletionItemKinds
|
8
|
+
TEXT = 1
|
9
|
+
METHOD = 2
|
10
|
+
FUNCTION = 3
|
11
|
+
CONSTRUCTOR = 4
|
12
|
+
FIELD = 5
|
13
|
+
VARIABLE = 6
|
14
|
+
CLASS = 7
|
15
|
+
INTERFACE = 8
|
16
|
+
MODULE = 9
|
17
|
+
PROPERTY = 10
|
18
|
+
UNIT = 11
|
19
|
+
VALUE = 12
|
20
|
+
ENUM = 13
|
21
|
+
KEYWORD = 14
|
22
|
+
SNIPPET = 15
|
23
|
+
COLOR = 16
|
24
|
+
FILE = 17
|
25
|
+
REFERENCE = 18
|
26
|
+
FOLDER = 19
|
27
|
+
ENUM_MEMBER = 20
|
28
|
+
CONSTANT = 21
|
29
|
+
STRUCT = 22
|
30
|
+
EVENT = 23
|
31
|
+
OPERATOR = 24
|
32
|
+
TYPE_PARAMETER = 25
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,20 +1,20 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Solargraph
|
4
|
-
module LanguageServer
|
5
|
-
# The ErrorCode constants for the language server protocol.
|
6
|
-
#
|
7
|
-
module ErrorCodes
|
8
|
-
PARSE_ERROR = -32700
|
9
|
-
INVALID_REQUEST = -32600
|
10
|
-
METHOD_NOT_FOUND = -32601
|
11
|
-
INVALID_PARAMS = -32602
|
12
|
-
INTERNAL_ERROR = -32603
|
13
|
-
SERVER_ERROR_START = -32099
|
14
|
-
SERVER_ERROR_END = -32000
|
15
|
-
SERVER_NOT_INITIALIZED = -32002
|
16
|
-
UNKNOWN_ERROR_CODE = -32001
|
17
|
-
REQUEST_CANCELLED = -32800
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module LanguageServer
|
5
|
+
# The ErrorCode constants for the language server protocol.
|
6
|
+
#
|
7
|
+
module ErrorCodes
|
8
|
+
PARSE_ERROR = -32700
|
9
|
+
INVALID_REQUEST = -32600
|
10
|
+
METHOD_NOT_FOUND = -32601
|
11
|
+
INVALID_PARAMS = -32602
|
12
|
+
INTERNAL_ERROR = -32603
|
13
|
+
SERVER_ERROR_START = -32099
|
14
|
+
SERVER_ERROR_END = -32000
|
15
|
+
SERVER_NOT_INITIALIZED = -32002
|
16
|
+
UNKNOWN_ERROR_CODE = -32001
|
17
|
+
REQUEST_CANCELLED = -32800
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|