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/version.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
VERSION = '0.
|
|
5
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
VERSION = '0.46.0'
|
|
5
|
+
end
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
<html>
|
|
2
|
-
<head>
|
|
3
|
-
<title>Solargraph Environment</title>
|
|
4
|
-
</head>
|
|
5
|
-
<h1>
|
|
6
|
-
Solargraph Environment Info
|
|
7
|
-
</h1>
|
|
8
|
-
<h2>
|
|
9
|
-
System
|
|
10
|
-
</h2>
|
|
11
|
-
<ul>
|
|
12
|
-
<li>
|
|
13
|
-
Platform: <%= RUBY_PLATFORM %>
|
|
14
|
-
</li>
|
|
15
|
-
<li>
|
|
16
|
-
Shell: <%= ENV['SHELL'] %>
|
|
17
|
-
</li>
|
|
18
|
-
<li>
|
|
19
|
-
Ruby Version: <%= RUBY_VERSION %>
|
|
20
|
-
</li>
|
|
21
|
-
<li>
|
|
22
|
-
RuboCop Version: <%= RuboCop::Version::STRING %>
|
|
23
|
-
</li>
|
|
24
|
-
</ul>
|
|
25
|
-
<h2>
|
|
26
|
-
Solargraph
|
|
27
|
-
</h2>
|
|
28
|
-
<ul>
|
|
29
|
-
<li>
|
|
30
|
-
Solargraph Version: <%= Solargraph::VERSION %>
|
|
31
|
-
</li>
|
|
32
|
-
<li>
|
|
33
|
-
Core Documentation Version: <%= Solargraph::YardMap::CoreDocs.best_match %>
|
|
34
|
-
</li>
|
|
35
|
-
<li>
|
|
36
|
-
Core Cache Directory: <%= Solargraph::YardMap::CoreDocs.cache_dir %>
|
|
37
|
-
</li>
|
|
38
|
-
<% unless Solargraph::Parser.rubyvm? %>
|
|
39
|
-
<li>
|
|
40
|
-
Parser Target Version: <%= Solargraph::Parser.version %>
|
|
41
|
-
</li>
|
|
42
|
-
<% end %>
|
|
43
|
-
<li>
|
|
44
|
-
Using Bundler: <%= ENV.key?('BUNDLE_BIN_PATH') %>
|
|
45
|
-
</li>
|
|
46
|
-
</ul>
|
|
47
|
-
<h2>
|
|
48
|
-
Project
|
|
49
|
-
</h2>
|
|
50
|
-
<ul>
|
|
51
|
-
<li>
|
|
52
|
-
Config: <%= config %>
|
|
53
|
-
</li>
|
|
54
|
-
<li>
|
|
55
|
-
Workspace folders: <%= folders %>
|
|
56
|
-
</li>
|
|
57
|
-
</ul>
|
|
58
|
-
</html>
|
|
1
|
+
<html>
|
|
2
|
+
<head>
|
|
3
|
+
<title>Solargraph Environment</title>
|
|
4
|
+
</head>
|
|
5
|
+
<h1>
|
|
6
|
+
Solargraph Environment Info
|
|
7
|
+
</h1>
|
|
8
|
+
<h2>
|
|
9
|
+
System
|
|
10
|
+
</h2>
|
|
11
|
+
<ul>
|
|
12
|
+
<li>
|
|
13
|
+
Platform: <%= RUBY_PLATFORM %>
|
|
14
|
+
</li>
|
|
15
|
+
<li>
|
|
16
|
+
Shell: <%= ENV['SHELL'] %>
|
|
17
|
+
</li>
|
|
18
|
+
<li>
|
|
19
|
+
Ruby Version: <%= RUBY_VERSION %>
|
|
20
|
+
</li>
|
|
21
|
+
<li>
|
|
22
|
+
RuboCop Version: <%= RuboCop::Version::STRING %>
|
|
23
|
+
</li>
|
|
24
|
+
</ul>
|
|
25
|
+
<h2>
|
|
26
|
+
Solargraph
|
|
27
|
+
</h2>
|
|
28
|
+
<ul>
|
|
29
|
+
<li>
|
|
30
|
+
Solargraph Version: <%= Solargraph::VERSION %>
|
|
31
|
+
</li>
|
|
32
|
+
<li>
|
|
33
|
+
Core Documentation Version: <%= Solargraph::YardMap::CoreDocs.best_match %>
|
|
34
|
+
</li>
|
|
35
|
+
<li>
|
|
36
|
+
Core Cache Directory: <%= Solargraph::YardMap::CoreDocs.cache_dir %>
|
|
37
|
+
</li>
|
|
38
|
+
<% unless Solargraph::Parser.rubyvm? %>
|
|
39
|
+
<li>
|
|
40
|
+
Parser Target Version: <%= Solargraph::Parser.version %>
|
|
41
|
+
</li>
|
|
42
|
+
<% end %>
|
|
43
|
+
<li>
|
|
44
|
+
Using Bundler: <%= ENV.key?('BUNDLE_BIN_PATH') %>
|
|
45
|
+
</li>
|
|
46
|
+
</ul>
|
|
47
|
+
<h2>
|
|
48
|
+
Project
|
|
49
|
+
</h2>
|
|
50
|
+
<ul>
|
|
51
|
+
<li>
|
|
52
|
+
Config: <%= config %>
|
|
53
|
+
</li>
|
|
54
|
+
<li>
|
|
55
|
+
Workspace folders: <%= folders %>
|
|
56
|
+
</li>
|
|
57
|
+
</ul>
|
|
58
|
+
</html>
|
|
@@ -1,231 +1,231 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'yaml'
|
|
4
|
-
|
|
5
|
-
module Solargraph
|
|
6
|
-
class Workspace
|
|
7
|
-
# Configuration data for a workspace.
|
|
8
|
-
#
|
|
9
|
-
class Config
|
|
10
|
-
# The maximum number of files that can be added to a workspace.
|
|
11
|
-
# The workspace's .solargraph.yml can override this value.
|
|
12
|
-
MAX_FILES = 5000
|
|
13
|
-
|
|
14
|
-
# @return [String]
|
|
15
|
-
attr_reader :directory
|
|
16
|
-
|
|
17
|
-
# @return [Hash]
|
|
18
|
-
attr_reader :raw_data
|
|
19
|
-
|
|
20
|
-
# @param directory [String]
|
|
21
|
-
def initialize directory = ''
|
|
22
|
-
@directory = directory
|
|
23
|
-
@raw_data = config_data
|
|
24
|
-
included
|
|
25
|
-
excluded
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# An array of files included in the workspace (before calculating excluded files).
|
|
29
|
-
#
|
|
30
|
-
# @return [Array<String>]
|
|
31
|
-
def included
|
|
32
|
-
return [] if directory.empty? || directory == '*'
|
|
33
|
-
@included ||= process_globs(@raw_data['include'])
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# An array of files excluded from the workspace.
|
|
37
|
-
#
|
|
38
|
-
# @return [Array<String>]
|
|
39
|
-
def excluded
|
|
40
|
-
return [] if directory.empty? || directory == '*'
|
|
41
|
-
@excluded ||= process_exclusions(@raw_data['exclude'])
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def allow? filename
|
|
45
|
-
filename.start_with?(directory) &&
|
|
46
|
-
!excluded.include?(filename) &&
|
|
47
|
-
excluded_directories.none? { |d| filename.start_with?(d) }
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# The calculated array of (included - excluded) files in the workspace.
|
|
51
|
-
#
|
|
52
|
-
# @return [Array<String>]
|
|
53
|
-
def calculated
|
|
54
|
-
Solargraph.logger.info "Indexing workspace files in #{directory}" unless @calculated || directory.empty? || directory == '*'
|
|
55
|
-
@calculated ||= included - excluded
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# An array of domains configured for the workspace.
|
|
59
|
-
# A domain is a namespace that the ApiMap should include in the global
|
|
60
|
-
# namespace. It's typically used to identify available DSLs.
|
|
61
|
-
#
|
|
62
|
-
# @return [Array<String>]
|
|
63
|
-
def domains
|
|
64
|
-
raw_data['domains']
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
# An array of required paths to add to the workspace.
|
|
68
|
-
#
|
|
69
|
-
# @return [Array<String>]
|
|
70
|
-
def required
|
|
71
|
-
raw_data['require']
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# An array of load paths for required paths.
|
|
75
|
-
#
|
|
76
|
-
# @return [Array<String>]
|
|
77
|
-
def require_paths
|
|
78
|
-
raw_data['require_paths'] || []
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# An array of reporters to use for diagnostics.
|
|
82
|
-
#
|
|
83
|
-
# @return [Array<String>]
|
|
84
|
-
def reporters
|
|
85
|
-
raw_data['reporters']
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
# A hash of options supported by the formatter
|
|
89
|
-
#
|
|
90
|
-
# @return [Hash]
|
|
91
|
-
def formatter
|
|
92
|
-
raw_data['formatter']
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
# An array of plugins to require.
|
|
96
|
-
#
|
|
97
|
-
# @return [Array<String>]
|
|
98
|
-
def plugins
|
|
99
|
-
raw_data['plugins']
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
# The maximum number of files to parse from the workspace.
|
|
103
|
-
#
|
|
104
|
-
# @return [Integer]
|
|
105
|
-
def max_files
|
|
106
|
-
raw_data['max_files']
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
private
|
|
110
|
-
|
|
111
|
-
# @return [String]
|
|
112
|
-
def global_config_path
|
|
113
|
-
ENV['SOLARGRAPH_GLOBAL_CONFIG'] ||
|
|
114
|
-
File.join(Dir.home, '.config', 'solargraph', 'config.yml')
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# @return [String]
|
|
118
|
-
def workspace_config_path
|
|
119
|
-
return '' if @directory.empty?
|
|
120
|
-
File.join(@directory, '.solargraph.yml')
|
|
121
|
-
end
|
|
122
|
-
|
|
123
|
-
# @return [Hash]
|
|
124
|
-
def config_data
|
|
125
|
-
workspace_config = read_config(workspace_config_path)
|
|
126
|
-
global_config = read_config(global_config_path)
|
|
127
|
-
|
|
128
|
-
defaults = default_config
|
|
129
|
-
defaults.merge({'exclude' => []}) unless workspace_config.nil?
|
|
130
|
-
|
|
131
|
-
defaults
|
|
132
|
-
.merge(global_config || {})
|
|
133
|
-
.merge(workspace_config || {})
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
# Read a .solargraph yaml config
|
|
137
|
-
#
|
|
138
|
-
# @param directory [String]
|
|
139
|
-
# @return [Hash, nil]
|
|
140
|
-
def read_config config_path = ''
|
|
141
|
-
return nil if config_path.empty?
|
|
142
|
-
return nil unless File.file?(config_path)
|
|
143
|
-
YAML.safe_load(File.read(config_path))
|
|
144
|
-
end
|
|
145
|
-
|
|
146
|
-
# @return [Hash]
|
|
147
|
-
def default_config
|
|
148
|
-
{
|
|
149
|
-
'include' => ['**/*.rb'],
|
|
150
|
-
'exclude' => ['spec/**/*', 'test/**/*', 'vendor/**/*', '.bundle/**/*'],
|
|
151
|
-
'require' => [],
|
|
152
|
-
'domains' => [],
|
|
153
|
-
'reporters' => %w[rubocop require_not_found],
|
|
154
|
-
'formatter' => {
|
|
155
|
-
'rubocop' => {
|
|
156
|
-
'cops' => 'safe',
|
|
157
|
-
'except' => [],
|
|
158
|
-
'only' => [],
|
|
159
|
-
'extra_args' =>[]
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
'require_paths' => [],
|
|
163
|
-
'plugins' => [],
|
|
164
|
-
'max_files' => MAX_FILES
|
|
165
|
-
}
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
# Get an array of files from the provided globs.
|
|
169
|
-
#
|
|
170
|
-
# @param globs [Array<String>]
|
|
171
|
-
# @return [Array<String>]
|
|
172
|
-
def process_globs globs
|
|
173
|
-
result = globs.flat_map do |glob|
|
|
174
|
-
Dir[File.join directory, glob]
|
|
175
|
-
.map{ |f| f.gsub(/\\/, '/') }
|
|
176
|
-
.select { |f| File.file?(f) }
|
|
177
|
-
end
|
|
178
|
-
result
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
# Modify the included files based on excluded directories and get an
|
|
182
|
-
# array of additional files to exclude.
|
|
183
|
-
#
|
|
184
|
-
# @param globs [Array<String>]
|
|
185
|
-
# @return [Array<String>]
|
|
186
|
-
def process_exclusions globs
|
|
187
|
-
remainder = globs.select do |glob|
|
|
188
|
-
if glob_is_directory?(glob)
|
|
189
|
-
exdir = File.join(directory, glob_to_directory(glob))
|
|
190
|
-
included.delete_if { |file| file.start_with?(exdir) }
|
|
191
|
-
false
|
|
192
|
-
else
|
|
193
|
-
true
|
|
194
|
-
end
|
|
195
|
-
end
|
|
196
|
-
process_globs remainder
|
|
197
|
-
end
|
|
198
|
-
|
|
199
|
-
# True if the glob translates to a whole directory.
|
|
200
|
-
#
|
|
201
|
-
# @example
|
|
202
|
-
# glob_is_directory?('path/to/dir') # => true
|
|
203
|
-
# glob_is_directory?('path/to/dir/**/*) # => true
|
|
204
|
-
# glob_is_directory?('path/to/file.txt') # => false
|
|
205
|
-
# glob_is_directory?('path/to/*.txt') # => false
|
|
206
|
-
#
|
|
207
|
-
# @param glob [String]
|
|
208
|
-
# @return [Boolean]
|
|
209
|
-
def glob_is_directory? glob
|
|
210
|
-
File.directory?(glob) || File.directory?(glob_to_directory(glob))
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
# Translate a glob to a base directory if applicable
|
|
214
|
-
#
|
|
215
|
-
# @example
|
|
216
|
-
# glob_to_directory('path/to/dir/**/*') # => 'path/to/dir'
|
|
217
|
-
#
|
|
218
|
-
# @param glob [String]
|
|
219
|
-
# @return [String]
|
|
220
|
-
def glob_to_directory glob
|
|
221
|
-
glob.gsub(/(\/\*|\/\*\*\/\*\*?)$/, '')
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
def excluded_directories
|
|
225
|
-
@raw_data['exclude']
|
|
226
|
-
.select { |g| glob_is_directory?(g) }
|
|
227
|
-
.map { |g| File.join(directory, glob_to_directory(g)) }
|
|
228
|
-
end
|
|
229
|
-
end
|
|
230
|
-
end
|
|
231
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'yaml'
|
|
4
|
+
|
|
5
|
+
module Solargraph
|
|
6
|
+
class Workspace
|
|
7
|
+
# Configuration data for a workspace.
|
|
8
|
+
#
|
|
9
|
+
class Config
|
|
10
|
+
# The maximum number of files that can be added to a workspace.
|
|
11
|
+
# The workspace's .solargraph.yml can override this value.
|
|
12
|
+
MAX_FILES = 5000
|
|
13
|
+
|
|
14
|
+
# @return [String]
|
|
15
|
+
attr_reader :directory
|
|
16
|
+
|
|
17
|
+
# @return [Hash]
|
|
18
|
+
attr_reader :raw_data
|
|
19
|
+
|
|
20
|
+
# @param directory [String]
|
|
21
|
+
def initialize directory = ''
|
|
22
|
+
@directory = directory
|
|
23
|
+
@raw_data = config_data
|
|
24
|
+
included
|
|
25
|
+
excluded
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# An array of files included in the workspace (before calculating excluded files).
|
|
29
|
+
#
|
|
30
|
+
# @return [Array<String>]
|
|
31
|
+
def included
|
|
32
|
+
return [] if directory.empty? || directory == '*'
|
|
33
|
+
@included ||= process_globs(@raw_data['include'])
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# An array of files excluded from the workspace.
|
|
37
|
+
#
|
|
38
|
+
# @return [Array<String>]
|
|
39
|
+
def excluded
|
|
40
|
+
return [] if directory.empty? || directory == '*'
|
|
41
|
+
@excluded ||= process_exclusions(@raw_data['exclude'])
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def allow? filename
|
|
45
|
+
filename.start_with?(directory) &&
|
|
46
|
+
!excluded.include?(filename) &&
|
|
47
|
+
excluded_directories.none? { |d| filename.start_with?(d) }
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# The calculated array of (included - excluded) files in the workspace.
|
|
51
|
+
#
|
|
52
|
+
# @return [Array<String>]
|
|
53
|
+
def calculated
|
|
54
|
+
Solargraph.logger.info "Indexing workspace files in #{directory}" unless @calculated || directory.empty? || directory == '*'
|
|
55
|
+
@calculated ||= included - excluded
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# An array of domains configured for the workspace.
|
|
59
|
+
# A domain is a namespace that the ApiMap should include in the global
|
|
60
|
+
# namespace. It's typically used to identify available DSLs.
|
|
61
|
+
#
|
|
62
|
+
# @return [Array<String>]
|
|
63
|
+
def domains
|
|
64
|
+
raw_data['domains']
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# An array of required paths to add to the workspace.
|
|
68
|
+
#
|
|
69
|
+
# @return [Array<String>]
|
|
70
|
+
def required
|
|
71
|
+
raw_data['require']
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# An array of load paths for required paths.
|
|
75
|
+
#
|
|
76
|
+
# @return [Array<String>]
|
|
77
|
+
def require_paths
|
|
78
|
+
raw_data['require_paths'] || []
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# An array of reporters to use for diagnostics.
|
|
82
|
+
#
|
|
83
|
+
# @return [Array<String>]
|
|
84
|
+
def reporters
|
|
85
|
+
raw_data['reporters']
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# A hash of options supported by the formatter
|
|
89
|
+
#
|
|
90
|
+
# @return [Hash]
|
|
91
|
+
def formatter
|
|
92
|
+
raw_data['formatter']
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# An array of plugins to require.
|
|
96
|
+
#
|
|
97
|
+
# @return [Array<String>]
|
|
98
|
+
def plugins
|
|
99
|
+
raw_data['plugins']
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# The maximum number of files to parse from the workspace.
|
|
103
|
+
#
|
|
104
|
+
# @return [Integer]
|
|
105
|
+
def max_files
|
|
106
|
+
raw_data['max_files']
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
private
|
|
110
|
+
|
|
111
|
+
# @return [String]
|
|
112
|
+
def global_config_path
|
|
113
|
+
ENV['SOLARGRAPH_GLOBAL_CONFIG'] ||
|
|
114
|
+
File.join(Dir.home, '.config', 'solargraph', 'config.yml')
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# @return [String]
|
|
118
|
+
def workspace_config_path
|
|
119
|
+
return '' if @directory.empty?
|
|
120
|
+
File.join(@directory, '.solargraph.yml')
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# @return [Hash]
|
|
124
|
+
def config_data
|
|
125
|
+
workspace_config = read_config(workspace_config_path)
|
|
126
|
+
global_config = read_config(global_config_path)
|
|
127
|
+
|
|
128
|
+
defaults = default_config
|
|
129
|
+
defaults.merge({'exclude' => []}) unless workspace_config.nil?
|
|
130
|
+
|
|
131
|
+
defaults
|
|
132
|
+
.merge(global_config || {})
|
|
133
|
+
.merge(workspace_config || {})
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Read a .solargraph yaml config
|
|
137
|
+
#
|
|
138
|
+
# @param directory [String]
|
|
139
|
+
# @return [Hash, nil]
|
|
140
|
+
def read_config config_path = ''
|
|
141
|
+
return nil if config_path.empty?
|
|
142
|
+
return nil unless File.file?(config_path)
|
|
143
|
+
YAML.safe_load(File.read(config_path))
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# @return [Hash]
|
|
147
|
+
def default_config
|
|
148
|
+
{
|
|
149
|
+
'include' => ['**/*.rb'],
|
|
150
|
+
'exclude' => ['spec/**/*', 'test/**/*', 'vendor/**/*', '.bundle/**/*'],
|
|
151
|
+
'require' => [],
|
|
152
|
+
'domains' => [],
|
|
153
|
+
'reporters' => %w[rubocop require_not_found],
|
|
154
|
+
'formatter' => {
|
|
155
|
+
'rubocop' => {
|
|
156
|
+
'cops' => 'safe',
|
|
157
|
+
'except' => [],
|
|
158
|
+
'only' => [],
|
|
159
|
+
'extra_args' =>[]
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
'require_paths' => [],
|
|
163
|
+
'plugins' => [],
|
|
164
|
+
'max_files' => MAX_FILES
|
|
165
|
+
}
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Get an array of files from the provided globs.
|
|
169
|
+
#
|
|
170
|
+
# @param globs [Array<String>]
|
|
171
|
+
# @return [Array<String>]
|
|
172
|
+
def process_globs globs
|
|
173
|
+
result = globs.flat_map do |glob|
|
|
174
|
+
Dir[File.join directory, glob]
|
|
175
|
+
.map{ |f| f.gsub(/\\/, '/') }
|
|
176
|
+
.select { |f| File.file?(f) }
|
|
177
|
+
end
|
|
178
|
+
result
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# Modify the included files based on excluded directories and get an
|
|
182
|
+
# array of additional files to exclude.
|
|
183
|
+
#
|
|
184
|
+
# @param globs [Array<String>]
|
|
185
|
+
# @return [Array<String>]
|
|
186
|
+
def process_exclusions globs
|
|
187
|
+
remainder = globs.select do |glob|
|
|
188
|
+
if glob_is_directory?(glob)
|
|
189
|
+
exdir = File.join(directory, glob_to_directory(glob))
|
|
190
|
+
included.delete_if { |file| file.start_with?(exdir) }
|
|
191
|
+
false
|
|
192
|
+
else
|
|
193
|
+
true
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
process_globs remainder
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# True if the glob translates to a whole directory.
|
|
200
|
+
#
|
|
201
|
+
# @example
|
|
202
|
+
# glob_is_directory?('path/to/dir') # => true
|
|
203
|
+
# glob_is_directory?('path/to/dir/**/*) # => true
|
|
204
|
+
# glob_is_directory?('path/to/file.txt') # => false
|
|
205
|
+
# glob_is_directory?('path/to/*.txt') # => false
|
|
206
|
+
#
|
|
207
|
+
# @param glob [String]
|
|
208
|
+
# @return [Boolean]
|
|
209
|
+
def glob_is_directory? glob
|
|
210
|
+
File.directory?(glob) || File.directory?(glob_to_directory(glob))
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
# Translate a glob to a base directory if applicable
|
|
214
|
+
#
|
|
215
|
+
# @example
|
|
216
|
+
# glob_to_directory('path/to/dir/**/*') # => 'path/to/dir'
|
|
217
|
+
#
|
|
218
|
+
# @param glob [String]
|
|
219
|
+
# @return [String]
|
|
220
|
+
def glob_to_directory glob
|
|
221
|
+
glob.gsub(/(\/\*|\/\*\*\/\*\*?)$/, '')
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def excluded_directories
|
|
225
|
+
@raw_data['exclude']
|
|
226
|
+
.select { |g| glob_is_directory?(g) }
|
|
227
|
+
.map { |g| File.join(directory, glob_to_directory(g)) }
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
231
|
+
end
|