solargraph 0.50.0 → 0.58.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitattributes +2 -0
- data/.github/workflows/linting.yml +127 -0
- data/.github/workflows/plugins.yml +218 -0
- data/.github/workflows/rspec.yml +58 -12
- data/.github/workflows/typecheck.yml +39 -0
- 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 +3 -2
- data/CHANGELOG.md +306 -3
- data/README.md +29 -18
- data/Rakefile +125 -13
- data/SPONSORS.md +2 -9
- data/bin/solargraph +3 -0
- data/lib/solargraph/api_map/cache.rb +110 -70
- data/lib/solargraph/api_map/constants.rb +279 -0
- data/lib/solargraph/api_map/index.rb +193 -0
- data/lib/solargraph/api_map/source_to_yard.rb +97 -81
- data/lib/solargraph/api_map/store.rb +384 -268
- data/lib/solargraph/api_map.rb +945 -704
- data/lib/solargraph/bench.rb +21 -3
- data/lib/solargraph/complex_type/type_methods.rb +228 -134
- data/lib/solargraph/complex_type/unique_type.rb +482 -132
- data/lib/solargraph/complex_type.rb +444 -254
- 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/gemspec.rb +3 -2
- 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 +36 -7
- data/lib/solargraph/converters/dd.rb +5 -0
- data/lib/solargraph/converters/dl.rb +3 -0
- data/lib/solargraph/converters/dt.rb +3 -0
- data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
- data/lib/solargraph/diagnostics/rubocop.rb +118 -112
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -65
- data/lib/solargraph/diagnostics/type_check.rb +55 -54
- data/lib/solargraph/diagnostics.rb +2 -2
- data/lib/solargraph/doc_map.rb +439 -0
- data/lib/solargraph/environ.rb +9 -2
- data/lib/solargraph/equality.rb +34 -0
- data/lib/solargraph/gem_pins.rb +98 -0
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +130 -111
- data/lib/solargraph/language_server/host/message_worker.rb +112 -59
- data/lib/solargraph/language_server/host/sources.rb +99 -156
- data/lib/solargraph/language_server/host.rb +878 -869
- data/lib/solargraph/language_server/message/base.rb +20 -12
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +3 -1
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -100
- data/lib/solargraph/language_server/message/extended/document.rb +23 -20
- data/lib/solargraph/language_server/message/extended/document_gems.rb +3 -3
- data/lib/solargraph/language_server/message/initialize.rb +28 -1
- data/lib/solargraph/language_server/message/initialized.rb +1 -0
- data/lib/solargraph/language_server/message/text_document/completion.rb +56 -59
- data/lib/solargraph/language_server/message/text_document/definition.rb +40 -38
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -23
- data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -126
- data/lib/solargraph/language_server/message/text_document/hover.rb +58 -56
- 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 -0
- data/lib/solargraph/language_server/message/text_document.rb +1 -1
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +5 -0
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +2 -0
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
- data/lib/solargraph/language_server/message.rb +1 -0
- data/lib/solargraph/language_server/progress.rb +143 -0
- data/lib/solargraph/language_server/request.rb +4 -1
- data/lib/solargraph/language_server/transport/adapter.rb +16 -1
- data/lib/solargraph/language_server/transport/data_reader.rb +2 -0
- data/lib/solargraph/language_server.rb +1 -0
- data/lib/solargraph/library.rb +683 -551
- data/lib/solargraph/location.rb +82 -37
- data/lib/solargraph/logging.rb +37 -27
- data/lib/solargraph/page.rb +9 -0
- data/lib/solargraph/parser/comment_ripper.rb +69 -52
- data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -0
- data/lib/solargraph/parser/node_processor/base.rb +92 -77
- data/lib/solargraph/parser/node_processor.rb +62 -43
- data/lib/solargraph/parser/{legacy → parser_gem}/class_methods.rb +149 -135
- data/lib/solargraph/parser/{legacy → parser_gem}/flawed_builder.rb +4 -1
- data/lib/solargraph/parser/{legacy → parser_gem}/node_chainer.rb +166 -148
- data/lib/solargraph/parser/{legacy → parser_gem}/node_methods.rb +486 -325
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/alias_node.rb +3 -2
- 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 -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 +46 -42
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/casgn_node.rb +4 -3
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/cvasgn_node.rb +3 -2
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/def_node.rb +53 -63
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/defs_node.rb +4 -3
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/gvasgn_node.rb +3 -2
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -0
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/ivasgn_node.rb +40 -38
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/lvasgn_node.rb +29 -28
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -0
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/namespace_node.rb +10 -9
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -0
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/orasgn_node.rb +17 -16
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/resbody_node.rb +38 -36
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/sclass_node.rb +52 -42
- data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/send_node.rb +291 -257
- data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/sym_node.rb +4 -2
- 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 -0
- data/lib/solargraph/parser/parser_gem.rb +12 -0
- data/lib/solargraph/parser/region.rb +69 -66
- data/lib/solargraph/parser/snippet.rb +17 -13
- data/lib/solargraph/parser.rb +9 -12
- data/lib/solargraph/pin/base.rb +729 -299
- data/lib/solargraph/pin/base_variable.rb +126 -84
- data/lib/solargraph/pin/block.rb +104 -73
- data/lib/solargraph/pin/breakable.rb +9 -0
- data/lib/solargraph/pin/callable.rb +231 -0
- data/lib/solargraph/pin/closure.rb +72 -37
- data/lib/solargraph/pin/common.rb +79 -70
- data/lib/solargraph/pin/constant.rb +2 -0
- data/lib/solargraph/pin/conversions.rb +123 -92
- data/lib/solargraph/pin/delegated_method.rb +120 -0
- data/lib/solargraph/pin/documenting.rb +114 -105
- data/lib/solargraph/pin/instance_variable.rb +34 -30
- data/lib/solargraph/pin/keyword.rb +20 -15
- data/lib/solargraph/pin/local_variable.rb +75 -55
- data/lib/solargraph/pin/method.rb +672 -335
- data/lib/solargraph/pin/method_alias.rb +34 -31
- data/lib/solargraph/pin/namespace.rb +115 -94
- data/lib/solargraph/pin/parameter.rb +275 -206
- 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 -14
- data/lib/solargraph/pin/search.rb +61 -56
- data/lib/solargraph/pin/signature.rb +61 -23
- 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 -38
- data/lib/solargraph/pin_cache.rb +245 -0
- data/lib/solargraph/position.rb +132 -100
- data/lib/solargraph/range.rb +112 -95
- data/lib/solargraph/rbs_map/conversions.rb +823 -394
- data/lib/solargraph/rbs_map/core_fills.rb +53 -30
- data/lib/solargraph/rbs_map/core_map.rb +58 -38
- data/lib/solargraph/rbs_map/stdlib_map.rb +43 -36
- data/lib/solargraph/rbs_map.rb +163 -73
- data/lib/solargraph/shell.rb +352 -244
- data/lib/solargraph/source/chain/array.rb +37 -0
- data/lib/solargraph/source/chain/block_symbol.rb +13 -0
- data/lib/solargraph/source/chain/block_variable.rb +1 -1
- data/lib/solargraph/source/chain/call.rb +337 -215
- data/lib/solargraph/source/chain/constant.rb +26 -75
- data/lib/solargraph/source/chain/hash.rb +34 -28
- data/lib/solargraph/source/chain/head.rb +1 -1
- 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 +44 -6
- data/lib/solargraph/source/chain/literal.rb +48 -23
- data/lib/solargraph/source/chain/or.rb +23 -23
- data/lib/solargraph/source/chain/z_super.rb +4 -4
- data/lib/solargraph/source/chain.rb +291 -179
- data/lib/solargraph/source/change.rb +82 -79
- data/lib/solargraph/source/cursor.rb +166 -164
- data/lib/solargraph/source/encoding_fixes.rb +23 -23
- data/lib/solargraph/source/source_chainer.rb +194 -191
- data/lib/solargraph/source/updater.rb +55 -54
- data/lib/solargraph/source.rb +498 -522
- data/lib/solargraph/source_map/clip.rb +226 -229
- data/lib/solargraph/source_map/data.rb +34 -0
- data/lib/solargraph/source_map/mapper.rb +259 -243
- data/lib/solargraph/source_map.rb +212 -180
- data/lib/solargraph/type_checker/checks.rb +124 -112
- 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 -57
- data/lib/solargraph/type_checker.rb +814 -549
- 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/views/environment.erb +3 -5
- data/lib/solargraph/workspace/config.rb +255 -231
- data/lib/solargraph/workspace/require_paths.rb +97 -0
- data/lib/solargraph/workspace.rb +220 -212
- data/lib/solargraph/yard_map/cache.rb +6 -0
- data/lib/solargraph/yard_map/helpers.rb +44 -16
- data/lib/solargraph/yard_map/mapper/to_constant.rb +8 -5
- data/lib/solargraph/yard_map/mapper/to_method.rb +130 -81
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -27
- data/lib/solargraph/yard_map/mapper.rb +79 -77
- data/lib/solargraph/yard_map/to_method.rb +89 -79
- data/lib/solargraph/yard_map.rb +1 -284
- data/lib/solargraph/yard_tags.rb +20 -0
- data/lib/solargraph/yardoc.rb +87 -0
- data/lib/solargraph.rb +105 -69
- 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 +39 -11
- metadata +354 -97
- data/lib/.rubocop.yml +0 -22
- data/lib/solargraph/api_map/bundler_methods.rb +0 -22
- data/lib/solargraph/cache.rb +0 -53
- 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_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/sym_node.rb +0 -18
- data/lib/solargraph/parser/legacy/node_processors.rb +0 -54
- data/lib/solargraph/parser/legacy.rb +0 -12
- data/lib/solargraph/parser/node_methods.rb +0 -43
- data/lib/solargraph/parser/rubyvm/class_methods.rb +0 -149
- 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 -33
- data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +0 -23
- data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +0 -75
- data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +0 -68
- 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 -32
- data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +0 -15
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +0 -279
- data/lib/solargraph/parser/rubyvm/node_processors.rb +0 -63
- data/lib/solargraph/parser/rubyvm/node_wrapper.rb +0 -47
- data/lib/solargraph/parser/rubyvm.rb +0 -40
- data/lib/solargraph/rbs_map/core_signs.rb +0 -33
- data/lib/yard-solargraph.rb +0 -33
data/lib/.rubocop.yml
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
AllCops:
|
|
2
|
-
NewCops: enable
|
|
3
|
-
Style/MethodDefParentheses:
|
|
4
|
-
Enabled: false
|
|
5
|
-
Layout/EmptyLineAfterGuardClause:
|
|
6
|
-
Enabled: false
|
|
7
|
-
Layout/SpaceAroundMethodCallOperator:
|
|
8
|
-
Enabled: true
|
|
9
|
-
Lint/RaiseException:
|
|
10
|
-
Enabled: true
|
|
11
|
-
Lint/StructNewOverride:
|
|
12
|
-
Enabled: true
|
|
13
|
-
Metrics/MethodLength:
|
|
14
|
-
Max: 25
|
|
15
|
-
Style/ExponentialNotation:
|
|
16
|
-
Enabled: true
|
|
17
|
-
Style/HashEachMethods:
|
|
18
|
-
Enabled: true
|
|
19
|
-
Style/HashTransformKeys:
|
|
20
|
-
Enabled: true
|
|
21
|
-
Style/HashTransformValues:
|
|
22
|
-
Enabled: true
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
require 'bundler'
|
|
2
|
-
require 'shellwords'
|
|
3
|
-
|
|
4
|
-
module Solargraph
|
|
5
|
-
class ApiMap
|
|
6
|
-
module BundlerMethods
|
|
7
|
-
module_function
|
|
8
|
-
|
|
9
|
-
# @param directory [String]
|
|
10
|
-
# @return [Hash]
|
|
11
|
-
def require_from_bundle directory
|
|
12
|
-
begin
|
|
13
|
-
Solargraph.logger.info "Loading gems for bundler/require"
|
|
14
|
-
Documentor.specs_from_bundle(directory)
|
|
15
|
-
rescue BundleNotFoundError => e
|
|
16
|
-
Solargraph.logger.warn e.message
|
|
17
|
-
{}
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
data/lib/solargraph/cache.rb
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
require 'fileutils'
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Cache
|
|
5
|
-
class << self
|
|
6
|
-
# The base directory where cached documentation is installed.
|
|
7
|
-
#
|
|
8
|
-
# @return [String]
|
|
9
|
-
def base_dir
|
|
10
|
-
# The directory is not stored in a variable so it can be overridden
|
|
11
|
-
# in specs.
|
|
12
|
-
ENV['SOLARGRAPH_CACHE'] ||
|
|
13
|
-
ENV['XDG_CACHE_HOME'] ? File.join(ENV['XDG_CACHE_HOME'], 'solargraph') :
|
|
14
|
-
File.join(Dir.home, '.cache', 'solargraph')
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
# The working directory for the current Ruby and Solargraph versions.
|
|
18
|
-
#
|
|
19
|
-
# @return [String]
|
|
20
|
-
def work_dir
|
|
21
|
-
# The directory is not stored in a variable so it can be overridden
|
|
22
|
-
# in specs.
|
|
23
|
-
File.join(base_dir, "ruby-#{RUBY_VERSION}", "rbs-#{RBS::VERSION}", "solargraph-#{Solargraph::VERSION}")
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# @return [Array<Solargraph::Pin::Base>, nil]
|
|
27
|
-
def load *path
|
|
28
|
-
file = File.join(work_dir, *path)
|
|
29
|
-
return nil unless File.file?(file)
|
|
30
|
-
Marshal.load(File.read(file, mode: 'rb'))
|
|
31
|
-
rescue StandardError => e
|
|
32
|
-
Solargraph.logger.warn "Failed to load cached file #{file}: [#{e.class}] #{e.message}"
|
|
33
|
-
FileUtils.rm_f file
|
|
34
|
-
nil
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# @return [Boolean]
|
|
38
|
-
def save *path, pins
|
|
39
|
-
return false if pins.empty?
|
|
40
|
-
file = File.join(work_dir, *path)
|
|
41
|
-
base = File.dirname(file)
|
|
42
|
-
FileUtils.mkdir_p base unless File.directory?(base)
|
|
43
|
-
ser = Marshal.dump(pins)
|
|
44
|
-
File.write file, ser, mode: 'wb'
|
|
45
|
-
true
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def clear
|
|
49
|
-
FileUtils.rm_rf base_dir, secure: true
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Convention
|
|
5
|
-
class Rspec < Base
|
|
6
|
-
def local source_map
|
|
7
|
-
return EMPTY_ENVIRON unless File.basename(source_map.filename) =~ /_spec\.rb$/
|
|
8
|
-
@environ ||= Environ.new(
|
|
9
|
-
requires: ['rspec'],
|
|
10
|
-
domains: ['RSpec::Matchers', 'RSpec::ExpectationGroups'],
|
|
11
|
-
pins: [
|
|
12
|
-
# This override is necessary due to an erroneous @return tag in
|
|
13
|
-
# rspec's YARD documentation.
|
|
14
|
-
# @todo The return types have been fixed (https://github.com/rspec/rspec-expectations/pull/1121)
|
|
15
|
-
Solargraph::Pin::Reference::Override.method_return('RSpec::Matchers#expect', 'RSpec::Expectations::ExpectationTarget')
|
|
16
|
-
].concat(extras)
|
|
17
|
-
)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
private
|
|
21
|
-
|
|
22
|
-
def extras
|
|
23
|
-
@@extras ||= SourceMap.load_string(%(
|
|
24
|
-
def describe(*args); end
|
|
25
|
-
def it(*args); end
|
|
26
|
-
)).pins
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'bundler'
|
|
4
|
-
require 'json'
|
|
5
|
-
require 'open3'
|
|
6
|
-
require 'shellwords'
|
|
7
|
-
require 'yard'
|
|
8
|
-
require 'fileutils'
|
|
9
|
-
|
|
10
|
-
module Solargraph
|
|
11
|
-
class Documentor
|
|
12
|
-
RDOC_GEMS = %w[
|
|
13
|
-
actioncable actionmailbox actionmailer actionpack actiontext actionview
|
|
14
|
-
activejob activemodel activerecord activestorage activesupport railties
|
|
15
|
-
]
|
|
16
|
-
|
|
17
|
-
def initialize directory, rebuild: false, out: File.new(File::NULL, 'w')
|
|
18
|
-
@directory = directory
|
|
19
|
-
@rebuild = rebuild
|
|
20
|
-
@out = out
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# @return [Boolean] True if all specs were found and documented.
|
|
24
|
-
def document
|
|
25
|
-
failures = 0
|
|
26
|
-
Documentor.specs_from_bundle(@directory).each_pair do |name, version|
|
|
27
|
-
yd = YARD::Registry.yardoc_file_for_gem(name, "= #{version}")
|
|
28
|
-
if !yd || @rebuild
|
|
29
|
-
FileUtils.safe_unlink File.join(YardMap::CoreDocs.cache_dir, 'gems', "#{name}-#{version}.ser")
|
|
30
|
-
@out.puts "Documenting #{name} #{version}"
|
|
31
|
-
`yard gems #{name} #{version} #{@rebuild ? '--rebuild' : ''}`
|
|
32
|
-
yd = YARD::Registry.yardoc_file_for_gem(name, "= #{version}")
|
|
33
|
-
# HACK: Ignore errors documenting bundler
|
|
34
|
-
if !yd && name != 'bundler'
|
|
35
|
-
@out.puts "#{name} #{version} YARD documentation failed"
|
|
36
|
-
failures += 1
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
if yd && RDOC_GEMS.include?(name)
|
|
40
|
-
cache = File.join(Solargraph::YardMap::CoreDocs.cache_dir, 'gems', "#{name}-#{version}", 'yardoc')
|
|
41
|
-
if !File.exist?(cache) || @rebuild
|
|
42
|
-
@out.puts "Caching custom documentation for #{name} #{version}"
|
|
43
|
-
spec = Gem::Specification.find_by_name(name, "= #{version}")
|
|
44
|
-
Solargraph::YardMap::RdocToYard.run(spec)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
if failures > 0
|
|
49
|
-
@out.puts "#{failures} gem#{failures == 1 ? '' : 's'} could not be documented. You might need to run `bundle install`."
|
|
50
|
-
end
|
|
51
|
-
failures == 0
|
|
52
|
-
rescue Solargraph::BundleNotFoundError => e
|
|
53
|
-
@out.puts "[#{e.class}] #{e.message}"
|
|
54
|
-
@out.puts "No bundled gems are available in #{@directory}"
|
|
55
|
-
false
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# @param directory [String]
|
|
59
|
-
# @return [Hash]
|
|
60
|
-
def self.specs_from_bundle directory
|
|
61
|
-
Solargraph.with_clean_env do
|
|
62
|
-
cmd = [
|
|
63
|
-
'ruby', '-e',
|
|
64
|
-
"require 'bundler'; require 'json'; Dir.chdir('#{directory}') { puts Bundler.definition.specs_for([:default]).map { |spec| [spec.name, spec.version] }.to_h.to_json }"
|
|
65
|
-
]
|
|
66
|
-
o, e, s = Open3.capture3(*cmd)
|
|
67
|
-
if s.success?
|
|
68
|
-
o && !o.empty? ? JSON.parse(o.split("\n").last) : {}
|
|
69
|
-
else
|
|
70
|
-
Solargraph.logger.warn e
|
|
71
|
-
raise BundleNotFoundError, "Failed to load gems from bundle at #{directory}"
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module LanguageServer
|
|
5
|
-
class Host
|
|
6
|
-
# An asynchronous library cataloging handler.
|
|
7
|
-
#
|
|
8
|
-
class Cataloger
|
|
9
|
-
def initialize host
|
|
10
|
-
@host = host
|
|
11
|
-
@stopped = true
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# Stop the catalog thread.
|
|
15
|
-
#
|
|
16
|
-
# @return [void]
|
|
17
|
-
def stop
|
|
18
|
-
@stopped = true
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# True if the cataloger is stopped.
|
|
22
|
-
#
|
|
23
|
-
# @return [Boolean]
|
|
24
|
-
def stopped?
|
|
25
|
-
@stopped
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# Start the catalog thread.
|
|
29
|
-
#
|
|
30
|
-
# @return [void]
|
|
31
|
-
def start
|
|
32
|
-
return unless stopped?
|
|
33
|
-
@stopped = false
|
|
34
|
-
Thread.new do
|
|
35
|
-
until stopped?
|
|
36
|
-
tick
|
|
37
|
-
sleep 0.1
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# Perform cataloging.
|
|
43
|
-
#
|
|
44
|
-
# @return [void]
|
|
45
|
-
def tick
|
|
46
|
-
host.catalog
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
private
|
|
50
|
-
|
|
51
|
-
# @return [Host]
|
|
52
|
-
attr_reader :host
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Parser
|
|
5
|
-
module Legacy
|
|
6
|
-
module NodeProcessors
|
|
7
|
-
class AliasNode < Parser::NodeProcessor::Base
|
|
8
|
-
def process
|
|
9
|
-
loc = get_node_location(node)
|
|
10
|
-
pins.push Solargraph::Pin::MethodAlias.new(
|
|
11
|
-
location: loc,
|
|
12
|
-
closure: region.closure,
|
|
13
|
-
name: node.children[0].children[0].to_s,
|
|
14
|
-
original: node.children[1].children[0].to_s,
|
|
15
|
-
scope: region.scope || :instance
|
|
16
|
-
)
|
|
17
|
-
process_children
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Parser
|
|
5
|
-
module Legacy
|
|
6
|
-
module NodeProcessors
|
|
7
|
-
class ArgsNode < Parser::NodeProcessor::Base
|
|
8
|
-
def process
|
|
9
|
-
node.children.each do |u|
|
|
10
|
-
loc = get_node_location(u)
|
|
11
|
-
locals.push Solargraph::Pin::Parameter.new(
|
|
12
|
-
location: loc,
|
|
13
|
-
closure: region.closure,
|
|
14
|
-
comments: comments_for(node),
|
|
15
|
-
name: u.children[0].to_s,
|
|
16
|
-
assignment: u.children[1],
|
|
17
|
-
asgn_code: u.children[1] ? region.code_for(u.children[1]) : nil,
|
|
18
|
-
presence: region.closure.location.range,
|
|
19
|
-
decl: get_decl(u)
|
|
20
|
-
)
|
|
21
|
-
region.closure.parameters.push locals.last
|
|
22
|
-
end
|
|
23
|
-
process_children
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
private
|
|
27
|
-
|
|
28
|
-
def get_decl node
|
|
29
|
-
node.type
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Parser
|
|
5
|
-
module Legacy
|
|
6
|
-
module NodeProcessors
|
|
7
|
-
class SymNode < Parser::NodeProcessor::Base
|
|
8
|
-
def process
|
|
9
|
-
pins.push Solargraph::Pin::Symbol.new(
|
|
10
|
-
get_node_location(node),
|
|
11
|
-
":#{node.children[0]}"
|
|
12
|
-
)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'solargraph/parser/node_processor'
|
|
4
|
-
|
|
5
|
-
module Solargraph
|
|
6
|
-
module Parser
|
|
7
|
-
module Legacy
|
|
8
|
-
module NodeProcessors
|
|
9
|
-
autoload :BeginNode, 'solargraph/parser/legacy/node_processors/begin_node'
|
|
10
|
-
autoload :DefNode, 'solargraph/parser/legacy/node_processors/def_node'
|
|
11
|
-
autoload :DefsNode, 'solargraph/parser/legacy/node_processors/defs_node'
|
|
12
|
-
autoload :SendNode, 'solargraph/parser/legacy/node_processors/send_node'
|
|
13
|
-
autoload :NamespaceNode, 'solargraph/parser/legacy/node_processors/namespace_node'
|
|
14
|
-
autoload :SclassNode, 'solargraph/parser/legacy/node_processors/sclass_node'
|
|
15
|
-
autoload :ModuleNode, 'solargraph/parser/legacy/node_processors/module_node'
|
|
16
|
-
autoload :IvasgnNode, 'solargraph/parser/legacy/node_processors/ivasgn_node'
|
|
17
|
-
autoload :CvasgnNode, 'solargraph/parser/legacy/node_processors/cvasgn_node'
|
|
18
|
-
autoload :LvasgnNode, 'solargraph/parser/legacy/node_processors/lvasgn_node'
|
|
19
|
-
autoload :GvasgnNode, 'solargraph/parser/legacy/node_processors/gvasgn_node'
|
|
20
|
-
autoload :CasgnNode, 'solargraph/parser/legacy/node_processors/casgn_node'
|
|
21
|
-
autoload :AliasNode, 'solargraph/parser/legacy/node_processors/alias_node'
|
|
22
|
-
autoload :ArgsNode, 'solargraph/parser/legacy/node_processors/args_node'
|
|
23
|
-
autoload :BlockNode, 'solargraph/parser/legacy/node_processors/block_node'
|
|
24
|
-
autoload :OrasgnNode, 'solargraph/parser/legacy/node_processors/orasgn_node'
|
|
25
|
-
autoload :SymNode, 'solargraph/parser/legacy/node_processors/sym_node'
|
|
26
|
-
autoload :ResbodyNode, 'solargraph/parser/legacy/node_processors/resbody_node'
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
module NodeProcessor
|
|
31
|
-
register :source, Legacy::NodeProcessors::BeginNode
|
|
32
|
-
register :begin, Legacy::NodeProcessors::BeginNode
|
|
33
|
-
register :kwbegin, Legacy::NodeProcessors::BeginNode
|
|
34
|
-
register :rescue, Legacy::NodeProcessors::BeginNode
|
|
35
|
-
register :resbody, Legacy::NodeProcessors::ResbodyNode
|
|
36
|
-
register :def, Legacy::NodeProcessors::DefNode
|
|
37
|
-
register :defs, Legacy::NodeProcessors::DefsNode
|
|
38
|
-
register :send, Legacy::NodeProcessors::SendNode
|
|
39
|
-
register :class, Legacy::NodeProcessors::NamespaceNode
|
|
40
|
-
register :module, Legacy::NodeProcessors::NamespaceNode
|
|
41
|
-
register :sclass, Legacy::NodeProcessors::SclassNode
|
|
42
|
-
register :ivasgn, Legacy::NodeProcessors::IvasgnNode
|
|
43
|
-
register :cvasgn, Legacy::NodeProcessors::CvasgnNode
|
|
44
|
-
register :lvasgn, Legacy::NodeProcessors::LvasgnNode
|
|
45
|
-
register :gvasgn, Legacy::NodeProcessors::GvasgnNode
|
|
46
|
-
register :casgn, Legacy::NodeProcessors::CasgnNode
|
|
47
|
-
register :alias, Legacy::NodeProcessors::AliasNode
|
|
48
|
-
register :args, Legacy::NodeProcessors::ArgsNode
|
|
49
|
-
register :block, Legacy::NodeProcessors::BlockNode
|
|
50
|
-
register :or_asgn, Legacy::NodeProcessors::OrasgnNode
|
|
51
|
-
register :sym, Legacy::NodeProcessors::SymNode
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
module Parser
|
|
3
|
-
module Legacy
|
|
4
|
-
autoload :FlawedBuilder, 'solargraph/parser/legacy/flawed_builder'
|
|
5
|
-
autoload :ClassMethods, 'solargraph/parser/legacy/class_methods'
|
|
6
|
-
autoload :NodeMethods, 'solargraph/parser/legacy/node_methods'
|
|
7
|
-
autoload :NodeChainer, 'solargraph/parser/legacy/node_chainer'
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
require 'solargraph/parser/legacy/node_processors'
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
module Solargraph
|
|
2
|
-
module Parser
|
|
3
|
-
class NodeMethods
|
|
4
|
-
module_function
|
|
5
|
-
|
|
6
|
-
def unpack_name node
|
|
7
|
-
raise NotImplementedError
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def infer_literal_type node
|
|
11
|
-
raise NotImplementedError
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def calls_from node
|
|
15
|
-
raise NotImplementedError
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def returns_from node
|
|
19
|
-
raise NotImplementedError
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def process node
|
|
23
|
-
raise NotImplementedError
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def references node
|
|
27
|
-
raise NotImplementedError
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def chain node, filename = nil, in_block = false
|
|
31
|
-
raise NotImplementedError
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def node? node
|
|
35
|
-
raise NotImplementedError
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def convert_hash node
|
|
39
|
-
raise NotImplementedError
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
require 'solargraph/parser/rubyvm/node_processors'
|
|
2
|
-
require 'solargraph/parser/rubyvm/node_wrapper'
|
|
3
|
-
|
|
4
|
-
module Solargraph
|
|
5
|
-
module Parser
|
|
6
|
-
module Rubyvm
|
|
7
|
-
module ClassMethods
|
|
8
|
-
# @param code [String]
|
|
9
|
-
# @param filename [String]
|
|
10
|
-
# @return [Array(Parser::AST::Node, Array<Parser::Source::Comment>)]
|
|
11
|
-
# @sg-ignore
|
|
12
|
-
def parse_with_comments code, filename = nil
|
|
13
|
-
node = RubyVM::AbstractSyntaxTree.parse(code).children[2]
|
|
14
|
-
node &&= RubyVM::AbstractSyntaxTree::NodeWrapper.from(node, code.lines)
|
|
15
|
-
comments = CommentRipper.new(code).parse
|
|
16
|
-
[node, comments]
|
|
17
|
-
rescue ::SyntaxError => e
|
|
18
|
-
raise Parser::SyntaxError, e.message
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# @param code [String]
|
|
22
|
-
# @param filename [String, nil]
|
|
23
|
-
# @param line [Integer]
|
|
24
|
-
# @return [Parser::AST::Node]
|
|
25
|
-
# @sg-ignore
|
|
26
|
-
def parse code, filename = nil, line = 0
|
|
27
|
-
node = RubyVM::AbstractSyntaxTree.parse(code).children[2]
|
|
28
|
-
node and RubyVM::AbstractSyntaxTree::NodeWrapper.from(node, code.lines)
|
|
29
|
-
rescue ::SyntaxError => e
|
|
30
|
-
raise Parser::SyntaxError, e.message
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def map source
|
|
34
|
-
NodeProcessor.process(source.node, Region.new(source: source))
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def references source, name
|
|
38
|
-
if name.end_with?("=")
|
|
39
|
-
reg = /#{Regexp.escape name[0..-2]}\s*=/
|
|
40
|
-
extract_offset = ->(code, offset) { reg.match(code, offset).offset(0) }
|
|
41
|
-
else
|
|
42
|
-
extract_offset = ->(code, offset) { [soff = code.index(name, offset), soff + name.length] }
|
|
43
|
-
end
|
|
44
|
-
inner_node_references(name, source.node).map do |n|
|
|
45
|
-
rng = Range.from_node(n)
|
|
46
|
-
offset = Position.to_offset(source.code, rng.start)
|
|
47
|
-
soff, eoff = extract_offset[source.code, offset]
|
|
48
|
-
Location.new(
|
|
49
|
-
source.filename,
|
|
50
|
-
Range.new(
|
|
51
|
-
Position.from_offset(source.code, soff),
|
|
52
|
-
Position.from_offset(source.code, eoff)
|
|
53
|
-
)
|
|
54
|
-
)
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# @param name [String]
|
|
59
|
-
# @param top [AST::Node]
|
|
60
|
-
# @return [Array<AST::Node>]
|
|
61
|
-
def inner_node_references name, top
|
|
62
|
-
result = []
|
|
63
|
-
if Parser.rubyvm?
|
|
64
|
-
if Parser.is_ast_node?(top)
|
|
65
|
-
result.push top if match_rubyvm_node_to_ref(top, name)
|
|
66
|
-
top.children.each { |c| result.concat inner_node_references(name, c) }
|
|
67
|
-
end
|
|
68
|
-
else
|
|
69
|
-
if Parser.is_ast_node?(top) && top.to_s.include?(":#{name}")
|
|
70
|
-
result.push top if top.children.any? { |c| c.to_s == name }
|
|
71
|
-
top.children.each { |c| result.concat inner_node_references(name, c) }
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
result
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def match_rubyvm_node_to_ref(top, name)
|
|
78
|
-
top.children.select { |c| c.is_a?(Symbol) }.any? { |c| c.to_s == name } ||
|
|
79
|
-
top.children.select { |c| c.is_a?(Array) }.any? { |c| c.include?(name.to_sym) }
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
def chain *args
|
|
83
|
-
NodeChainer.chain *args
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def chain_string *args
|
|
87
|
-
NodeChainer.load_string *args
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def process_node *args
|
|
91
|
-
Solargraph::Parser::NodeProcessor.process *args
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def infer_literal_node_type node
|
|
95
|
-
NodeMethods.infer_literal_node_type node
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def version
|
|
99
|
-
Ruby::VERSION
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def is_ast_node? node
|
|
103
|
-
if Parser.rubyvm?
|
|
104
|
-
node.is_a?(RubyVM::AbstractSyntaxTree::Node)
|
|
105
|
-
else
|
|
106
|
-
node.is_a?(::Parser::AST::Node)
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def node_range node
|
|
111
|
-
st = Position.new(node.first_lineno - 1, node.first_column)
|
|
112
|
-
en = Position.new(node.last_lineno - 1, node.last_column)
|
|
113
|
-
Range.new(st, en)
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def recipient_node tree
|
|
117
|
-
tree.each_with_index do |node, idx|
|
|
118
|
-
return tree[idx + 1] if [:ARRAY, :ZARRAY, :LIST].include?(node.type) && tree[idx + 1] && [:FCALL, :VCALL, :CALL].include?(tree[idx + 1].type)
|
|
119
|
-
end
|
|
120
|
-
nil
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
def string_ranges node
|
|
124
|
-
return [] unless is_ast_node?(node)
|
|
125
|
-
result = []
|
|
126
|
-
if node.type == :STR
|
|
127
|
-
result.push Range.from_node(node)
|
|
128
|
-
elsif node.type == :DSTR
|
|
129
|
-
here = Range.from_node(node)
|
|
130
|
-
there = Range.from_node(node.children[1])
|
|
131
|
-
result.push Range.new(here.start, there&.start || here.ending)
|
|
132
|
-
end
|
|
133
|
-
node.children.each do |child|
|
|
134
|
-
result.concat string_ranges(child)
|
|
135
|
-
end
|
|
136
|
-
if node.type == :DSTR && node.children.last.nil?
|
|
137
|
-
last = node.children[-2]
|
|
138
|
-
unless last.nil?
|
|
139
|
-
rng = Range.from_node(last)
|
|
140
|
-
pos = Position.new(rng.ending.line, rng.ending.column - 1)
|
|
141
|
-
result.push Range.new(pos, pos)
|
|
142
|
-
end
|
|
143
|
-
end
|
|
144
|
-
result
|
|
145
|
-
end
|
|
146
|
-
end
|
|
147
|
-
end
|
|
148
|
-
end
|
|
149
|
-
end
|