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
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'set'
|
|
4
|
-
|
|
5
|
-
module Solargraph
|
|
6
|
-
# Conventions provide a way to modify an ApiMap based on expectations about
|
|
7
|
-
# one of its sources.
|
|
8
|
-
#
|
|
9
|
-
module Convention
|
|
10
|
-
autoload :Base, 'solargraph/convention/base'
|
|
11
|
-
autoload :Gemfile, 'solargraph/convention/gemfile'
|
|
12
|
-
autoload :Rspec, 'solargraph/convention/rspec'
|
|
13
|
-
autoload :Gemspec, 'solargraph/convention/gemspec'
|
|
14
|
-
|
|
15
|
-
@@conventions = Set.new
|
|
16
|
-
|
|
17
|
-
# @param convention [Class<Convention::Base>]
|
|
18
|
-
# @return [void]
|
|
19
|
-
def self.register convention
|
|
20
|
-
@@conventions.add convention.new
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# @param source_map [SourceMap]
|
|
24
|
-
# @return [Environ]
|
|
25
|
-
def self.for_local(source_map)
|
|
26
|
-
result = Environ.new
|
|
27
|
-
@@conventions.each do |conv|
|
|
28
|
-
result.merge conv.local(source_map)
|
|
29
|
-
end
|
|
30
|
-
result
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
# @param yard_map [YardMap]
|
|
34
|
-
# @return [Environ]
|
|
35
|
-
def self.for_global(yard_map)
|
|
36
|
-
result = Environ.new
|
|
37
|
-
@@conventions.each do |conv|
|
|
38
|
-
result.merge conv.global(yard_map)
|
|
39
|
-
end
|
|
40
|
-
result
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
register Gemfile
|
|
44
|
-
register Gemspec
|
|
45
|
-
register Rspec
|
|
46
|
-
end
|
|
47
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'set'
|
|
4
|
+
|
|
5
|
+
module Solargraph
|
|
6
|
+
# Conventions provide a way to modify an ApiMap based on expectations about
|
|
7
|
+
# one of its sources.
|
|
8
|
+
#
|
|
9
|
+
module Convention
|
|
10
|
+
autoload :Base, 'solargraph/convention/base'
|
|
11
|
+
autoload :Gemfile, 'solargraph/convention/gemfile'
|
|
12
|
+
autoload :Rspec, 'solargraph/convention/rspec'
|
|
13
|
+
autoload :Gemspec, 'solargraph/convention/gemspec'
|
|
14
|
+
|
|
15
|
+
@@conventions = Set.new
|
|
16
|
+
|
|
17
|
+
# @param convention [Class<Convention::Base>]
|
|
18
|
+
# @return [void]
|
|
19
|
+
def self.register convention
|
|
20
|
+
@@conventions.add convention.new
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @param source_map [SourceMap]
|
|
24
|
+
# @return [Environ]
|
|
25
|
+
def self.for_local(source_map)
|
|
26
|
+
result = Environ.new
|
|
27
|
+
@@conventions.each do |conv|
|
|
28
|
+
result.merge conv.local(source_map)
|
|
29
|
+
end
|
|
30
|
+
result
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# @param yard_map [YardMap]
|
|
34
|
+
# @return [Environ]
|
|
35
|
+
def self.for_global(yard_map)
|
|
36
|
+
result = Environ.new
|
|
37
|
+
@@conventions.each do |conv|
|
|
38
|
+
result.merge conv.global(yard_map)
|
|
39
|
+
end
|
|
40
|
+
result
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
register Gemfile
|
|
44
|
+
register Gemspec
|
|
45
|
+
register Rspec
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
module ReverseMarkdown
|
|
2
|
-
module Converters
|
|
3
|
-
class Dd < Base
|
|
4
|
-
def convert node, state = {}
|
|
5
|
-
content = treat_children(node, state)
|
|
6
|
-
": #{content.strip}\n"
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
ReverseMarkdown::Converters.register :dd, ReverseMarkdown::Converters::Dd.new
|
|
1
|
+
module ReverseMarkdown
|
|
2
|
+
module Converters
|
|
3
|
+
class Dd < Base
|
|
4
|
+
def convert node, state = {}
|
|
5
|
+
content = treat_children(node, state)
|
|
6
|
+
": #{content.strip}\n"
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
ReverseMarkdown::Converters.register :dd, ReverseMarkdown::Converters::Dd.new
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
module ReverseMarkdown
|
|
2
|
-
module Converters
|
|
3
|
-
class Dl < Base
|
|
4
|
-
def convert node, state = {}
|
|
5
|
-
content = treat_children(node, state).strip
|
|
6
|
-
"\n\n#{content}\n"
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
ReverseMarkdown::Converters.register :dl, ReverseMarkdown::Converters::Dl.new
|
|
1
|
+
module ReverseMarkdown
|
|
2
|
+
module Converters
|
|
3
|
+
class Dl < Base
|
|
4
|
+
def convert node, state = {}
|
|
5
|
+
content = treat_children(node, state).strip
|
|
6
|
+
"\n\n#{content}\n"
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
ReverseMarkdown::Converters.register :dl, ReverseMarkdown::Converters::Dl.new
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
module ReverseMarkdown
|
|
2
|
-
module Converters
|
|
3
|
-
class Dt < Base
|
|
4
|
-
def convert node, state = {}
|
|
5
|
-
content = treat_children(node, state)
|
|
6
|
-
"\n#{content.strip}\n"
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
ReverseMarkdown::Converters.register :dt, ReverseMarkdown::Converters::Dt.new
|
|
1
|
+
module ReverseMarkdown
|
|
2
|
+
module Converters
|
|
3
|
+
class Dt < Base
|
|
4
|
+
def convert node, state = {}
|
|
5
|
+
content = treat_children(node, state)
|
|
6
|
+
"\n#{content.strip}\n"
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
ReverseMarkdown::Converters.register :dt, ReverseMarkdown::Converters::Dt.new
|
|
@@ -1 +1 @@
|
|
|
1
|
-
ReverseMarkdown::Converters.register :tt, ReverseMarkdown::Converters::Code.new
|
|
1
|
+
ReverseMarkdown::Converters.register :tt, ReverseMarkdown::Converters::Code.new
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Diagnostics
|
|
5
|
-
# The base class for diagnostics reporters.
|
|
6
|
-
#
|
|
7
|
-
class Base
|
|
8
|
-
# @return [Array<String>]
|
|
9
|
-
attr_reader :args
|
|
10
|
-
|
|
11
|
-
def initialize *args
|
|
12
|
-
@args = args
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# Perform a diagnosis on a Source within the context of an ApiMap.
|
|
16
|
-
# The result is an array of hash objects that conform to the LSP's
|
|
17
|
-
# Diagnostic specification.
|
|
18
|
-
#
|
|
19
|
-
# Subclasses should override this method.
|
|
20
|
-
#
|
|
21
|
-
# @param source [Solargraph::Source]
|
|
22
|
-
# @param api_map [Solargraph::ApiMap]
|
|
23
|
-
# @return [Array<Hash>]
|
|
24
|
-
def diagnose source, api_map
|
|
25
|
-
[]
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Diagnostics
|
|
5
|
+
# The base class for diagnostics reporters.
|
|
6
|
+
#
|
|
7
|
+
class Base
|
|
8
|
+
# @return [Array<String>]
|
|
9
|
+
attr_reader :args
|
|
10
|
+
|
|
11
|
+
def initialize *args
|
|
12
|
+
@args = args
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Perform a diagnosis on a Source within the context of an ApiMap.
|
|
16
|
+
# The result is an array of hash objects that conform to the LSP's
|
|
17
|
+
# Diagnostic specification.
|
|
18
|
+
#
|
|
19
|
+
# Subclasses should override this method.
|
|
20
|
+
#
|
|
21
|
+
# @param source [Solargraph::Source]
|
|
22
|
+
# @param api_map [Solargraph::ApiMap]
|
|
23
|
+
# @return [Array<Hash>]
|
|
24
|
+
def diagnose source, api_map
|
|
25
|
+
[]
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -1,37 +1,53 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Diagnostics
|
|
5
|
-
# RequireNotFound reports required paths that could not be resolved to
|
|
6
|
-
# either a file in the workspace or a gem.
|
|
7
|
-
#
|
|
8
|
-
class RequireNotFound < Base
|
|
9
|
-
def diagnose source, api_map
|
|
10
|
-
return [] unless source.parsed? && source.synchronized?
|
|
11
|
-
result = []
|
|
12
|
-
refs = {}
|
|
13
|
-
map = api_map.source_map(source.filename)
|
|
14
|
-
map.requires.each { |ref| refs[ref.name] = ref }
|
|
15
|
-
api_map.
|
|
16
|
-
next unless refs.key?(r)
|
|
17
|
-
result.push
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Diagnostics
|
|
5
|
+
# RequireNotFound reports required paths that could not be resolved to
|
|
6
|
+
# either a file in the workspace or a gem.
|
|
7
|
+
#
|
|
8
|
+
class RequireNotFound < Base
|
|
9
|
+
def diagnose source, api_map
|
|
10
|
+
return [] unless source.parsed? && source.synchronized?
|
|
11
|
+
result = []
|
|
12
|
+
refs = {}
|
|
13
|
+
map = api_map.source_map(source.filename)
|
|
14
|
+
map.requires.each { |ref| refs[ref.name] = ref }
|
|
15
|
+
api_map.missing_docs.each do |r|
|
|
16
|
+
next unless refs.key?(r)
|
|
17
|
+
result.push docs_error(r, refs[r].location)
|
|
18
|
+
end
|
|
19
|
+
api_map.unresolved_requires.each do |r|
|
|
20
|
+
next unless refs.key?(r)
|
|
21
|
+
result.push require_error(r, refs[r].location)
|
|
22
|
+
end
|
|
23
|
+
result
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
# @param path [String]
|
|
29
|
+
# @param location [Location]
|
|
30
|
+
# @return [Hash]
|
|
31
|
+
def docs_error path, location
|
|
32
|
+
{
|
|
33
|
+
range: location.range.to_hash,
|
|
34
|
+
severity: Diagnostics::Severities::WARNING,
|
|
35
|
+
source: 'RequireNotFound',
|
|
36
|
+
message: "YARD docs not found for #{path}"
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# @param path [String]
|
|
41
|
+
# @param location [Location]
|
|
42
|
+
# @return [Hash]
|
|
43
|
+
def require_error path, location
|
|
44
|
+
{
|
|
45
|
+
range: location.range.to_hash,
|
|
46
|
+
severity: Diagnostics::Severities::WARNING,
|
|
47
|
+
source: 'RequireNotFound',
|
|
48
|
+
message: "Required path #{path} could not be resolved."
|
|
49
|
+
}
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -1,98 +1,98 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'stringio'
|
|
4
|
-
|
|
5
|
-
module Solargraph
|
|
6
|
-
module Diagnostics
|
|
7
|
-
# This reporter provides linting through RuboCop.
|
|
8
|
-
#
|
|
9
|
-
class Rubocop < Base
|
|
10
|
-
include RubocopHelpers
|
|
11
|
-
|
|
12
|
-
# Conversion of RuboCop severity names to LSP constants
|
|
13
|
-
SEVERITIES = {
|
|
14
|
-
'refactor' => Severities::HINT,
|
|
15
|
-
'convention' => Severities::INFORMATION,
|
|
16
|
-
'warning' => Severities::WARNING,
|
|
17
|
-
'error' => Severities::ERROR,
|
|
18
|
-
'fatal' => Severities::ERROR
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
# @param source [Solargraph::Source]
|
|
22
|
-
# @param _api_map [Solargraph::ApiMap]
|
|
23
|
-
# @return [Array<Hash>]
|
|
24
|
-
def diagnose source, _api_map
|
|
25
|
-
require_rubocop(rubocop_version)
|
|
26
|
-
options, paths = generate_options(source.filename, source.code)
|
|
27
|
-
store = RuboCop::ConfigStore.new
|
|
28
|
-
runner = RuboCop::Runner.new(options, store)
|
|
29
|
-
result = redirect_stdout{ runner.run(paths) }
|
|
30
|
-
make_array JSON.parse(result)
|
|
31
|
-
rescue RuboCop::ValidationError, RuboCop::ConfigNotFoundError => e
|
|
32
|
-
raise DiagnosticsError, "Error in RuboCop configuration: #{e.message}"
|
|
33
|
-
rescue JSON::ParserError
|
|
34
|
-
raise DiagnosticsError, 'RuboCop returned invalid data'
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
private
|
|
38
|
-
|
|
39
|
-
# Extracts the rubocop version from _args_
|
|
40
|
-
#
|
|
41
|
-
# @return [String]
|
|
42
|
-
def rubocop_version
|
|
43
|
-
args.find { |a| a =~ /version=/ }.to_s.split('=').last
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
# @param resp [Hash]
|
|
47
|
-
# @return [Array<Hash>]
|
|
48
|
-
def make_array resp
|
|
49
|
-
diagnostics = []
|
|
50
|
-
resp['files'].each do |file|
|
|
51
|
-
file['offenses'].each do |off|
|
|
52
|
-
diagnostics.push offense_to_diagnostic(off)
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
diagnostics
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
# Convert a RuboCop offense to an LSP diagnostic
|
|
59
|
-
#
|
|
60
|
-
# @param off [Hash] Offense received from Rubocop
|
|
61
|
-
# @return [Hash] LSP diagnostic
|
|
62
|
-
def offense_to_diagnostic off
|
|
63
|
-
{
|
|
64
|
-
range: offense_range(off).to_hash,
|
|
65
|
-
# 1 = Error, 2 = Warning, 3 = Information, 4 = Hint
|
|
66
|
-
severity: SEVERITIES[off['severity']],
|
|
67
|
-
source: 'rubocop',
|
|
68
|
-
code: off['cop_name'],
|
|
69
|
-
message: off['message'].gsub(/^#{off['cop_name']}\:/, '')
|
|
70
|
-
}
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
# @param off [Hash]
|
|
74
|
-
# @return [Range]
|
|
75
|
-
def offense_range off
|
|
76
|
-
Range.new(offense_start_position(off), offense_ending_position(off))
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# @param off [Hash]
|
|
80
|
-
# @return [Position]
|
|
81
|
-
def offense_start_position off
|
|
82
|
-
Position.new(off['location']['start_line'] - 1, off['location']['start_column'] - 1)
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
# @param off [Hash]
|
|
86
|
-
# @return [Position]
|
|
87
|
-
def offense_ending_position off
|
|
88
|
-
if off['location']['start_line'] != off['location']['last_line']
|
|
89
|
-
Position.new(off['location']['start_line'], 0)
|
|
90
|
-
else
|
|
91
|
-
Position.new(
|
|
92
|
-
off['location']['start_line'] - 1, off['location']['last_column']
|
|
93
|
-
)
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
end
|
|
98
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'stringio'
|
|
4
|
+
|
|
5
|
+
module Solargraph
|
|
6
|
+
module Diagnostics
|
|
7
|
+
# This reporter provides linting through RuboCop.
|
|
8
|
+
#
|
|
9
|
+
class Rubocop < Base
|
|
10
|
+
include RubocopHelpers
|
|
11
|
+
|
|
12
|
+
# Conversion of RuboCop severity names to LSP constants
|
|
13
|
+
SEVERITIES = {
|
|
14
|
+
'refactor' => Severities::HINT,
|
|
15
|
+
'convention' => Severities::INFORMATION,
|
|
16
|
+
'warning' => Severities::WARNING,
|
|
17
|
+
'error' => Severities::ERROR,
|
|
18
|
+
'fatal' => Severities::ERROR
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
# @param source [Solargraph::Source]
|
|
22
|
+
# @param _api_map [Solargraph::ApiMap]
|
|
23
|
+
# @return [Array<Hash>]
|
|
24
|
+
def diagnose source, _api_map
|
|
25
|
+
require_rubocop(rubocop_version)
|
|
26
|
+
options, paths = generate_options(source.filename, source.code)
|
|
27
|
+
store = RuboCop::ConfigStore.new
|
|
28
|
+
runner = RuboCop::Runner.new(options, store)
|
|
29
|
+
result = redirect_stdout{ runner.run(paths) }
|
|
30
|
+
make_array JSON.parse(result)
|
|
31
|
+
rescue RuboCop::ValidationError, RuboCop::ConfigNotFoundError => e
|
|
32
|
+
raise DiagnosticsError, "Error in RuboCop configuration: #{e.message}"
|
|
33
|
+
rescue JSON::ParserError
|
|
34
|
+
raise DiagnosticsError, 'RuboCop returned invalid data'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
# Extracts the rubocop version from _args_
|
|
40
|
+
#
|
|
41
|
+
# @return [String]
|
|
42
|
+
def rubocop_version
|
|
43
|
+
args.find { |a| a =~ /version=/ }.to_s.split('=').last
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# @param resp [Hash]
|
|
47
|
+
# @return [Array<Hash>]
|
|
48
|
+
def make_array resp
|
|
49
|
+
diagnostics = []
|
|
50
|
+
resp['files'].each do |file|
|
|
51
|
+
file['offenses'].each do |off|
|
|
52
|
+
diagnostics.push offense_to_diagnostic(off)
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
diagnostics
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Convert a RuboCop offense to an LSP diagnostic
|
|
59
|
+
#
|
|
60
|
+
# @param off [Hash] Offense received from Rubocop
|
|
61
|
+
# @return [Hash] LSP diagnostic
|
|
62
|
+
def offense_to_diagnostic off
|
|
63
|
+
{
|
|
64
|
+
range: offense_range(off).to_hash,
|
|
65
|
+
# 1 = Error, 2 = Warning, 3 = Information, 4 = Hint
|
|
66
|
+
severity: SEVERITIES[off['severity']],
|
|
67
|
+
source: 'rubocop',
|
|
68
|
+
code: off['cop_name'],
|
|
69
|
+
message: off['message'].gsub(/^#{off['cop_name']}\:/, '')
|
|
70
|
+
}
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# @param off [Hash]
|
|
74
|
+
# @return [Range]
|
|
75
|
+
def offense_range off
|
|
76
|
+
Range.new(offense_start_position(off), offense_ending_position(off))
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# @param off [Hash]
|
|
80
|
+
# @return [Position]
|
|
81
|
+
def offense_start_position off
|
|
82
|
+
Position.new(off['location']['start_line'] - 1, off['location']['start_column'] - 1)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# @param off [Hash]
|
|
86
|
+
# @return [Position]
|
|
87
|
+
def offense_ending_position off
|
|
88
|
+
if off['location']['start_line'] != off['location']['last_line']
|
|
89
|
+
Position.new(off['location']['start_line'], 0)
|
|
90
|
+
else
|
|
91
|
+
Position.new(
|
|
92
|
+
off['location']['start_line'] - 1, off['location']['last_column']
|
|
93
|
+
)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Diagnostics
|
|
5
|
-
# Utility methods for the RuboCop diagnostics reporter.
|
|
6
|
-
#
|
|
7
|
-
module RubocopHelpers
|
|
8
|
-
module_function
|
|
9
|
-
|
|
10
|
-
# Requires a specific version of rubocop, or the latest installed version
|
|
11
|
-
# if _version_ is `nil`.
|
|
12
|
-
#
|
|
13
|
-
# @param version [String]
|
|
14
|
-
# @raise [InvalidRubocopVersionError] if _version_ is not installed
|
|
15
|
-
def require_rubocop(version = nil)
|
|
16
|
-
begin
|
|
17
|
-
gem_path = Gem::Specification.find_by_name('rubocop', version).full_gem_path
|
|
18
|
-
gem_lib_path = File.join(gem_path, 'lib')
|
|
19
|
-
$LOAD_PATH.unshift(gem_lib_path) unless $LOAD_PATH.include?(gem_lib_path)
|
|
20
|
-
rescue Gem::MissingSpecVersionError => e
|
|
21
|
-
raise InvalidRubocopVersionError,
|
|
22
|
-
"could not find '#{e.name}' (#{e.requirement}) - "\
|
|
23
|
-
"did find: [#{e.specs.map { |s| s.version.version }.join(', ')}]"
|
|
24
|
-
end
|
|
25
|
-
require 'rubocop'
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
# Generate command-line options for the specified filename and code.
|
|
29
|
-
#
|
|
30
|
-
# @param filename [String]
|
|
31
|
-
# @param code [String]
|
|
32
|
-
# @return [Array(Array<String>, Array<String>)]
|
|
33
|
-
def generate_options filename, code
|
|
34
|
-
args = ['-f', 'j', '--force-exclusion', filename]
|
|
35
|
-
base_options = RuboCop::Options.new
|
|
36
|
-
options, paths = base_options.parse(args)
|
|
37
|
-
options[:stdin] = code
|
|
38
|
-
[options, paths]
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# RuboCop internally uses capitalized drive letters for Windows paths,
|
|
42
|
-
# so we need to convert the paths provided to the command.
|
|
43
|
-
#
|
|
44
|
-
# @param path [String]
|
|
45
|
-
# @return [String]
|
|
46
|
-
def fix_drive_letter path
|
|
47
|
-
return path unless path.match(/^[a-z]:/)
|
|
48
|
-
path[0].upcase + path[1..-1]
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# @todo This is a smelly way to redirect output, but the RuboCop specs do
|
|
52
|
-
# the same thing.
|
|
53
|
-
# @return [String]
|
|
54
|
-
def redirect_stdout
|
|
55
|
-
redir = StringIO.new
|
|
56
|
-
$stdout = redir
|
|
57
|
-
yield if block_given?
|
|
58
|
-
$stdout = STDOUT
|
|
59
|
-
redir.string
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Diagnostics
|
|
5
|
+
# Utility methods for the RuboCop diagnostics reporter.
|
|
6
|
+
#
|
|
7
|
+
module RubocopHelpers
|
|
8
|
+
module_function
|
|
9
|
+
|
|
10
|
+
# Requires a specific version of rubocop, or the latest installed version
|
|
11
|
+
# if _version_ is `nil`.
|
|
12
|
+
#
|
|
13
|
+
# @param version [String]
|
|
14
|
+
# @raise [InvalidRubocopVersionError] if _version_ is not installed
|
|
15
|
+
def require_rubocop(version = nil)
|
|
16
|
+
begin
|
|
17
|
+
gem_path = Gem::Specification.find_by_name('rubocop', version).full_gem_path
|
|
18
|
+
gem_lib_path = File.join(gem_path, 'lib')
|
|
19
|
+
$LOAD_PATH.unshift(gem_lib_path) unless $LOAD_PATH.include?(gem_lib_path)
|
|
20
|
+
rescue Gem::MissingSpecVersionError => e
|
|
21
|
+
raise InvalidRubocopVersionError,
|
|
22
|
+
"could not find '#{e.name}' (#{e.requirement}) - "\
|
|
23
|
+
"did find: [#{e.specs.map { |s| s.version.version }.join(', ')}]"
|
|
24
|
+
end
|
|
25
|
+
require 'rubocop'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Generate command-line options for the specified filename and code.
|
|
29
|
+
#
|
|
30
|
+
# @param filename [String]
|
|
31
|
+
# @param code [String]
|
|
32
|
+
# @return [Array(Array<String>, Array<String>)]
|
|
33
|
+
def generate_options filename, code
|
|
34
|
+
args = ['-f', 'j', '--force-exclusion', filename]
|
|
35
|
+
base_options = RuboCop::Options.new
|
|
36
|
+
options, paths = base_options.parse(args)
|
|
37
|
+
options[:stdin] = code
|
|
38
|
+
[options, paths]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# RuboCop internally uses capitalized drive letters for Windows paths,
|
|
42
|
+
# so we need to convert the paths provided to the command.
|
|
43
|
+
#
|
|
44
|
+
# @param path [String]
|
|
45
|
+
# @return [String]
|
|
46
|
+
def fix_drive_letter path
|
|
47
|
+
return path unless path.match(/^[a-z]:/)
|
|
48
|
+
path[0].upcase + path[1..-1]
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# @todo This is a smelly way to redirect output, but the RuboCop specs do
|
|
52
|
+
# the same thing.
|
|
53
|
+
# @return [String]
|
|
54
|
+
def redirect_stdout
|
|
55
|
+
redir = StringIO.new
|
|
56
|
+
$stdout = redir
|
|
57
|
+
yield if block_given?
|
|
58
|
+
$stdout = STDOUT
|
|
59
|
+
redir.string
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|