jimeh-solargraph 0.40.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/ci.yml +54 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +24 -0
- data/.yardopts +2 -0
- data/CHANGELOG.md +1003 -0
- data/Gemfile +7 -0
- data/LICENSE +21 -0
- data/README.md +123 -0
- data/Rakefile +25 -0
- data/SPONSORS.md +15 -0
- data/bin/solargraph +5 -0
- data/jimeh-solargraph.gemspec +44 -0
- data/lib/.rubocop.yml +21 -0
- data/lib/solargraph.rb +67 -0
- data/lib/solargraph/api_map.rb +752 -0
- data/lib/solargraph/api_map/bundler_methods.rb +27 -0
- data/lib/solargraph/api_map/cache.rb +70 -0
- data/lib/solargraph/api_map/source_to_yard.rb +81 -0
- data/lib/solargraph/api_map/store.rb +256 -0
- data/lib/solargraph/bench.rb +30 -0
- data/lib/solargraph/compat.rb +23 -0
- data/lib/solargraph/complex_type.rb +213 -0
- data/lib/solargraph/complex_type/type_methods.rb +127 -0
- data/lib/solargraph/complex_type/unique_type.rb +75 -0
- data/lib/solargraph/convention.rb +47 -0
- data/lib/solargraph/convention/base.rb +33 -0
- data/lib/solargraph/convention/gemfile.rb +15 -0
- data/lib/solargraph/convention/gemspec.rb +22 -0
- data/lib/solargraph/convention/rspec.rb +21 -0
- data/lib/solargraph/converters/dd.rb +12 -0
- data/lib/solargraph/converters/dl.rb +12 -0
- data/lib/solargraph/converters/dt.rb +12 -0
- data/lib/solargraph/converters/misc.rb +1 -0
- data/lib/solargraph/diagnostics.rb +55 -0
- data/lib/solargraph/diagnostics/base.rb +29 -0
- data/lib/solargraph/diagnostics/require_not_found.rb +37 -0
- data/lib/solargraph/diagnostics/rubocop.rb +90 -0
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +45 -0
- data/lib/solargraph/diagnostics/severities.rb +15 -0
- data/lib/solargraph/diagnostics/type_check.rb +54 -0
- data/lib/solargraph/diagnostics/update_errors.rb +41 -0
- data/lib/solargraph/documentor.rb +78 -0
- data/lib/solargraph/environ.rb +45 -0
- data/lib/solargraph/language_server.rb +19 -0
- data/lib/solargraph/language_server/completion_item_kinds.rb +35 -0
- data/lib/solargraph/language_server/error_codes.rb +20 -0
- data/lib/solargraph/language_server/host.rb +746 -0
- data/lib/solargraph/language_server/host/cataloger.rb +56 -0
- data/lib/solargraph/language_server/host/diagnoser.rb +81 -0
- data/lib/solargraph/language_server/host/dispatch.rb +112 -0
- data/lib/solargraph/language_server/host/sources.rb +156 -0
- data/lib/solargraph/language_server/message.rb +92 -0
- data/lib/solargraph/language_server/message/base.rb +85 -0
- data/lib/solargraph/language_server/message/cancel_request.rb +13 -0
- data/lib/solargraph/language_server/message/client.rb +11 -0
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -0
- data/lib/solargraph/language_server/message/completion_item.rb +11 -0
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +57 -0
- data/lib/solargraph/language_server/message/exit_notification.rb +13 -0
- data/lib/solargraph/language_server/message/extended.rb +21 -0
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +100 -0
- data/lib/solargraph/language_server/message/extended/document.rb +20 -0
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -0
- data/lib/solargraph/language_server/message/extended/download_core.rb +23 -0
- data/lib/solargraph/language_server/message/extended/environment.rb +25 -0
- data/lib/solargraph/language_server/message/extended/search.rb +20 -0
- data/lib/solargraph/language_server/message/initialize.rb +153 -0
- data/lib/solargraph/language_server/message/initialized.rb +26 -0
- data/lib/solargraph/language_server/message/method_not_found.rb +16 -0
- data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -0
- data/lib/solargraph/language_server/message/shutdown.rb +13 -0
- data/lib/solargraph/language_server/message/text_document.rb +28 -0
- data/lib/solargraph/language_server/message/text_document/base.rb +19 -0
- data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -0
- data/lib/solargraph/language_server/message/text_document/completion.rb +57 -0
- data/lib/solargraph/language_server/message/text_document/definition.rb +38 -0
- data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -0
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +23 -0
- data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -0
- data/lib/solargraph/language_server/message/text_document/formatting.rb +105 -0
- data/lib/solargraph/language_server/message/text_document/hover.rb +44 -0
- data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -0
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -0
- data/lib/solargraph/language_server/message/text_document/references.rb +16 -0
- data/lib/solargraph/language_server/message/text_document/rename.rb +19 -0
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +29 -0
- data/lib/solargraph/language_server/message/workspace.rb +14 -0
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +29 -0
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +33 -0
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -0
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -0
- data/lib/solargraph/language_server/message_types.rb +14 -0
- data/lib/solargraph/language_server/request.rb +24 -0
- data/lib/solargraph/language_server/symbol_kinds.rb +36 -0
- data/lib/solargraph/language_server/transport.rb +13 -0
- data/lib/solargraph/language_server/transport/adapter.rb +56 -0
- data/lib/solargraph/language_server/transport/data_reader.rb +72 -0
- data/lib/solargraph/language_server/uri_helpers.rb +49 -0
- data/lib/solargraph/library.rb +426 -0
- data/lib/solargraph/location.rb +37 -0
- data/lib/solargraph/logging.rb +27 -0
- data/lib/solargraph/page.rb +83 -0
- data/lib/solargraph/parser.rb +26 -0
- data/lib/solargraph/parser/comment_ripper.rb +52 -0
- data/lib/solargraph/parser/legacy.rb +12 -0
- data/lib/solargraph/parser/legacy/class_methods.rb +109 -0
- data/lib/solargraph/parser/legacy/flawed_builder.rb +16 -0
- data/lib/solargraph/parser/legacy/node_chainer.rb +118 -0
- data/lib/solargraph/parser/legacy/node_methods.rb +311 -0
- data/lib/solargraph/parser/legacy/node_processors.rb +54 -0
- data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/args_node.rb +35 -0
- data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +15 -0
- data/lib/solargraph/parser/legacy/node_processors/block_node.rb +22 -0
- data/lib/solargraph/parser/legacy/node_processors/casgn_node.rb +25 -0
- data/lib/solargraph/parser/legacy/node_processors/cvasgn_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/def_node.rb +63 -0
- data/lib/solargraph/parser/legacy/node_processors/defs_node.rb +36 -0
- data/lib/solargraph/parser/legacy/node_processors/gvasgn_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/ivasgn_node.rb +38 -0
- data/lib/solargraph/parser/legacy/node_processors/lvasgn_node.rb +28 -0
- data/lib/solargraph/parser/legacy/node_processors/namespace_node.rb +39 -0
- data/lib/solargraph/parser/legacy/node_processors/orasgn_node.rb +16 -0
- data/lib/solargraph/parser/legacy/node_processors/resbody_node.rb +36 -0
- data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +21 -0
- data/lib/solargraph/parser/legacy/node_processors/send_node.rb +257 -0
- data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +18 -0
- data/lib/solargraph/parser/node_methods.rb +43 -0
- data/lib/solargraph/parser/node_processor.rb +43 -0
- data/lib/solargraph/parser/node_processor/base.rb +80 -0
- data/lib/solargraph/parser/region.rb +66 -0
- data/lib/solargraph/parser/rubyvm.rb +40 -0
- data/lib/solargraph/parser/rubyvm/class_methods.rb +150 -0
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +135 -0
- data/lib/solargraph/parser/rubyvm/node_methods.rb +301 -0
- data/lib/solargraph/parser/rubyvm/node_processors.rb +62 -0
- data/lib/solargraph/parser/rubyvm/node_processors/alias_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +86 -0
- data/lib/solargraph/parser/rubyvm/node_processors/begin_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +22 -0
- data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +22 -0
- data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +64 -0
- data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +57 -0
- data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +38 -0
- data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +39 -0
- data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +20 -0
- data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +27 -0
- data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +39 -0
- data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +26 -0
- data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +45 -0
- data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +21 -0
- data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +277 -0
- data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +18 -0
- data/lib/solargraph/parser/snippet.rb +13 -0
- data/lib/solargraph/pin.rb +36 -0
- data/lib/solargraph/pin/base.rb +296 -0
- data/lib/solargraph/pin/base_variable.rb +84 -0
- data/lib/solargraph/pin/block.rb +62 -0
- data/lib/solargraph/pin/class_variable.rb +8 -0
- data/lib/solargraph/pin/closure.rb +37 -0
- data/lib/solargraph/pin/common.rb +70 -0
- data/lib/solargraph/pin/constant.rb +43 -0
- data/lib/solargraph/pin/conversions.rb +96 -0
- data/lib/solargraph/pin/documenting.rb +105 -0
- data/lib/solargraph/pin/duck_method.rb +16 -0
- data/lib/solargraph/pin/global_variable.rb +8 -0
- data/lib/solargraph/pin/instance_variable.rb +30 -0
- data/lib/solargraph/pin/keyword.rb +15 -0
- data/lib/solargraph/pin/keyword_param.rb +8 -0
- data/lib/solargraph/pin/local_variable.rb +21 -0
- data/lib/solargraph/pin/localized.rb +43 -0
- data/lib/solargraph/pin/method.rb +245 -0
- data/lib/solargraph/pin/method_alias.rb +31 -0
- data/lib/solargraph/pin/namespace.rb +85 -0
- data/lib/solargraph/pin/parameter.rb +206 -0
- data/lib/solargraph/pin/proxy_type.rb +29 -0
- data/lib/solargraph/pin/reference.rb +14 -0
- data/lib/solargraph/pin/reference/extend.rb +10 -0
- data/lib/solargraph/pin/reference/include.rb +10 -0
- data/lib/solargraph/pin/reference/override.rb +29 -0
- data/lib/solargraph/pin/reference/prepend.rb +10 -0
- data/lib/solargraph/pin/reference/require.rb +14 -0
- data/lib/solargraph/pin/reference/superclass.rb +10 -0
- data/lib/solargraph/pin/singleton.rb +11 -0
- data/lib/solargraph/pin/symbol.rb +47 -0
- data/lib/solargraph/position.rb +100 -0
- data/lib/solargraph/range.rb +95 -0
- data/lib/solargraph/server_methods.rb +16 -0
- data/lib/solargraph/shell.rb +222 -0
- data/lib/solargraph/source.rb +537 -0
- data/lib/solargraph/source/chain.rb +154 -0
- data/lib/solargraph/source/chain/block_variable.rb +13 -0
- data/lib/solargraph/source/chain/call.rb +203 -0
- data/lib/solargraph/source/chain/class_variable.rb +13 -0
- data/lib/solargraph/source/chain/constant.rb +75 -0
- data/lib/solargraph/source/chain/global_variable.rb +13 -0
- data/lib/solargraph/source/chain/head.rb +35 -0
- data/lib/solargraph/source/chain/instance_variable.rb +13 -0
- data/lib/solargraph/source/chain/link.rb +67 -0
- data/lib/solargraph/source/chain/literal.rb +23 -0
- data/lib/solargraph/source/chain/or.rb +23 -0
- data/lib/solargraph/source/chain/variable.rb +13 -0
- data/lib/solargraph/source/chain/z_super.rb +30 -0
- data/lib/solargraph/source/change.rb +79 -0
- data/lib/solargraph/source/cursor.rb +164 -0
- data/lib/solargraph/source/encoding_fixes.rb +23 -0
- data/lib/solargraph/source/source_chainer.rb +190 -0
- data/lib/solargraph/source/updater.rb +54 -0
- data/lib/solargraph/source_map.rb +188 -0
- data/lib/solargraph/source_map/clip.rb +224 -0
- data/lib/solargraph/source_map/completion.rb +23 -0
- data/lib/solargraph/source_map/mapper.rb +215 -0
- data/lib/solargraph/type_checker.rb +503 -0
- data/lib/solargraph/type_checker/checks.rb +99 -0
- data/lib/solargraph/type_checker/param_def.rb +35 -0
- data/lib/solargraph/type_checker/problem.rb +32 -0
- data/lib/solargraph/type_checker/rules.rb +57 -0
- data/lib/solargraph/version.rb +5 -0
- data/lib/solargraph/views/_method.erb +62 -0
- data/lib/solargraph/views/_name_type_tag.erb +10 -0
- data/lib/solargraph/views/_namespace.erb +24 -0
- data/lib/solargraph/views/document.erb +23 -0
- data/lib/solargraph/views/environment.erb +58 -0
- data/lib/solargraph/views/layout.erb +44 -0
- data/lib/solargraph/views/search.erb +11 -0
- data/lib/solargraph/workspace.rb +209 -0
- data/lib/solargraph/workspace/config.rb +230 -0
- data/lib/solargraph/yard_map.rb +435 -0
- data/lib/solargraph/yard_map/cache.rb +19 -0
- data/lib/solargraph/yard_map/core_docs.rb +170 -0
- data/lib/solargraph/yard_map/core_fills.rb +185 -0
- data/lib/solargraph/yard_map/core_gen.rb +76 -0
- data/lib/solargraph/yard_map/helpers.rb +16 -0
- data/lib/solargraph/yard_map/mapper.rb +77 -0
- data/lib/solargraph/yard_map/mapper/to_constant.rb +25 -0
- data/lib/solargraph/yard_map/mapper/to_method.rb +78 -0
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +27 -0
- data/lib/solargraph/yard_map/rdoc_to_yard.rb +140 -0
- data/lib/solargraph/yard_map/stdlib_fills.rb +43 -0
- data/lib/solargraph/yard_map/to_method.rb +79 -0
- data/lib/yard-solargraph.rb +30 -0
- data/yardoc/2.2.2.tar.gz +0 -0
- metadata +564 -0
@@ -0,0 +1,170 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'net/http'
|
4
|
+
require 'uri'
|
5
|
+
require 'json'
|
6
|
+
require 'fileutils'
|
7
|
+
|
8
|
+
module Solargraph
|
9
|
+
class YardMap
|
10
|
+
# Tools for managing core documentation.
|
11
|
+
#
|
12
|
+
module CoreDocs
|
13
|
+
# The URL for downloading core documentation
|
14
|
+
SOURCE = 'https://solargraph.org/download'
|
15
|
+
|
16
|
+
# The default core documentation version
|
17
|
+
DEFAULT = '2.2.2'
|
18
|
+
|
19
|
+
class << self
|
20
|
+
# The directory where core documentation is installed.
|
21
|
+
#
|
22
|
+
# @return [String]
|
23
|
+
def cache_dir
|
24
|
+
# The directory is not stored in a variable so it can be overridden
|
25
|
+
# in specs.
|
26
|
+
ENV['SOLARGRAPH_CACHE'] || File.join(Dir.home, '.solargraph', 'cache')
|
27
|
+
end
|
28
|
+
|
29
|
+
# Ensure installation of minimum documentation.
|
30
|
+
#
|
31
|
+
# @return [void]
|
32
|
+
def require_minimum
|
33
|
+
FileUtils.mkdir_p File.join(cache_dir, 'gems')
|
34
|
+
return unless best_match.nil?
|
35
|
+
FileUtils.cp File.join(Solargraph::YARDOC_PATH, "#{DEFAULT}.tar.gz"), cache_dir
|
36
|
+
install_archive File.join(cache_dir, "#{DEFAULT}.tar.gz")
|
37
|
+
end
|
38
|
+
|
39
|
+
# True if core documentation is installed for the specified version
|
40
|
+
# number.
|
41
|
+
#
|
42
|
+
# @param ver [String] The version number to check
|
43
|
+
# @return [Boolean]
|
44
|
+
def valid?(ver)
|
45
|
+
dir = File.join(cache_dir, ver)
|
46
|
+
return false unless File.directory?(dir)
|
47
|
+
return false unless File.directory?(File.join(dir, 'yardoc'))
|
48
|
+
return false unless File.directory?(File.join(dir, 'yardoc-stdlib'))
|
49
|
+
true
|
50
|
+
end
|
51
|
+
|
52
|
+
# Get a list of version numbers for currently installed core
|
53
|
+
# documentation.
|
54
|
+
#
|
55
|
+
# @return [Array<String>] The installed version numbers
|
56
|
+
def versions
|
57
|
+
dirs = Dir[File.join(cache_dir, '*')].map{|d| File.basename(d)}
|
58
|
+
dirs.keep_if{|d| valid?(d)}
|
59
|
+
dirs.sort!{|a, b| Gem::Version.new(b) <=> Gem::Version.new(a)}
|
60
|
+
dirs
|
61
|
+
end
|
62
|
+
|
63
|
+
# Get the version number of the installed core documentation that is
|
64
|
+
# the closest match for the current Ruby version.
|
65
|
+
#
|
66
|
+
# @return [String] The closest match
|
67
|
+
def best_match
|
68
|
+
avail = versions
|
69
|
+
cur = Gem::Version.new(RUBY_VERSION)
|
70
|
+
avail.each do |v|
|
71
|
+
return v if Gem::Version.new(v) <= cur
|
72
|
+
end
|
73
|
+
avail.last
|
74
|
+
end
|
75
|
+
|
76
|
+
# Get a list of core documentation versions that are available for
|
77
|
+
# download.
|
78
|
+
#
|
79
|
+
# @return [Array<String>] The version numbers
|
80
|
+
def available
|
81
|
+
uri = URI.parse("#{SOURCE}/versions.json")
|
82
|
+
response = Net::HTTP.get_response(uri)
|
83
|
+
obj = JSON.parse(response.body)
|
84
|
+
raise SourceNotAvailableError, "Error connecting to #{SOURCE}" unless obj['status'] == 'ok'
|
85
|
+
obj['cores']
|
86
|
+
end
|
87
|
+
|
88
|
+
# Get the version number of core documentation available for download
|
89
|
+
# that is the closest match for the current Ruby version.
|
90
|
+
#
|
91
|
+
# @param current [String] The version to compare
|
92
|
+
# @return [String] The version number of the best match
|
93
|
+
def best_download current = RUBY_VERSION
|
94
|
+
rv = Gem::Version.new(current)
|
95
|
+
found = available
|
96
|
+
found.each do |ver|
|
97
|
+
return ver if Gem::Version.new(ver) <= rv
|
98
|
+
end
|
99
|
+
found.last
|
100
|
+
end
|
101
|
+
|
102
|
+
# Get the path to a yardoc file for Ruby core documentation.
|
103
|
+
#
|
104
|
+
# @param ver [String] The version number (best match is default)
|
105
|
+
# @return [String] The path to the yardoc
|
106
|
+
def yardoc_file(ver = best_match)
|
107
|
+
raise ArgumentError, "Invalid core yardoc version #{ver}" unless valid?(ver)
|
108
|
+
File.join(cache_dir, ver, 'yardoc')
|
109
|
+
end
|
110
|
+
|
111
|
+
# Get the path to a yardoc file for Ruby stdlib documentation.
|
112
|
+
#
|
113
|
+
# @param ver [String] The version number (best match is default)
|
114
|
+
# @return [String] The path to the yardoc
|
115
|
+
def yardoc_stdlib_file(ver = best_match)
|
116
|
+
raise ArgumentError, "Invalid core yardoc version #{ver}" unless valid?(ver)
|
117
|
+
File.join(cache_dir, ver, 'yardoc-stdlib')
|
118
|
+
end
|
119
|
+
|
120
|
+
# Download the specified version of core documentation.
|
121
|
+
#
|
122
|
+
# @param version [String]
|
123
|
+
# @return [void]
|
124
|
+
def download version
|
125
|
+
FileUtils.mkdir_p cache_dir
|
126
|
+
uri = URI.parse("#{SOURCE}/#{version}.tar.gz")
|
127
|
+
# @type [Net::HTTPResponse]
|
128
|
+
response = Net::HTTP.get_response(uri)
|
129
|
+
if response.code == '404'
|
130
|
+
raise ArgumentError, "Version #{version} is not available from #{SOURCE}"
|
131
|
+
else
|
132
|
+
zipfile = File.join(cache_dir, "#{version}.tar.gz")
|
133
|
+
File.binwrite zipfile, response.body
|
134
|
+
install_archive zipfile
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
# Reset the core documentation cache to the minimum requirement.
|
139
|
+
#
|
140
|
+
# @return [void]
|
141
|
+
def clear
|
142
|
+
FileUtils.rm_rf cache_dir, secure: true
|
143
|
+
require_minimum
|
144
|
+
end
|
145
|
+
|
146
|
+
private
|
147
|
+
|
148
|
+
# Extract the specified archive to the core cache directory.
|
149
|
+
#
|
150
|
+
# @param filename [String]
|
151
|
+
# @return [void]
|
152
|
+
def install_archive filename
|
153
|
+
tar_extract = Gem::Package::TarReader.new(Zlib::GzipReader.open(filename))
|
154
|
+
tar_extract.rewind
|
155
|
+
tar_extract.each do |entry|
|
156
|
+
if entry.directory?
|
157
|
+
FileUtils.mkdir_p File.join(cache_dir, entry.full_name)
|
158
|
+
else
|
159
|
+
FileUtils.mkdir_p File.join(cache_dir, File.dirname(entry.full_name))
|
160
|
+
File.open(File.join(cache_dir, entry.full_name), 'wb') do |f|
|
161
|
+
f << entry.read
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
tar_extract.close
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
@@ -0,0 +1,185 @@
|
|
1
|
+
module Solargraph
|
2
|
+
class YardMap
|
3
|
+
module CoreFills
|
4
|
+
Override = Pin::Reference::Override
|
5
|
+
|
6
|
+
KEYWORDS = [
|
7
|
+
'__ENCODING__', '__LINE__', '__FILE__', 'BEGIN', 'END', 'alias', 'and',
|
8
|
+
'begin', 'break', 'case', 'class', 'def', 'defined?', 'do', 'else',
|
9
|
+
'elsif', 'end', 'ensure', 'false', 'for', 'if', 'in', 'module', 'next',
|
10
|
+
'nil', 'not', 'or', 'redo', 'rescue', 'retry', 'return', 'self', 'super',
|
11
|
+
'then', 'true', 'undef', 'unless', 'until', 'when', 'while', 'yield'
|
12
|
+
].map { |k| Pin::Keyword.new(k) }
|
13
|
+
|
14
|
+
methods_with_yieldparam_subtypes = %w[
|
15
|
+
Array#each Array#map Array#map! Array#any? Array#all? Array#index
|
16
|
+
Array#keep_if Array#delete_if
|
17
|
+
Enumerable#each_entry Enumerable#map Enumerable#any? Enumerable#all?
|
18
|
+
Enumerable#select Enumerable#reject
|
19
|
+
Set#each
|
20
|
+
]
|
21
|
+
|
22
|
+
OVERRIDES = [
|
23
|
+
Override.method_return('Array#concat', 'Array'),
|
24
|
+
Override.method_return('Array#keep_if', 'self'),
|
25
|
+
Override.method_return('Array#delete_if', 'self'),
|
26
|
+
Override.from_comment('Array#map', %(
|
27
|
+
@overload map(&block)
|
28
|
+
@return [Array]
|
29
|
+
@overload map()
|
30
|
+
@return [Enumerator]
|
31
|
+
)),
|
32
|
+
Override.from_comment('Array#reject', %(
|
33
|
+
@overload reject(&block)
|
34
|
+
@return [self]
|
35
|
+
@overload reject()
|
36
|
+
@return [Enumerator]
|
37
|
+
)),
|
38
|
+
Override.method_return('Array#reverse', 'self', delete: ['overload']),
|
39
|
+
Override.from_comment('Array#select', %(
|
40
|
+
@overload select(&block)
|
41
|
+
@return [self]
|
42
|
+
@overload select()
|
43
|
+
@return [Enumerator]
|
44
|
+
)),
|
45
|
+
Override.from_comment('Array#[]', %(
|
46
|
+
@overload [](range)
|
47
|
+
@param range [Range]
|
48
|
+
@return [self]
|
49
|
+
@overload [](num1, num2)
|
50
|
+
@param num1 [Integer]
|
51
|
+
@param num2 [Integer]
|
52
|
+
@return [self]
|
53
|
+
@overload [](num)
|
54
|
+
@param num [Integer]
|
55
|
+
@return_single_parameter
|
56
|
+
@return_single_parameter
|
57
|
+
)),
|
58
|
+
Override.from_comment('Array#first', %(
|
59
|
+
@overload first(num)
|
60
|
+
@param num [Integer]
|
61
|
+
@return [self]
|
62
|
+
@return_single_parameter
|
63
|
+
)),
|
64
|
+
Override.from_comment('Array#last', %(
|
65
|
+
@overload last(num)
|
66
|
+
@param num [Integer]
|
67
|
+
@return [self]
|
68
|
+
@return_single_parameter
|
69
|
+
)),
|
70
|
+
Override.method_return('Array#map', 'Array'),
|
71
|
+
Override.method_return('Array#uniq', 'self'),
|
72
|
+
Override.method_return('Array#zip', 'Array, nil'),
|
73
|
+
|
74
|
+
Override.from_comment('BasicObject#==', %(
|
75
|
+
@param other [BasicObject]
|
76
|
+
@return [Boolean]
|
77
|
+
)),
|
78
|
+
Override.method_return('BasicObject#initialize', 'void'),
|
79
|
+
|
80
|
+
Override.method_return('Class#new', 'self'),
|
81
|
+
Override.method_return('Class.new', 'Class<Object>'),
|
82
|
+
Override.method_return('Class#allocate', 'self'),
|
83
|
+
Override.method_return('Class.allocate', 'Class<Object>'),
|
84
|
+
|
85
|
+
Override.method_return('Enumerable#select', 'self'),
|
86
|
+
|
87
|
+
Override.method_return('File.absolute_path', 'String'),
|
88
|
+
Override.method_return('File.basename', 'String'),
|
89
|
+
Override.method_return('File.dirname', 'String'),
|
90
|
+
Override.method_return('File.extname', 'String'),
|
91
|
+
Override.method_return('File.join', 'String'),
|
92
|
+
|
93
|
+
Override.from_comment('Float#+', %(
|
94
|
+
@param y [Numeric]
|
95
|
+
@return [Numeric]
|
96
|
+
)),
|
97
|
+
|
98
|
+
Override.from_comment('Hash#[]', %(
|
99
|
+
@return_value_parameter
|
100
|
+
)),
|
101
|
+
|
102
|
+
# @todo This override isn't robust enough. It needs to allow for
|
103
|
+
# parameterized Hash types, e.g., [Hash{Symbol => String}].
|
104
|
+
Override.from_comment('Hash#[]=', %(
|
105
|
+
@param_tuple
|
106
|
+
)),
|
107
|
+
|
108
|
+
Override.method_return('Hash#merge', 'Hash'),
|
109
|
+
|
110
|
+
Override.from_comment('Integer#+', %(
|
111
|
+
@param y [Numeric]
|
112
|
+
@return [Numeric]
|
113
|
+
)),
|
114
|
+
|
115
|
+
Override.method_return('Kernel#puts', 'nil'),
|
116
|
+
|
117
|
+
Override.from_comment('Numeric#+', %(
|
118
|
+
@param y [Numeric]
|
119
|
+
@return [Numeric]
|
120
|
+
)),
|
121
|
+
|
122
|
+
Override.method_return('Object#!', 'Boolean'),
|
123
|
+
Override.method_return('Object#clone', 'self', delete: [:overload]),
|
124
|
+
Override.method_return('Object#dup', 'self', delete: [:overload]),
|
125
|
+
Override.method_return('Object#freeze', 'self', delete: [:overload]),
|
126
|
+
Override.method_return('Object#inspect', 'String'),
|
127
|
+
Override.method_return('Object#taint', 'self'),
|
128
|
+
Override.method_return('Object#to_s', 'String'),
|
129
|
+
Override.method_return('Object#untaint', 'self'),
|
130
|
+
Override.from_comment('Object#tap', %(
|
131
|
+
@return [self]
|
132
|
+
@yieldparam [self]
|
133
|
+
)),
|
134
|
+
|
135
|
+
Override.from_comment('STDERR', %(
|
136
|
+
@type [IO]
|
137
|
+
)),
|
138
|
+
|
139
|
+
Override.from_comment('STDIN', %(
|
140
|
+
@type [IO]
|
141
|
+
)),
|
142
|
+
|
143
|
+
Override.from_comment('STDOUT', %(
|
144
|
+
@type [IO]
|
145
|
+
)),
|
146
|
+
|
147
|
+
Override.method_return('String#freeze', 'self'),
|
148
|
+
Override.method_return('String#split', 'Array<String>'),
|
149
|
+
Override.method_return('String#lines', 'Array<String>'),
|
150
|
+
Override.from_comment('String#each_line', %(
|
151
|
+
@yieldparam [String]
|
152
|
+
)),
|
153
|
+
Override.from_comment('String.new', %(
|
154
|
+
@overload new(*)
|
155
|
+
@return [self]
|
156
|
+
))
|
157
|
+
].concat(
|
158
|
+
methods_with_yieldparam_subtypes.map do |path|
|
159
|
+
Override.from_comment(path, %(
|
160
|
+
@yieldparam_single_parameter
|
161
|
+
))
|
162
|
+
end
|
163
|
+
)
|
164
|
+
|
165
|
+
PINS = [
|
166
|
+
Pin::Reference::Superclass.new(closure: Pin::Namespace.new(name: 'File'), name: 'IO'),
|
167
|
+
Pin::Reference::Superclass.new(closure: Pin::Namespace.new(name: 'Integer'), name: 'Numeric'),
|
168
|
+
Pin::Reference::Superclass.new(closure: Pin::Namespace.new(name: 'Float'), name: 'Numeric')
|
169
|
+
].concat(
|
170
|
+
# HACK: Add Errno exception classes
|
171
|
+
begin
|
172
|
+
errno = Solargraph::Pin::Namespace.new(name: 'Errno')
|
173
|
+
result = []
|
174
|
+
Errno.constants.each do |const|
|
175
|
+
result.push Solargraph::Pin::Namespace.new(type: :class, name: const.to_s, closure: errno)
|
176
|
+
result.push Solargraph::Pin::Reference::Superclass.new(closure: result.last, name: 'SystemCallError')
|
177
|
+
end
|
178
|
+
result
|
179
|
+
end
|
180
|
+
)
|
181
|
+
|
182
|
+
ALL = KEYWORDS + PINS + OVERRIDES
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'fileutils'
|
4
|
+
require 'tmpdir'
|
5
|
+
require 'pathname'
|
6
|
+
require 'rubygems/package'
|
7
|
+
require 'shellwords'
|
8
|
+
|
9
|
+
module Solargraph
|
10
|
+
class YardMap
|
11
|
+
# Tools for generating core documentation.
|
12
|
+
#
|
13
|
+
module CoreGen
|
14
|
+
class << self
|
15
|
+
# Generate documentation from the specified Ruby source directory.
|
16
|
+
#
|
17
|
+
# @param ruby_dir [String] The Ruby source directory
|
18
|
+
# @param dest_dir [String] The destination directory for the yardocs
|
19
|
+
# @return [void]
|
20
|
+
def generate_docs ruby_dir, dest_dir
|
21
|
+
path_name = Pathname.new(Dir.pwd).join(dest_dir).to_s
|
22
|
+
FileUtils.mkdir_p path_name
|
23
|
+
Dir.chdir(ruby_dir) do
|
24
|
+
`yardoc -b "#{File.join(path_name, 'yardoc')}" -n *.c`
|
25
|
+
raise 'An error occurred generating the core yardoc.' unless $?.success?
|
26
|
+
`yardoc -b "#{File.join(path_name, 'yardoc-stdlib')}" -n lib ext`
|
27
|
+
raise 'An error occurred generating the stdlib yardoc.' unless $?.success?
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Generate a gzip of documentation from the specified Ruby source
|
32
|
+
# directory.
|
33
|
+
#
|
34
|
+
# This method is designed to generate the directory architecture that
|
35
|
+
# YardMap core docs expect.
|
36
|
+
#
|
37
|
+
# @param ruby_dir [String] The Ruby source directory
|
38
|
+
# @param ver_name [String, nil] The version name
|
39
|
+
# @param dest_dir [String] The destination directory
|
40
|
+
# @return [void]
|
41
|
+
def generate_gzip ruby_dir, ver_name = nil, dest_dir = Dir.pwd
|
42
|
+
Dir.mktmpdir do |tmp|
|
43
|
+
base_name = ver_name || begin
|
44
|
+
match = ruby_dir.match(/\d+\.\d+\.\d+$/)
|
45
|
+
raise "Unable to determine version name from #{ruby_dir}" if match.nil?
|
46
|
+
match[0]
|
47
|
+
end
|
48
|
+
path_name = Pathname.new(tmp).join(base_name).to_s
|
49
|
+
generate_docs ruby_dir, path_name
|
50
|
+
gzip path_name, Pathname.new(dest_dir).join("#{base_name}.tar.gz").to_s
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
# @param dir [String] The directory to compress
|
57
|
+
# @param dst [String] The destination file
|
58
|
+
def gzip dir, dst
|
59
|
+
File.open(dst, 'wb') do |file|
|
60
|
+
Zlib::GzipWriter.wrap(file) do |gzip|
|
61
|
+
Gem::Package::TarWriter.new(gzip) do |tar|
|
62
|
+
Dir["#{dir}/**/*"].each do |filename|
|
63
|
+
next if File.directory?(filename)
|
64
|
+
relname = File.join(File.basename(dir), filename[dir.length+1..-1])
|
65
|
+
tar.add_file_simple(relname, 0o644, File.size(filename)) do |io|
|
66
|
+
io.write File.read_binary(filename)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Solargraph
|
2
|
+
class YardMap
|
3
|
+
module Helpers
|
4
|
+
module_function
|
5
|
+
|
6
|
+
# @param code_object [YARD::CodeObjects::Base]
|
7
|
+
# @param spec [Gem::Specification]
|
8
|
+
# @return [Solargraph::Location, nil]
|
9
|
+
def object_location code_object, spec
|
10
|
+
return nil if spec.nil? || code_object.nil? || code_object.file.nil? || code_object.line.nil?
|
11
|
+
file = File.join(spec.full_gem_path, code_object.file)
|
12
|
+
Solargraph::Location.new(file, Solargraph::Range.from_to(code_object.line - 1, 0, code_object.line - 1, 0))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|