solargraph 0.44.2 → 0.46.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 +4 -4
- data/.github/workflows/rspec.yml +41 -0
- data/.gitignore +9 -9
- data/.rspec +2 -2
- data/.travis.yml +19 -19
- data/CHANGELOG.md +1115 -1088
- data/Gemfile +0 -0
- data/LICENSE +0 -0
- data/README.md +128 -120
- data/Rakefile +0 -0
- data/SPONSORS.md +18 -15
- data/bin/solargraph +0 -0
- data/lib/solargraph/api_map/bundler_methods.rb +22 -22
- data/lib/solargraph/api_map/cache.rb +70 -70
- data/lib/solargraph/api_map/source_to_yard.rb +81 -81
- data/lib/solargraph/api_map/store.rb +256 -256
- data/lib/solargraph/api_map.rb +686 -681
- data/lib/solargraph/bench.rb +27 -27
- data/lib/solargraph/compat.rb +37 -37
- data/lib/solargraph/complex_type/type_methods.rb +130 -130
- data/lib/solargraph/complex_type/unique_type.rb +75 -75
- data/lib/solargraph/complex_type.rb +221 -221
- data/lib/solargraph/convention/base.rb +33 -33
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +22 -22
- data/lib/solargraph/convention/rspec.rb +30 -21
- data/lib/solargraph/convention.rb +47 -47
- data/lib/solargraph/converters/dd.rb +12 -12
- data/lib/solargraph/converters/dl.rb +12 -12
- data/lib/solargraph/converters/dt.rb +12 -12
- data/lib/solargraph/converters/misc.rb +1 -1
- data/lib/solargraph/diagnostics/base.rb +29 -29
- data/lib/solargraph/diagnostics/require_not_found.rb +53 -37
- data/lib/solargraph/diagnostics/rubocop.rb +98 -98
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +63 -63
- data/lib/solargraph/diagnostics/severities.rb +15 -15
- data/lib/solargraph/diagnostics/type_check.rb +54 -54
- data/lib/solargraph/diagnostics/update_errors.rb +41 -41
- data/lib/solargraph/diagnostics.rb +55 -55
- data/lib/solargraph/documentor.rb +76 -76
- data/lib/solargraph/environ.rb +45 -45
- data/lib/solargraph/language_server/completion_item_kinds.rb +35 -35
- data/lib/solargraph/language_server/error_codes.rb +20 -20
- data/lib/solargraph/language_server/host/cataloger.rb +56 -56
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +111 -111
- data/lib/solargraph/language_server/host/message_worker.rb +59 -59
- data/lib/solargraph/language_server/host/sources.rb +156 -156
- data/lib/solargraph/language_server/host.rb +865 -865
- data/lib/solargraph/language_server/message/base.rb +89 -89
- data/lib/solargraph/language_server/message/cancel_request.rb +13 -13
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
- data/lib/solargraph/language_server/message/client.rb +11 -11
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -58
- data/lib/solargraph/language_server/message/completion_item.rb +11 -11
- data/lib/solargraph/language_server/message/exit_notification.rb +13 -13
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +100 -100
- data/lib/solargraph/language_server/message/extended/document.rb +20 -20
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +23 -23
- data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/extended.rb +21 -21
- data/lib/solargraph/language_server/message/initialize.rb +162 -162
- data/lib/solargraph/language_server/message/initialized.rb +27 -27
- data/lib/solargraph/language_server/message/method_not_found.rb +16 -16
- data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -14
- data/lib/solargraph/language_server/message/shutdown.rb +13 -13
- data/lib/solargraph/language_server/message/text_document/base.rb +19 -19
- data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -17
- data/lib/solargraph/language_server/message/text_document/completion.rb +59 -59
- data/lib/solargraph/language_server/message/text_document/definition.rb +38 -38
- data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -15
- data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -15
- data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -15
- data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -17
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +23 -23
- data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +126 -126
- data/lib/solargraph/language_server/message/text_document/hover.rb +54 -44
- data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -34
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
- data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +29 -29
- data/lib/solargraph/language_server/message/text_document.rb +28 -28
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +30 -30
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +33 -33
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
- data/lib/solargraph/language_server/message/workspace.rb +14 -14
- data/lib/solargraph/language_server/message.rb +93 -93
- data/lib/solargraph/language_server/message_types.rb +14 -14
- data/lib/solargraph/language_server/request.rb +24 -24
- data/lib/solargraph/language_server/symbol_kinds.rb +36 -36
- data/lib/solargraph/language_server/transport/adapter.rb +53 -53
- data/lib/solargraph/language_server/transport/data_reader.rb +72 -72
- data/lib/solargraph/language_server/transport.rb +13 -13
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/language_server.rb +19 -19
- data/lib/solargraph/library.rb +546 -546
- data/lib/solargraph/location.rb +37 -37
- data/lib/solargraph/logging.rb +27 -27
- data/lib/solargraph/page.rb +83 -83
- data/lib/solargraph/parser/comment_ripper.rb +52 -52
- data/lib/solargraph/parser/legacy/class_methods.rb +135 -140
- data/lib/solargraph/parser/legacy/flawed_builder.rb +16 -16
- data/lib/solargraph/parser/legacy/node_chainer.rb +148 -148
- data/lib/solargraph/parser/legacy/node_methods.rb +325 -325
- data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +23 -23
- data/lib/solargraph/parser/legacy/node_processors/args_node.rb +35 -35
- data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +15 -15
- data/lib/solargraph/parser/legacy/node_processors/block_node.rb +42 -42
- data/lib/solargraph/parser/legacy/node_processors/casgn_node.rb +25 -25
- data/lib/solargraph/parser/legacy/node_processors/cvasgn_node.rb +23 -23
- data/lib/solargraph/parser/legacy/node_processors/def_node.rb +63 -63
- data/lib/solargraph/parser/legacy/node_processors/defs_node.rb +36 -36
- data/lib/solargraph/parser/legacy/node_processors/gvasgn_node.rb +23 -23
- data/lib/solargraph/parser/legacy/node_processors/ivasgn_node.rb +38 -38
- data/lib/solargraph/parser/legacy/node_processors/lvasgn_node.rb +28 -28
- data/lib/solargraph/parser/legacy/node_processors/namespace_node.rb +39 -39
- data/lib/solargraph/parser/legacy/node_processors/orasgn_node.rb +16 -16
- data/lib/solargraph/parser/legacy/node_processors/resbody_node.rb +36 -36
- data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +21 -21
- data/lib/solargraph/parser/legacy/node_processors/send_node.rb +257 -257
- data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +18 -18
- data/lib/solargraph/parser/legacy/node_processors.rb +54 -54
- data/lib/solargraph/parser/legacy.rb +12 -12
- data/lib/solargraph/parser/node_methods.rb +43 -43
- data/lib/solargraph/parser/node_processor/base.rb +77 -77
- data/lib/solargraph/parser/node_processor.rb +43 -43
- data/lib/solargraph/parser/region.rb +66 -66
- data/lib/solargraph/parser/rubyvm/class_methods.rb +144 -155
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +160 -160
- data/lib/solargraph/parser/rubyvm/node_methods.rb +315 -315
- data/lib/solargraph/parser/rubyvm/node_processors/alias_node.rb +23 -23
- data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +85 -85
- data/lib/solargraph/parser/rubyvm/node_processors/begin_node.rb +15 -15
- data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +42 -42
- data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +22 -22
- data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +23 -23
- data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +63 -64
- data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +57 -57
- data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +23 -23
- data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +38 -38
- data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +39 -39
- data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +20 -20
- data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +27 -27
- data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +39 -39
- data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +26 -26
- data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +15 -15
- data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +45 -45
- data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +21 -21
- data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +15 -15
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +277 -277
- data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +18 -18
- data/lib/solargraph/parser/rubyvm/node_processors.rb +63 -62
- data/lib/solargraph/parser/rubyvm.rb +40 -40
- data/lib/solargraph/parser/snippet.rb +13 -13
- data/lib/solargraph/parser.rb +26 -26
- data/lib/solargraph/pin/base.rb +296 -296
- data/lib/solargraph/pin/base_variable.rb +84 -84
- data/lib/solargraph/pin/block.rb +72 -72
- data/lib/solargraph/pin/class_variable.rb +8 -8
- data/lib/solargraph/pin/closure.rb +37 -37
- data/lib/solargraph/pin/common.rb +70 -70
- data/lib/solargraph/pin/constant.rb +43 -43
- data/lib/solargraph/pin/conversions.rb +96 -96
- data/lib/solargraph/pin/documenting.rb +105 -105
- data/lib/solargraph/pin/duck_method.rb +16 -16
- data/lib/solargraph/pin/global_variable.rb +8 -8
- data/lib/solargraph/pin/instance_variable.rb +30 -30
- data/lib/solargraph/pin/keyword.rb +15 -15
- data/lib/solargraph/pin/keyword_param.rb +8 -8
- data/lib/solargraph/pin/local_variable.rb +55 -55
- data/lib/solargraph/pin/method.rb +245 -245
- data/lib/solargraph/pin/method_alias.rb +31 -31
- data/lib/solargraph/pin/namespace.rb +91 -91
- data/lib/solargraph/pin/parameter.rb +201 -206
- data/lib/solargraph/pin/proxy_type.rb +29 -29
- data/lib/solargraph/pin/reference/extend.rb +10 -10
- data/lib/solargraph/pin/reference/include.rb +10 -10
- data/lib/solargraph/pin/reference/override.rb +29 -29
- data/lib/solargraph/pin/reference/prepend.rb +10 -10
- data/lib/solargraph/pin/reference/require.rb +14 -14
- data/lib/solargraph/pin/reference/superclass.rb +10 -10
- data/lib/solargraph/pin/reference.rb +14 -14
- data/lib/solargraph/pin/search.rb +56 -0
- data/lib/solargraph/pin/singleton.rb +11 -11
- data/lib/solargraph/pin/symbol.rb +47 -47
- data/lib/solargraph/pin.rb +37 -36
- data/lib/solargraph/position.rb +100 -100
- data/lib/solargraph/range.rb +95 -95
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +226 -226
- data/lib/solargraph/source/chain/block_variable.rb +13 -13
- data/lib/solargraph/source/chain/call.rb +204 -204
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +75 -75
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +28 -28
- data/lib/solargraph/source/chain/head.rb +19 -19
- data/lib/solargraph/source/chain/instance_variable.rb +13 -13
- data/lib/solargraph/source/chain/link.rb +71 -71
- data/lib/solargraph/source/chain/literal.rb +23 -23
- data/lib/solargraph/source/chain/or.rb +23 -23
- data/lib/solargraph/source/chain/q_call.rb +11 -11
- data/lib/solargraph/source/chain/variable.rb +13 -13
- data/lib/solargraph/source/chain/z_super.rb +30 -30
- data/lib/solargraph/source/chain.rb +164 -164
- data/lib/solargraph/source/change.rb +79 -79
- data/lib/solargraph/source/cursor.rb +164 -164
- data/lib/solargraph/source/source_chainer.rb +191 -191
- data/lib/solargraph/source/updater.rb +54 -54
- data/lib/solargraph/source.rb +522 -522
- data/lib/solargraph/source_map/clip.rb +224 -224
- data/lib/solargraph/source_map/completion.rb +23 -23
- data/lib/solargraph/source_map/mapper.rb +212 -212
- data/lib/solargraph/source_map.rb +180 -189
- data/lib/solargraph/type_checker/checks.rb +99 -99
- data/lib/solargraph/type_checker/param_def.rb +35 -35
- data/lib/solargraph/type_checker/problem.rb +32 -32
- data/lib/solargraph/type_checker/rules.rb +57 -57
- data/lib/solargraph/type_checker.rb +543 -510
- data/lib/solargraph/version.rb +5 -5
- data/lib/solargraph/views/environment.erb +58 -58
- data/lib/solargraph/workspace/config.rb +231 -231
- data/lib/solargraph/workspace.rb +215 -214
- data/lib/solargraph/yard_map/cache.rb +19 -19
- data/lib/solargraph/yard_map/core_docs.rb +170 -170
- data/lib/solargraph/yard_map/core_fills.rb +208 -203
- data/lib/solargraph/yard_map/core_gen.rb +76 -76
- data/lib/solargraph/yard_map/helpers.rb +16 -16
- data/lib/solargraph/yard_map/mapper/to_constant.rb +25 -25
- data/lib/solargraph/yard_map/mapper/to_method.rb +78 -78
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +27 -27
- data/lib/solargraph/yard_map/mapper.rb +77 -77
- data/lib/solargraph/yard_map/rdoc_to_yard.rb +140 -140
- data/lib/solargraph/yard_map/stdlib_fills.rb +43 -43
- data/lib/solargraph/yard_map/to_method.rb +79 -79
- data/lib/solargraph/yard_map.rb +460 -443
- data/lib/solargraph.rb +69 -69
- data/lib/yard-solargraph.rb +33 -33
- data/solargraph.gemspec +0 -0
- metadata +14 -12
data/lib/solargraph/shell.rb
CHANGED
|
@@ -1,226 +1,226 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'thor'
|
|
4
|
-
|
|
5
|
-
module Solargraph
|
|
6
|
-
class Shell < Thor
|
|
7
|
-
include Solargraph::ServerMethods
|
|
8
|
-
|
|
9
|
-
map %w[--version -v] => :version
|
|
10
|
-
|
|
11
|
-
desc "--version, -v", "Print the version"
|
|
12
|
-
def version
|
|
13
|
-
puts Solargraph::VERSION
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
desc 'socket', 'Run a Solargraph socket server'
|
|
17
|
-
option :host, type: :string, aliases: :h, desc: 'The server host', default: '127.0.0.1'
|
|
18
|
-
option :port, type: :numeric, aliases: :p, desc: 'The server port', default: 7658
|
|
19
|
-
def socket
|
|
20
|
-
require 'backport'
|
|
21
|
-
port = options[:port]
|
|
22
|
-
port = available_port if port.zero?
|
|
23
|
-
Backport.run do
|
|
24
|
-
Signal.trap("INT") do
|
|
25
|
-
Backport.stop
|
|
26
|
-
end
|
|
27
|
-
Signal.trap("TERM") do
|
|
28
|
-
Backport.stop
|
|
29
|
-
end
|
|
30
|
-
Backport.prepare_tcp_server host: options[:host], port: port, adapter: Solargraph::LanguageServer::Transport::Adapter
|
|
31
|
-
STDERR.puts "Solargraph is listening PORT=#{port} PID=#{Process.pid}"
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
desc 'stdio', 'Run a Solargraph stdio server'
|
|
36
|
-
def stdio
|
|
37
|
-
require 'backport'
|
|
38
|
-
Backport.run do
|
|
39
|
-
Signal.trap("INT") do
|
|
40
|
-
Backport.stop
|
|
41
|
-
end
|
|
42
|
-
Signal.trap("TERM") do
|
|
43
|
-
Backport.stop
|
|
44
|
-
end
|
|
45
|
-
Backport.prepare_stdio_server adapter: Solargraph::LanguageServer::Transport::Adapter
|
|
46
|
-
STDERR.puts "Solargraph is listening on stdio PID=#{Process.pid}"
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
desc 'config [DIRECTORY]', 'Create or overwrite a default configuration file'
|
|
51
|
-
option :extensions, type: :boolean, aliases: :e, desc: 'Add installed extensions', default: true
|
|
52
|
-
def config(directory = '.')
|
|
53
|
-
matches = []
|
|
54
|
-
if options[:extensions]
|
|
55
|
-
Gem::Specification.each do |g|
|
|
56
|
-
if g.name.match(/^solargraph\-[A-Za-z0-9_\-]*?\-ext/)
|
|
57
|
-
require g.name
|
|
58
|
-
matches.push g.name
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
conf = Solargraph::Workspace::Config.new.raw_data
|
|
63
|
-
unless matches.empty?
|
|
64
|
-
matches.each do |m|
|
|
65
|
-
conf['extensions'].push m
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
File.open(File.join(directory, '.solargraph.yml'), 'w') do |file|
|
|
69
|
-
file.puts conf.to_yaml
|
|
70
|
-
end
|
|
71
|
-
STDOUT.puts "Configuration file initialized."
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
desc 'download-core [VERSION]', 'Download core documentation'
|
|
75
|
-
def download_core version = nil
|
|
76
|
-
ver = version || Solargraph::YardMap::CoreDocs.best_download
|
|
77
|
-
if RUBY_VERSION != ver
|
|
78
|
-
puts "Documentation for #{RUBY_VERSION} is not available. Reverting to closest match..."
|
|
79
|
-
end
|
|
80
|
-
puts "Downloading docs for #{ver}..."
|
|
81
|
-
Solargraph::YardMap::CoreDocs.download ver
|
|
82
|
-
# Clear cached documentation if it exists
|
|
83
|
-
FileUtils.rm_rf Dir.glob(File.join(Solargraph::YardMap::CoreDocs.cache_dir, ver, '*.ser'))
|
|
84
|
-
puts "Download complete."
|
|
85
|
-
rescue ArgumentError => e
|
|
86
|
-
STDERR.puts "ERROR: #{e.message}"
|
|
87
|
-
STDERR.puts "Run `solargraph available-cores` for a list."
|
|
88
|
-
exit 1
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
desc 'list-cores', 'List the local documentation versions'
|
|
92
|
-
def list_cores
|
|
93
|
-
puts Solargraph::YardMap::CoreDocs.versions.join("\n")
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
desc 'available-cores', 'List available documentation versions'
|
|
97
|
-
def available_cores
|
|
98
|
-
puts Solargraph::YardMap::CoreDocs.available.join("\n")
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
desc 'clear', 'Delete all cached documentation'
|
|
102
|
-
long_desc %(
|
|
103
|
-
This command will delete all core and gem documentation from the cache.
|
|
104
|
-
You can also delete specific gem caches with the `uncache` command or
|
|
105
|
-
update documentation for specific Ruby versions with the `download-core`
|
|
106
|
-
command.
|
|
107
|
-
)
|
|
108
|
-
def clear
|
|
109
|
-
puts "Deleting the cached documentation"
|
|
110
|
-
Solargraph::YardMap::CoreDocs.clear
|
|
111
|
-
end
|
|
112
|
-
map 'clear-cache' => :clear
|
|
113
|
-
map 'clear-cores' => :clear
|
|
114
|
-
|
|
115
|
-
desc 'uncache GEM [...GEM]', "Delete cached gem documentation"
|
|
116
|
-
def uncache *gems
|
|
117
|
-
raise ArgumentError, 'No gems specified.' if gems.empty?
|
|
118
|
-
gems.each do |gem|
|
|
119
|
-
Dir[File.join(Solargraph::YardMap::CoreDocs.cache_dir, 'gems', "#{gem}-*")].each do |dir|
|
|
120
|
-
puts "Deleting cache: #{dir}"
|
|
121
|
-
FileUtils.remove_entry_secure dir
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
desc 'reporters', 'Get a list of diagnostics reporters'
|
|
127
|
-
def reporters
|
|
128
|
-
puts Solargraph::Diagnostics.reporters
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
desc 'typecheck [FILE(s)]', 'Run the type checker'
|
|
132
|
-
long_desc %(
|
|
133
|
-
Perform type checking on one or more files in a workspace. Check the
|
|
134
|
-
entire workspace if no files are specified.
|
|
135
|
-
|
|
136
|
-
Type checking levels are normal, typed, strict, and strong.
|
|
137
|
-
)
|
|
138
|
-
option :level, type: :string, aliases: [:mode, :m, :l], desc: 'Type checking level', default: 'normal'
|
|
139
|
-
option :directory, type: :string, aliases: :d, desc: 'The workspace directory', default: '.'
|
|
140
|
-
def typecheck *files
|
|
141
|
-
directory = File.realpath(options[:directory])
|
|
142
|
-
api_map = Solargraph::ApiMap.load(directory)
|
|
143
|
-
if files.empty?
|
|
144
|
-
files = api_map.source_maps.map(&:filename)
|
|
145
|
-
else
|
|
146
|
-
files.map! { |file| File.realpath(file) }
|
|
147
|
-
end
|
|
148
|
-
probcount = 0
|
|
149
|
-
filecount = 0
|
|
150
|
-
files.each do |file|
|
|
151
|
-
checker = TypeChecker.new(file, api_map: api_map, level: options[:level].to_sym)
|
|
152
|
-
problems = checker.problems
|
|
153
|
-
next if problems.empty?
|
|
154
|
-
problems.sort! { |a, b| a.location.range.start.line <=> b.location.range.start.line }
|
|
155
|
-
puts problems.map { |prob| "#{prob.location.filename}:#{prob.location.range.start.line + 1} - #{prob.message}" }.join("\n")
|
|
156
|
-
filecount += 1
|
|
157
|
-
probcount += problems.length
|
|
158
|
-
end
|
|
159
|
-
puts "#{probcount} problem#{probcount != 1 ? 's' : ''} found#{files.length != 1 ? " in #{filecount} of #{files.length} files" : ''}."
|
|
160
|
-
exit 1 if probcount > 0
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
desc 'scan', 'Test the workspace for problems'
|
|
164
|
-
long_desc %(
|
|
165
|
-
A scan loads the entire workspace to make sure that the ASTs and
|
|
166
|
-
maps do not raise errors during analysis. It does not perform any type
|
|
167
|
-
checking or validation; it only confirms that the analysis itself is
|
|
168
|
-
error-free.
|
|
169
|
-
)
|
|
170
|
-
option :directory, type: :string, aliases: :d, desc: 'The workspace directory', default: '.'
|
|
171
|
-
option :verbose, type: :boolean, aliases: :v, desc: 'Verbose output', default: false
|
|
172
|
-
def scan
|
|
173
|
-
require 'benchmark'
|
|
174
|
-
directory = File.realpath(options[:directory])
|
|
175
|
-
api_map = nil
|
|
176
|
-
time = Benchmark.measure {
|
|
177
|
-
api_map = Solargraph::ApiMap.load(directory)
|
|
178
|
-
api_map.pins.each do |pin|
|
|
179
|
-
begin
|
|
180
|
-
puts pin_description(pin) if options[:verbose]
|
|
181
|
-
pin.typify api_map
|
|
182
|
-
pin.probe api_map
|
|
183
|
-
rescue StandardError => e
|
|
184
|
-
STDERR.puts "Error testing #{pin_description(pin)} #{pin.location ? "at #{pin.location.filename}:#{pin.location.range.start.line + 1}" : ''}"
|
|
185
|
-
STDERR.puts "[#{e.class}]: #{e.message}"
|
|
186
|
-
STDERR.puts e.backtrace.join("\n")
|
|
187
|
-
exit 1
|
|
188
|
-
end
|
|
189
|
-
end
|
|
190
|
-
}
|
|
191
|
-
puts "Scanned #{directory} (#{api_map.pins.length} pins) in #{time.real} seconds."
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
desc 'bundle', 'Generate documentation for bundled gems'
|
|
195
|
-
option :directory, type: :string, aliases: :d, desc: 'The workspace directory', default: '.'
|
|
196
|
-
option :rebuild, type: :boolean, aliases: :r, desc: 'Rebuild existing documentation', default: false
|
|
197
|
-
def bundle
|
|
198
|
-
Documentor.new(options[:directory], rebuild: options[:rebuild], out: STDOUT).document
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
desc 'rdoc GEM [VERSION]', 'Use RDoc to cache documentation'
|
|
202
|
-
def rdoc gem, version = '>= 0'
|
|
203
|
-
spec = Gem::Specification.find_by_name(gem, version)
|
|
204
|
-
puts "Caching #{spec.name} #{spec.version} from RDoc"
|
|
205
|
-
Solargraph::YardMap::RdocToYard.run(spec)
|
|
206
|
-
end
|
|
207
|
-
|
|
208
|
-
private
|
|
209
|
-
|
|
210
|
-
# @param pin [Solargraph::Pin::Base]
|
|
211
|
-
# @return [String]
|
|
212
|
-
def pin_description pin
|
|
213
|
-
desc = if pin.path.nil? || pin.path.empty?
|
|
214
|
-
if pin.closure
|
|
215
|
-
"#{pin.closure.path} | #{pin.name}"
|
|
216
|
-
else
|
|
217
|
-
"#{pin.context.namespace} | #{pin.name}"
|
|
218
|
-
end
|
|
219
|
-
else
|
|
220
|
-
pin.path
|
|
221
|
-
end
|
|
222
|
-
desc += " (#{pin.location.filename} #{pin.location.range.start.line})" if pin.location
|
|
223
|
-
desc
|
|
224
|
-
end
|
|
225
|
-
end
|
|
226
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'thor'
|
|
4
|
+
|
|
5
|
+
module Solargraph
|
|
6
|
+
class Shell < Thor
|
|
7
|
+
include Solargraph::ServerMethods
|
|
8
|
+
|
|
9
|
+
map %w[--version -v] => :version
|
|
10
|
+
|
|
11
|
+
desc "--version, -v", "Print the version"
|
|
12
|
+
def version
|
|
13
|
+
puts Solargraph::VERSION
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
desc 'socket', 'Run a Solargraph socket server'
|
|
17
|
+
option :host, type: :string, aliases: :h, desc: 'The server host', default: '127.0.0.1'
|
|
18
|
+
option :port, type: :numeric, aliases: :p, desc: 'The server port', default: 7658
|
|
19
|
+
def socket
|
|
20
|
+
require 'backport'
|
|
21
|
+
port = options[:port]
|
|
22
|
+
port = available_port if port.zero?
|
|
23
|
+
Backport.run do
|
|
24
|
+
Signal.trap("INT") do
|
|
25
|
+
Backport.stop
|
|
26
|
+
end
|
|
27
|
+
Signal.trap("TERM") do
|
|
28
|
+
Backport.stop
|
|
29
|
+
end
|
|
30
|
+
Backport.prepare_tcp_server host: options[:host], port: port, adapter: Solargraph::LanguageServer::Transport::Adapter
|
|
31
|
+
STDERR.puts "Solargraph is listening PORT=#{port} PID=#{Process.pid}"
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
desc 'stdio', 'Run a Solargraph stdio server'
|
|
36
|
+
def stdio
|
|
37
|
+
require 'backport'
|
|
38
|
+
Backport.run do
|
|
39
|
+
Signal.trap("INT") do
|
|
40
|
+
Backport.stop
|
|
41
|
+
end
|
|
42
|
+
Signal.trap("TERM") do
|
|
43
|
+
Backport.stop
|
|
44
|
+
end
|
|
45
|
+
Backport.prepare_stdio_server adapter: Solargraph::LanguageServer::Transport::Adapter
|
|
46
|
+
STDERR.puts "Solargraph is listening on stdio PID=#{Process.pid}"
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
desc 'config [DIRECTORY]', 'Create or overwrite a default configuration file'
|
|
51
|
+
option :extensions, type: :boolean, aliases: :e, desc: 'Add installed extensions', default: true
|
|
52
|
+
def config(directory = '.')
|
|
53
|
+
matches = []
|
|
54
|
+
if options[:extensions]
|
|
55
|
+
Gem::Specification.each do |g|
|
|
56
|
+
if g.name.match(/^solargraph\-[A-Za-z0-9_\-]*?\-ext/)
|
|
57
|
+
require g.name
|
|
58
|
+
matches.push g.name
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
conf = Solargraph::Workspace::Config.new.raw_data
|
|
63
|
+
unless matches.empty?
|
|
64
|
+
matches.each do |m|
|
|
65
|
+
conf['extensions'].push m
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
File.open(File.join(directory, '.solargraph.yml'), 'w') do |file|
|
|
69
|
+
file.puts conf.to_yaml
|
|
70
|
+
end
|
|
71
|
+
STDOUT.puts "Configuration file initialized."
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
desc 'download-core [VERSION]', 'Download core documentation'
|
|
75
|
+
def download_core version = nil
|
|
76
|
+
ver = version || Solargraph::YardMap::CoreDocs.best_download
|
|
77
|
+
if RUBY_VERSION != ver
|
|
78
|
+
puts "Documentation for #{RUBY_VERSION} is not available. Reverting to closest match..."
|
|
79
|
+
end
|
|
80
|
+
puts "Downloading docs for #{ver}..."
|
|
81
|
+
Solargraph::YardMap::CoreDocs.download ver
|
|
82
|
+
# Clear cached documentation if it exists
|
|
83
|
+
FileUtils.rm_rf Dir.glob(File.join(Solargraph::YardMap::CoreDocs.cache_dir, ver, '*.ser'))
|
|
84
|
+
puts "Download complete."
|
|
85
|
+
rescue ArgumentError => e
|
|
86
|
+
STDERR.puts "ERROR: #{e.message}"
|
|
87
|
+
STDERR.puts "Run `solargraph available-cores` for a list."
|
|
88
|
+
exit 1
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
desc 'list-cores', 'List the local documentation versions'
|
|
92
|
+
def list_cores
|
|
93
|
+
puts Solargraph::YardMap::CoreDocs.versions.join("\n")
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
desc 'available-cores', 'List available documentation versions'
|
|
97
|
+
def available_cores
|
|
98
|
+
puts Solargraph::YardMap::CoreDocs.available.join("\n")
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
desc 'clear', 'Delete all cached documentation'
|
|
102
|
+
long_desc %(
|
|
103
|
+
This command will delete all core and gem documentation from the cache.
|
|
104
|
+
You can also delete specific gem caches with the `uncache` command or
|
|
105
|
+
update documentation for specific Ruby versions with the `download-core`
|
|
106
|
+
command.
|
|
107
|
+
)
|
|
108
|
+
def clear
|
|
109
|
+
puts "Deleting the cached documentation"
|
|
110
|
+
Solargraph::YardMap::CoreDocs.clear
|
|
111
|
+
end
|
|
112
|
+
map 'clear-cache' => :clear
|
|
113
|
+
map 'clear-cores' => :clear
|
|
114
|
+
|
|
115
|
+
desc 'uncache GEM [...GEM]', "Delete cached gem documentation"
|
|
116
|
+
def uncache *gems
|
|
117
|
+
raise ArgumentError, 'No gems specified.' if gems.empty?
|
|
118
|
+
gems.each do |gem|
|
|
119
|
+
Dir[File.join(Solargraph::YardMap::CoreDocs.cache_dir, 'gems', "#{gem}-*")].each do |dir|
|
|
120
|
+
puts "Deleting cache: #{dir}"
|
|
121
|
+
FileUtils.remove_entry_secure dir
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
desc 'reporters', 'Get a list of diagnostics reporters'
|
|
127
|
+
def reporters
|
|
128
|
+
puts Solargraph::Diagnostics.reporters
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
desc 'typecheck [FILE(s)]', 'Run the type checker'
|
|
132
|
+
long_desc %(
|
|
133
|
+
Perform type checking on one or more files in a workspace. Check the
|
|
134
|
+
entire workspace if no files are specified.
|
|
135
|
+
|
|
136
|
+
Type checking levels are normal, typed, strict, and strong.
|
|
137
|
+
)
|
|
138
|
+
option :level, type: :string, aliases: [:mode, :m, :l], desc: 'Type checking level', default: 'normal'
|
|
139
|
+
option :directory, type: :string, aliases: :d, desc: 'The workspace directory', default: '.'
|
|
140
|
+
def typecheck *files
|
|
141
|
+
directory = File.realpath(options[:directory])
|
|
142
|
+
api_map = Solargraph::ApiMap.load(directory)
|
|
143
|
+
if files.empty?
|
|
144
|
+
files = api_map.source_maps.map(&:filename)
|
|
145
|
+
else
|
|
146
|
+
files.map! { |file| File.realpath(file) }
|
|
147
|
+
end
|
|
148
|
+
probcount = 0
|
|
149
|
+
filecount = 0
|
|
150
|
+
files.each do |file|
|
|
151
|
+
checker = TypeChecker.new(file, api_map: api_map, level: options[:level].to_sym)
|
|
152
|
+
problems = checker.problems
|
|
153
|
+
next if problems.empty?
|
|
154
|
+
problems.sort! { |a, b| a.location.range.start.line <=> b.location.range.start.line }
|
|
155
|
+
puts problems.map { |prob| "#{prob.location.filename}:#{prob.location.range.start.line + 1} - #{prob.message}" }.join("\n")
|
|
156
|
+
filecount += 1
|
|
157
|
+
probcount += problems.length
|
|
158
|
+
end
|
|
159
|
+
puts "#{probcount} problem#{probcount != 1 ? 's' : ''} found#{files.length != 1 ? " in #{filecount} of #{files.length} files" : ''}."
|
|
160
|
+
exit 1 if probcount > 0
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
desc 'scan', 'Test the workspace for problems'
|
|
164
|
+
long_desc %(
|
|
165
|
+
A scan loads the entire workspace to make sure that the ASTs and
|
|
166
|
+
maps do not raise errors during analysis. It does not perform any type
|
|
167
|
+
checking or validation; it only confirms that the analysis itself is
|
|
168
|
+
error-free.
|
|
169
|
+
)
|
|
170
|
+
option :directory, type: :string, aliases: :d, desc: 'The workspace directory', default: '.'
|
|
171
|
+
option :verbose, type: :boolean, aliases: :v, desc: 'Verbose output', default: false
|
|
172
|
+
def scan
|
|
173
|
+
require 'benchmark'
|
|
174
|
+
directory = File.realpath(options[:directory])
|
|
175
|
+
api_map = nil
|
|
176
|
+
time = Benchmark.measure {
|
|
177
|
+
api_map = Solargraph::ApiMap.load(directory)
|
|
178
|
+
api_map.pins.each do |pin|
|
|
179
|
+
begin
|
|
180
|
+
puts pin_description(pin) if options[:verbose]
|
|
181
|
+
pin.typify api_map
|
|
182
|
+
pin.probe api_map
|
|
183
|
+
rescue StandardError => e
|
|
184
|
+
STDERR.puts "Error testing #{pin_description(pin)} #{pin.location ? "at #{pin.location.filename}:#{pin.location.range.start.line + 1}" : ''}"
|
|
185
|
+
STDERR.puts "[#{e.class}]: #{e.message}"
|
|
186
|
+
STDERR.puts e.backtrace.join("\n")
|
|
187
|
+
exit 1
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
}
|
|
191
|
+
puts "Scanned #{directory} (#{api_map.pins.length} pins) in #{time.real} seconds."
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
desc 'bundle', 'Generate documentation for bundled gems'
|
|
195
|
+
option :directory, type: :string, aliases: :d, desc: 'The workspace directory', default: '.'
|
|
196
|
+
option :rebuild, type: :boolean, aliases: :r, desc: 'Rebuild existing documentation', default: false
|
|
197
|
+
def bundle
|
|
198
|
+
Documentor.new(options[:directory], rebuild: options[:rebuild], out: STDOUT).document
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
desc 'rdoc GEM [VERSION]', 'Use RDoc to cache documentation'
|
|
202
|
+
def rdoc gem, version = '>= 0'
|
|
203
|
+
spec = Gem::Specification.find_by_name(gem, version)
|
|
204
|
+
puts "Caching #{spec.name} #{spec.version} from RDoc"
|
|
205
|
+
Solargraph::YardMap::RdocToYard.run(spec)
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
private
|
|
209
|
+
|
|
210
|
+
# @param pin [Solargraph::Pin::Base]
|
|
211
|
+
# @return [String]
|
|
212
|
+
def pin_description pin
|
|
213
|
+
desc = if pin.path.nil? || pin.path.empty?
|
|
214
|
+
if pin.closure
|
|
215
|
+
"#{pin.closure.path} | #{pin.name}"
|
|
216
|
+
else
|
|
217
|
+
"#{pin.context.namespace} | #{pin.name}"
|
|
218
|
+
end
|
|
219
|
+
else
|
|
220
|
+
pin.path
|
|
221
|
+
end
|
|
222
|
+
desc += " (#{pin.location.filename} #{pin.location.range.start.line})" if pin.location
|
|
223
|
+
desc
|
|
224
|
+
end
|
|
225
|
+
end
|
|
226
|
+
end
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
class Source
|
|
5
|
-
class Chain
|
|
6
|
-
class BlockVariable < Link
|
|
7
|
-
def resolve api_map, name_pin, locals
|
|
8
|
-
[Pin::ProxyType.anonymous(ComplexType.try_parse('Proc'))]
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
class Source
|
|
5
|
+
class Chain
|
|
6
|
+
class BlockVariable < Link
|
|
7
|
+
def resolve api_map, name_pin, locals
|
|
8
|
+
[Pin::ProxyType.anonymous(ComplexType.try_parse('Proc'))]
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|