solargraph 0.54.4 → 0.58.3
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/.gitattributes +2 -0
- data/.github/workflows/linting.yml +127 -0
- data/.github/workflows/plugins.yml +185 -6
- data/.github/workflows/rspec.yml +55 -5
- data/.github/workflows/typecheck.yml +8 -3
- data/.gitignore +8 -0
- data/.overcommit.yml +72 -0
- data/.rspec +1 -0
- data/.rubocop.yml +66 -0
- data/.rubocop_todo.yml +1279 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +143 -0
- data/README.md +20 -6
- data/Rakefile +125 -13
- data/bin/solargraph +3 -0
- data/lib/solargraph/api_map/cache.rb +110 -109
- data/lib/solargraph/api_map/constants.rb +279 -0
- data/lib/solargraph/api_map/index.rb +193 -167
- data/lib/solargraph/api_map/source_to_yard.rb +97 -88
- data/lib/solargraph/api_map/store.rb +384 -241
- data/lib/solargraph/api_map.rb +945 -875
- data/lib/solargraph/bench.rb +45 -28
- data/lib/solargraph/complex_type/type_methods.rb +228 -217
- data/lib/solargraph/complex_type/unique_type.rb +482 -386
- data/lib/solargraph/complex_type.rb +444 -394
- data/lib/solargraph/convention/active_support_concern.rb +111 -0
- data/lib/solargraph/convention/base.rb +20 -3
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -0
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -0
- data/lib/solargraph/convention/data_definition.rb +105 -0
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +23 -22
- data/lib/solargraph/convention/rakefile.rb +17 -17
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -0
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -0
- data/lib/solargraph/convention/struct_definition.rb +164 -0
- data/lib/solargraph/convention.rb +78 -47
- data/lib/solargraph/converters/dd.rb +17 -17
- data/lib/solargraph/converters/dl.rb +15 -15
- data/lib/solargraph/converters/dt.rb +15 -15
- data/lib/solargraph/converters/misc.rb +1 -1
- data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
- data/lib/solargraph/diagnostics/rubocop.rb +118 -113
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -66
- data/lib/solargraph/diagnostics/type_check.rb +55 -55
- data/lib/solargraph/diagnostics/update_errors.rb +41 -41
- data/lib/solargraph/doc_map.rb +439 -188
- data/lib/solargraph/environ.rb +9 -2
- data/lib/solargraph/equality.rb +34 -33
- data/lib/solargraph/gem_pins.rb +98 -72
- 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 +130 -128
- data/lib/solargraph/language_server/host/message_worker.rb +112 -106
- data/lib/solargraph/language_server/host/sources.rb +99 -99
- data/lib/solargraph/language_server/host.rb +878 -861
- data/lib/solargraph/language_server/message/base.rb +97 -96
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -112
- data/lib/solargraph/language_server/message/extended/document.rb +23 -20
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +19 -19
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/initialize.rb +191 -191
- data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +40 -38
- 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 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -131
- data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
- 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 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -24
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -24
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
- data/lib/solargraph/language_server/message.rb +94 -94
- data/lib/solargraph/language_server/progress.rb +8 -0
- data/lib/solargraph/language_server/request.rb +27 -24
- data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/library.rb +683 -662
- data/lib/solargraph/location.rb +82 -58
- data/lib/solargraph/logging.rb +37 -27
- data/lib/solargraph/page.rb +92 -89
- data/lib/solargraph/parser/comment_ripper.rb +69 -56
- data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -0
- data/lib/solargraph/parser/node_processor/base.rb +92 -87
- data/lib/solargraph/parser/node_processor.rb +62 -45
- data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -157
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -18
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -164
- data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -495
- data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -57
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -43
- data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -50
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -36
- data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +2 -1
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -38
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -28
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -53
- data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +8 -7
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -16
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -36
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -42
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -259
- data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +3 -1
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -0
- data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -56
- data/lib/solargraph/parser/parser_gem.rb +12 -12
- data/lib/solargraph/parser/region.rb +69 -66
- data/lib/solargraph/parser/snippet.rb +17 -15
- data/lib/solargraph/parser.rb +23 -22
- data/lib/solargraph/pin/base.rb +729 -378
- data/lib/solargraph/pin/base_variable.rb +126 -118
- data/lib/solargraph/pin/block.rb +104 -101
- data/lib/solargraph/pin/breakable.rb +9 -0
- data/lib/solargraph/pin/callable.rb +231 -147
- data/lib/solargraph/pin/closure.rb +72 -57
- data/lib/solargraph/pin/common.rb +79 -70
- data/lib/solargraph/pin/constant.rb +45 -43
- data/lib/solargraph/pin/conversions.rb +123 -123
- data/lib/solargraph/pin/delegated_method.rb +120 -101
- data/lib/solargraph/pin/documenting.rb +114 -98
- data/lib/solargraph/pin/instance_variable.rb +34 -34
- data/lib/solargraph/pin/keyword.rb +20 -15
- data/lib/solargraph/pin/local_variable.rb +75 -67
- data/lib/solargraph/pin/method.rb +672 -527
- data/lib/solargraph/pin/method_alias.rb +34 -31
- data/lib/solargraph/pin/namespace.rb +115 -107
- data/lib/solargraph/pin/parameter.rb +275 -212
- data/lib/solargraph/pin/proxy_type.rb +39 -29
- data/lib/solargraph/pin/reference/override.rb +47 -29
- data/lib/solargraph/pin/reference/require.rb +2 -2
- data/lib/solargraph/pin/reference/superclass.rb +15 -10
- data/lib/solargraph/pin/reference.rb +39 -22
- data/lib/solargraph/pin/search.rb +61 -56
- data/lib/solargraph/pin/signature.rb +61 -17
- data/lib/solargraph/pin/singleton.rb +1 -1
- data/lib/solargraph/pin/symbol.rb +53 -47
- data/lib/solargraph/pin/until.rb +18 -0
- data/lib/solargraph/pin/while.rb +18 -0
- data/lib/solargraph/pin.rb +44 -41
- data/lib/solargraph/pin_cache.rb +245 -0
- data/lib/solargraph/position.rb +132 -107
- data/lib/solargraph/range.rb +112 -98
- data/lib/solargraph/rbs_map/conversions.rb +823 -646
- data/lib/solargraph/rbs_map/core_fills.rb +84 -50
- data/lib/solargraph/rbs_map/core_map.rb +58 -28
- data/lib/solargraph/rbs_map/stdlib_map.rb +43 -33
- data/lib/solargraph/rbs_map.rb +163 -93
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +363 -269
- data/lib/solargraph/source/chain/array.rb +37 -33
- data/lib/solargraph/source/chain/block_symbol.rb +1 -1
- data/lib/solargraph/source/chain/block_variable.rb +1 -1
- data/lib/solargraph/source/chain/call.rb +337 -303
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +26 -89
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +34 -33
- data/lib/solargraph/source/chain/head.rb +1 -1
- data/lib/solargraph/source/chain/if.rb +28 -28
- data/lib/solargraph/source/chain/instance_variable.rb +13 -13
- data/lib/solargraph/source/chain/link.rb +109 -98
- data/lib/solargraph/source/chain/literal.rb +48 -28
- 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 +291 -252
- data/lib/solargraph/source/change.rb +82 -82
- data/lib/solargraph/source/cursor.rb +166 -167
- data/lib/solargraph/source/encoding_fixes.rb +23 -23
- data/lib/solargraph/source/source_chainer.rb +194 -194
- data/lib/solargraph/source/updater.rb +55 -55
- data/lib/solargraph/source.rb +498 -495
- data/lib/solargraph/source_map/clip.rb +226 -232
- data/lib/solargraph/source_map/data.rb +34 -30
- data/lib/solargraph/source_map/mapper.rb +259 -255
- data/lib/solargraph/source_map.rb +212 -217
- data/lib/solargraph/type_checker/checks.rb +124 -120
- data/lib/solargraph/type_checker/param_def.rb +37 -35
- data/lib/solargraph/type_checker/problem.rb +32 -32
- data/lib/solargraph/type_checker/rules.rb +84 -62
- data/lib/solargraph/type_checker.rb +814 -672
- data/lib/solargraph/version.rb +5 -5
- data/lib/solargraph/views/_method.erb +10 -10
- data/lib/solargraph/views/_namespace.erb +3 -3
- data/lib/solargraph/views/document.erb +10 -10
- data/lib/solargraph/workspace/config.rb +255 -239
- data/lib/solargraph/workspace/require_paths.rb +97 -0
- data/lib/solargraph/workspace.rb +220 -239
- data/lib/solargraph/yard_map/helpers.rb +44 -16
- data/lib/solargraph/yard_map/mapper/to_constant.rb +7 -5
- data/lib/solargraph/yard_map/mapper/to_method.rb +130 -94
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -28
- data/lib/solargraph/yard_map/mapper.rb +79 -78
- data/lib/solargraph/yard_map/to_method.rb +89 -86
- data/lib/solargraph/yard_tags.rb +20 -20
- data/lib/solargraph/yardoc.rb +87 -52
- data/lib/solargraph.rb +105 -72
- data/rbs/fills/bundler/0/bundler.rbs +4271 -0
- data/rbs/fills/open3/0/open3.rbs +172 -0
- data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
- data/rbs/fills/rubygems/0/errors.rbs +364 -0
- data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
- data/rbs/fills/rubygems/0/specification.rbs +1753 -0
- data/rbs/fills/tuple/tuple.rbs +149 -0
- data/rbs/shims/ast/0/node.rbs +5 -0
- data/rbs/shims/ast/2.4/.rbs_meta.yaml +9 -0
- data/rbs/shims/ast/2.4/ast.rbs +73 -0
- data/rbs/shims/parser/3.2.0.1/builders/default.rbs +195 -0
- data/rbs/shims/parser/3.2.0.1/manifest.yaml +7 -0
- data/rbs/shims/parser/3.2.0.1/parser.rbs +201 -0
- data/rbs/shims/parser/3.2.0.1/polyfill.rbs +4 -0
- data/rbs/shims/thor/1.2.0.1/.rbs_meta.yaml +9 -0
- data/rbs/shims/thor/1.2.0.1/manifest.yaml +7 -0
- data/rbs/shims/thor/1.2.0.1/thor.rbs +17 -0
- data/rbs_collection.yaml +19 -0
- data/solargraph.gemspec +27 -5
- metadata +215 -18
- data/lib/.rubocop.yml +0 -22
- data/lib/solargraph/cache.rb +0 -77
- data/lib/solargraph/parser/node_methods.rb +0 -83
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
require 'yard-activesupport-concern'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
require 'rbs'
|
|
4
|
+
|
|
5
|
+
module Solargraph
|
|
6
|
+
module PinCache
|
|
7
|
+
class << self
|
|
8
|
+
include Logging
|
|
9
|
+
|
|
10
|
+
# The base directory where cached YARD documentation and serialized pins are serialized
|
|
11
|
+
#
|
|
12
|
+
# @return [String]
|
|
13
|
+
def base_dir
|
|
14
|
+
# The directory is not stored in a variable so it can be overridden
|
|
15
|
+
# in specs.
|
|
16
|
+
ENV['SOLARGRAPH_CACHE'] ||
|
|
17
|
+
(ENV['XDG_CACHE_HOME'] ? File.join(ENV['XDG_CACHE_HOME'], 'solargraph') : nil) ||
|
|
18
|
+
File.join(Dir.home, '.cache', 'solargraph')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# The working directory for the current Ruby, RBS, and Solargraph versions.
|
|
22
|
+
#
|
|
23
|
+
# @return [String]
|
|
24
|
+
def work_dir
|
|
25
|
+
# The directory is not stored in a variable so it can be overridden
|
|
26
|
+
# in specs.
|
|
27
|
+
File.join(base_dir, "ruby-#{RUBY_VERSION}", "rbs-#{RBS::VERSION}", "solargraph-#{Solargraph::VERSION}")
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @param gemspec [Gem::Specification]
|
|
31
|
+
# @return [String]
|
|
32
|
+
def yardoc_path gemspec
|
|
33
|
+
File.join(base_dir,
|
|
34
|
+
"yard-#{YARD::VERSION}",
|
|
35
|
+
"yard-activesupport-concern-#{YARD::ActiveSupport::Concern::VERSION}",
|
|
36
|
+
"#{gemspec.name}-#{gemspec.version}.yardoc")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @return [String]
|
|
40
|
+
def stdlib_path
|
|
41
|
+
File.join(work_dir, 'stdlib')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# @param require [String]
|
|
45
|
+
# @return [String]
|
|
46
|
+
def stdlib_require_path require
|
|
47
|
+
File.join(stdlib_path, "#{require}.ser")
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# @param require [String]
|
|
51
|
+
# @return [Array<Pin::Base>, nil]
|
|
52
|
+
def deserialize_stdlib_require require
|
|
53
|
+
load(stdlib_require_path(require))
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# @param require [String]
|
|
57
|
+
# @param pins [Array<Pin::Base>]
|
|
58
|
+
# @return [void]
|
|
59
|
+
def serialize_stdlib_require require, pins
|
|
60
|
+
save(stdlib_require_path(require), pins)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# @return [String]
|
|
64
|
+
def core_path
|
|
65
|
+
File.join(work_dir, 'core.ser')
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# @return [Array<Pin::Base>, nil]
|
|
69
|
+
def deserialize_core
|
|
70
|
+
load(core_path)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# @param pins [Array<Pin::Base>]
|
|
74
|
+
# @return [void]
|
|
75
|
+
def serialize_core pins
|
|
76
|
+
save(core_path, pins)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# @param gemspec [Gem::Specification]
|
|
80
|
+
# @return [String]
|
|
81
|
+
def yard_gem_path gemspec
|
|
82
|
+
File.join(work_dir, 'yard', "#{gemspec.name}-#{gemspec.version}.ser")
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# @param gemspec [Gem::Specification]
|
|
86
|
+
# @return [Array<Pin::Base>, nil]
|
|
87
|
+
def deserialize_yard_gem(gemspec)
|
|
88
|
+
load(yard_gem_path(gemspec))
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# @param gemspec [Gem::Specification]
|
|
92
|
+
# @param pins [Array<Pin::Base>]
|
|
93
|
+
# @return [void]
|
|
94
|
+
def serialize_yard_gem(gemspec, pins)
|
|
95
|
+
save(yard_gem_path(gemspec), pins)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# @param gemspec [Gem::Specification]
|
|
99
|
+
# @return [Boolean]
|
|
100
|
+
def has_yard?(gemspec)
|
|
101
|
+
exist?(yard_gem_path(gemspec))
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# @param gemspec [Gem::Specification]
|
|
105
|
+
# @param hash [String, nil]
|
|
106
|
+
# @return [String]
|
|
107
|
+
def rbs_collection_path(gemspec, hash)
|
|
108
|
+
File.join(work_dir, 'rbs', "#{gemspec.name}-#{gemspec.version}-#{hash || 0}.ser")
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# @param gemspec [Gem::Specification]
|
|
112
|
+
# @return [String]
|
|
113
|
+
def rbs_collection_path_prefix(gemspec)
|
|
114
|
+
File.join(work_dir, 'rbs', "#{gemspec.name}-#{gemspec.version}-")
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# @param gemspec [Gem::Specification]
|
|
118
|
+
# @param hash [String, nil]
|
|
119
|
+
# @return [Array<Pin::Base>, nil]
|
|
120
|
+
def deserialize_rbs_collection_gem(gemspec, hash)
|
|
121
|
+
load(rbs_collection_path(gemspec, hash))
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# @param gemspec [Gem::Specification]
|
|
125
|
+
# @param hash [String, nil]
|
|
126
|
+
# @param pins [Array<Pin::Base>]n
|
|
127
|
+
# @return [void]
|
|
128
|
+
def serialize_rbs_collection_gem(gemspec, hash, pins)
|
|
129
|
+
save(rbs_collection_path(gemspec, hash), pins)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# @param gemspec [Gem::Specification]
|
|
133
|
+
# @param hash [String, nil]
|
|
134
|
+
# @return [String]
|
|
135
|
+
def combined_path(gemspec, hash)
|
|
136
|
+
File.join(work_dir, 'combined', "#{gemspec.name}-#{gemspec.version}-#{hash || 0}.ser")
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# @param gemspec [Gem::Specification]
|
|
140
|
+
# @return [String]
|
|
141
|
+
def combined_path_prefix(gemspec)
|
|
142
|
+
File.join(work_dir, 'combined', "#{gemspec.name}-#{gemspec.version}-")
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# @param gemspec [Gem::Specification]
|
|
146
|
+
# @param hash [String, nil]
|
|
147
|
+
# @param pins [Array<Pin::Base>]
|
|
148
|
+
# @return [void]
|
|
149
|
+
def serialize_combined_gem(gemspec, hash, pins)
|
|
150
|
+
save(combined_path(gemspec, hash), pins)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# @param gemspec [Gem::Specification]
|
|
154
|
+
# @param hash [String, nil]
|
|
155
|
+
# @return [Array<Pin::Base>, nil]
|
|
156
|
+
def deserialize_combined_gem gemspec, hash
|
|
157
|
+
load(combined_path(gemspec, hash))
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# @param gemspec [Gem::Specification]
|
|
161
|
+
# @param hash [String, nil]
|
|
162
|
+
# @return [Boolean]
|
|
163
|
+
def has_rbs_collection?(gemspec, hash)
|
|
164
|
+
exist?(rbs_collection_path(gemspec, hash))
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# @return [void]
|
|
168
|
+
def uncache_core
|
|
169
|
+
uncache(core_path)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
# @return [void]
|
|
173
|
+
def uncache_stdlib
|
|
174
|
+
uncache(stdlib_path)
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# @param gemspec [Gem::Specification]
|
|
178
|
+
# @param out [IO, nil]
|
|
179
|
+
# @return [void]
|
|
180
|
+
def uncache_gem(gemspec, out: nil)
|
|
181
|
+
uncache(yardoc_path(gemspec), out: out)
|
|
182
|
+
uncache_by_prefix(rbs_collection_path_prefix(gemspec), out: out)
|
|
183
|
+
uncache(yard_gem_path(gemspec), out: out)
|
|
184
|
+
uncache_by_prefix(combined_path_prefix(gemspec), out: out)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
# @return [void]
|
|
188
|
+
def clear
|
|
189
|
+
FileUtils.rm_rf base_dir, secure: true
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
private
|
|
193
|
+
|
|
194
|
+
# @param file [String]
|
|
195
|
+
# @return [Array<Solargraph::Pin::Base>, nil]
|
|
196
|
+
def load file
|
|
197
|
+
return nil unless File.file?(file)
|
|
198
|
+
Marshal.load(File.read(file, mode: 'rb'))
|
|
199
|
+
rescue StandardError => e
|
|
200
|
+
Solargraph.logger.warn "Failed to load cached file #{file}: [#{e.class}] #{e.message}"
|
|
201
|
+
FileUtils.rm_f file
|
|
202
|
+
nil
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# @param path [String]
|
|
206
|
+
def exist? *path
|
|
207
|
+
File.file? File.join(*path)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# @param file [String]
|
|
211
|
+
# @param pins [Array<Pin::Base>]
|
|
212
|
+
# @return [void]
|
|
213
|
+
def save file, pins
|
|
214
|
+
base = File.dirname(file)
|
|
215
|
+
FileUtils.mkdir_p base unless File.directory?(base)
|
|
216
|
+
ser = Marshal.dump(pins)
|
|
217
|
+
File.write file, ser, mode: 'wb'
|
|
218
|
+
logger.debug { "Cache#save: Saved #{pins.length} pins to #{file}" }
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# @param path_segments [Array<String>]
|
|
222
|
+
# @return [void]
|
|
223
|
+
def uncache *path_segments, out: nil
|
|
224
|
+
path = File.join(*path_segments)
|
|
225
|
+
if File.exist?(path)
|
|
226
|
+
FileUtils.rm_rf path, secure: true
|
|
227
|
+
out.puts "Clearing pin cache in #{path}" unless out.nil?
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# @return [void]
|
|
232
|
+
# @param path_segments [Array<String>]
|
|
233
|
+
def uncache_by_prefix *path_segments, out: nil
|
|
234
|
+
path = File.join(*path_segments)
|
|
235
|
+
glob = "#{path}*"
|
|
236
|
+
out.puts "Clearing pin cache in #{glob}" unless out.nil?
|
|
237
|
+
Dir.glob(glob).each do |file|
|
|
238
|
+
next unless File.file?(file)
|
|
239
|
+
FileUtils.rm_rf file, secure: true
|
|
240
|
+
out.puts "Clearing pin cache in #{file}" unless out.nil?
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
end
|
data/lib/solargraph/position.rb
CHANGED
|
@@ -1,107 +1,132 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
# The zero-based line and column numbers of a position in a string.
|
|
5
|
-
#
|
|
6
|
-
class Position
|
|
7
|
-
include Equality
|
|
8
|
-
|
|
9
|
-
# @return [Integer]
|
|
10
|
-
attr_reader :line
|
|
11
|
-
|
|
12
|
-
# @return [Integer]
|
|
13
|
-
attr_reader :character
|
|
14
|
-
|
|
15
|
-
alias column character
|
|
16
|
-
|
|
17
|
-
# @param line [Integer]
|
|
18
|
-
# @param character [Integer]
|
|
19
|
-
def initialize line, character
|
|
20
|
-
@line = line
|
|
21
|
-
@character = character
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# @sg-ignore Fix "Not enough arguments to Module#protected"
|
|
25
|
-
protected def equality_fields
|
|
26
|
-
[line, character]
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
#
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
line
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# Get a numeric offset for the specified text and
|
|
55
|
-
#
|
|
56
|
-
#
|
|
57
|
-
# @param
|
|
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
|
-
Position.new(line, character)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
#
|
|
90
|
-
#
|
|
91
|
-
#
|
|
92
|
-
#
|
|
93
|
-
#
|
|
94
|
-
# @param
|
|
95
|
-
# @return [Position]
|
|
96
|
-
def self.
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
# The zero-based line and column numbers of a position in a string.
|
|
5
|
+
#
|
|
6
|
+
class Position
|
|
7
|
+
include Equality
|
|
8
|
+
|
|
9
|
+
# @return [Integer]
|
|
10
|
+
attr_reader :line
|
|
11
|
+
|
|
12
|
+
# @return [Integer]
|
|
13
|
+
attr_reader :character
|
|
14
|
+
|
|
15
|
+
alias column character
|
|
16
|
+
|
|
17
|
+
# @param line [Integer]
|
|
18
|
+
# @param character [Integer]
|
|
19
|
+
def initialize line, character
|
|
20
|
+
@line = line
|
|
21
|
+
@character = character
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# @sg-ignore Fix "Not enough arguments to Module#protected"
|
|
25
|
+
protected def equality_fields
|
|
26
|
+
[line, character]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @param other [Position]
|
|
30
|
+
def <=>(other)
|
|
31
|
+
return nil unless other.is_a?(Position)
|
|
32
|
+
if line == other.line
|
|
33
|
+
character <=> other.character
|
|
34
|
+
else
|
|
35
|
+
line <=> other.line
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Get a hash of the position. This representation is suitable for use in
|
|
40
|
+
# the language server protocol.
|
|
41
|
+
#
|
|
42
|
+
# @return [Hash]
|
|
43
|
+
def to_hash
|
|
44
|
+
{
|
|
45
|
+
line: line,
|
|
46
|
+
character: character
|
|
47
|
+
}
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def inspect
|
|
51
|
+
"#<#{self.class} #{line}, #{character}>"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Get a numeric offset for the specified text and position.
|
|
55
|
+
#
|
|
56
|
+
# @param text [String]
|
|
57
|
+
# @param position [Position]
|
|
58
|
+
# @return [Integer]
|
|
59
|
+
def self.to_offset text, position
|
|
60
|
+
return 0 if text.empty?
|
|
61
|
+
|
|
62
|
+
newline_index = -1
|
|
63
|
+
line = -1
|
|
64
|
+
last_line_index = 0
|
|
65
|
+
|
|
66
|
+
while (newline_index = text.index("\n", newline_index + 1)) && line <= position.line
|
|
67
|
+
line += 1
|
|
68
|
+
break if line == position.line
|
|
69
|
+
|
|
70
|
+
line_length = newline_index - last_line_index
|
|
71
|
+
last_line_index = newline_index
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
last_line_index += 1 if position.line > 0
|
|
75
|
+
last_line_index + position.character
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Get a numeric offset for the specified text and a position identified
|
|
79
|
+
# by its line and character.
|
|
80
|
+
#
|
|
81
|
+
# @param text [String]
|
|
82
|
+
# @param line [Integer]
|
|
83
|
+
# @param character [Integer]
|
|
84
|
+
# @return [Integer]
|
|
85
|
+
def self.line_char_to_offset text, line, character
|
|
86
|
+
to_offset(text, Position.new(line, character))
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Get a position for the specified text and offset.
|
|
90
|
+
#
|
|
91
|
+
# @raise [InvalidOffsetError] if the offset is outside the text range
|
|
92
|
+
#
|
|
93
|
+
# @param text [String]
|
|
94
|
+
# @param offset [Integer]
|
|
95
|
+
# @return [Position]
|
|
96
|
+
def self.from_offset text, offset
|
|
97
|
+
raise InvalidOffsetError if offset > text.length
|
|
98
|
+
|
|
99
|
+
cursor = 0
|
|
100
|
+
line = 0
|
|
101
|
+
character = offset
|
|
102
|
+
newline_index = -1
|
|
103
|
+
|
|
104
|
+
while (newline_index = text.index("\n", newline_index + 1)) && newline_index < offset
|
|
105
|
+
line += 1
|
|
106
|
+
character = offset - newline_index - 1
|
|
107
|
+
end
|
|
108
|
+
character = 0 if character.nil? and (cursor - offset).between?(0, 1)
|
|
109
|
+
raise InvalidOffsetError if character.nil?
|
|
110
|
+
Position.new(line, character)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# A helper method for generating positions from arrays of integers. The
|
|
114
|
+
# original parameter is returned if it is already a position.
|
|
115
|
+
#
|
|
116
|
+
# @raise [ArgumentError] if the object cannot be converted to a position.
|
|
117
|
+
#
|
|
118
|
+
# @param object [Position, Array(Integer, Integer)]
|
|
119
|
+
# @return [Position]
|
|
120
|
+
def self.normalize object
|
|
121
|
+
return object if object.is_a?(Position)
|
|
122
|
+
return Position.new(object[0], object[1]) if object.is_a?(Array)
|
|
123
|
+
raise ArgumentError, "Unable to convert #{object.class} to Position"
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def == other
|
|
127
|
+
return false unless other.is_a?(Position)
|
|
128
|
+
# @sg-ignore https://github.com/castwide/solargraph/pull/1114
|
|
129
|
+
line == other.line and character == other.character
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|