solargraph 0.58.1 → 0.58.3
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/plugins.yml +3 -2
- data/.gitignore +1 -0
- data/CHANGELOG.md +10 -1
- data/lib/solargraph/api_map/cache.rb +110 -110
- data/lib/solargraph/api_map/constants.rb +279 -279
- data/lib/solargraph/api_map/index.rb +193 -193
- data/lib/solargraph/api_map/source_to_yard.rb +97 -97
- data/lib/solargraph/api_map/store.rb +384 -384
- data/lib/solargraph/api_map.rb +945 -945
- data/lib/solargraph/bench.rb +45 -45
- data/lib/solargraph/complex_type/type_methods.rb +228 -228
- data/lib/solargraph/complex_type/unique_type.rb +482 -482
- data/lib/solargraph/complex_type.rb +444 -444
- data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -91
- data/lib/solargraph/convention/data_definition.rb +105 -105
- data/lib/solargraph/convention/gemfile.rb +15 -15
- data/lib/solargraph/convention/gemspec.rb +23 -23
- data/lib/solargraph/convention/rakefile.rb +17 -17
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -61
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -102
- data/lib/solargraph/convention/struct_definition.rb +164 -164
- data/lib/solargraph/convention.rb +78 -78
- data/lib/solargraph/converters/dd.rb +17 -17
- data/lib/solargraph/converters/dl.rb +15 -15
- data/lib/solargraph/converters/dt.rb +15 -15
- data/lib/solargraph/converters/misc.rb +1 -1
- data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
- data/lib/solargraph/diagnostics/rubocop.rb +118 -118
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -68
- data/lib/solargraph/diagnostics/type_check.rb +55 -55
- data/lib/solargraph/diagnostics/update_errors.rb +41 -41
- data/lib/solargraph/doc_map.rb +439 -439
- data/lib/solargraph/equality.rb +34 -34
- data/lib/solargraph/gem_pins.rb +98 -98
- data/lib/solargraph/language_server/error_codes.rb +20 -20
- data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
- data/lib/solargraph/language_server/host/dispatch.rb +130 -130
- data/lib/solargraph/language_server/host/message_worker.rb +112 -112
- data/lib/solargraph/language_server/host/sources.rb +99 -99
- data/lib/solargraph/language_server/host.rb +878 -878
- data/lib/solargraph/language_server/message/base.rb +97 -97
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -114
- data/lib/solargraph/language_server/message/extended/document.rb +23 -23
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
- data/lib/solargraph/language_server/message/extended/download_core.rb +19 -19
- data/lib/solargraph/language_server/message/extended/search.rb +20 -20
- data/lib/solargraph/language_server/message/initialize.rb +191 -191
- data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +40 -40
- data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -148
- data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
- 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 +24 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -25
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -26
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
- data/lib/solargraph/language_server/message.rb +94 -94
- data/lib/solargraph/language_server/request.rb +27 -27
- data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
- data/lib/solargraph/language_server/uri_helpers.rb +49 -49
- data/lib/solargraph/library.rb +683 -683
- data/lib/solargraph/location.rb +82 -82
- data/lib/solargraph/logging.rb +37 -37
- data/lib/solargraph/page.rb +92 -92
- data/lib/solargraph/parser/comment_ripper.rb +69 -69
- data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -255
- data/lib/solargraph/parser/node_processor/base.rb +92 -92
- data/lib/solargraph/parser/node_processor.rb +62 -62
- data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -149
- data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -166
- data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -486
- data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
- data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -59
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
- data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
- data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -53
- data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -37
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -23
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -40
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -59
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -38
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -52
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -291
- data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -29
- data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -70
- data/lib/solargraph/parser/parser_gem.rb +12 -12
- data/lib/solargraph/parser/region.rb +69 -69
- data/lib/solargraph/parser/snippet.rb +17 -17
- data/lib/solargraph/parser.rb +23 -23
- data/lib/solargraph/pin/base.rb +729 -729
- data/lib/solargraph/pin/base_variable.rb +126 -126
- data/lib/solargraph/pin/block.rb +104 -104
- data/lib/solargraph/pin/breakable.rb +9 -9
- data/lib/solargraph/pin/callable.rb +231 -231
- data/lib/solargraph/pin/closure.rb +72 -72
- data/lib/solargraph/pin/common.rb +79 -79
- data/lib/solargraph/pin/constant.rb +45 -45
- data/lib/solargraph/pin/conversions.rb +123 -123
- data/lib/solargraph/pin/delegated_method.rb +120 -120
- data/lib/solargraph/pin/documenting.rb +114 -114
- data/lib/solargraph/pin/instance_variable.rb +34 -34
- data/lib/solargraph/pin/keyword.rb +20 -20
- data/lib/solargraph/pin/local_variable.rb +75 -75
- data/lib/solargraph/pin/method.rb +672 -672
- data/lib/solargraph/pin/method_alias.rb +34 -34
- data/lib/solargraph/pin/namespace.rb +115 -115
- data/lib/solargraph/pin/parameter.rb +275 -275
- data/lib/solargraph/pin/proxy_type.rb +39 -39
- data/lib/solargraph/pin/reference/override.rb +47 -47
- data/lib/solargraph/pin/reference/superclass.rb +15 -15
- data/lib/solargraph/pin/reference.rb +39 -39
- data/lib/solargraph/pin/search.rb +61 -61
- data/lib/solargraph/pin/signature.rb +61 -61
- data/lib/solargraph/pin/symbol.rb +53 -53
- data/lib/solargraph/pin/until.rb +18 -18
- data/lib/solargraph/pin/while.rb +18 -18
- data/lib/solargraph/pin.rb +44 -44
- data/lib/solargraph/pin_cache.rb +245 -245
- data/lib/solargraph/position.rb +132 -119
- data/lib/solargraph/range.rb +112 -112
- data/lib/solargraph/rbs_map/conversions.rb +823 -823
- data/lib/solargraph/rbs_map/core_fills.rb +84 -84
- data/lib/solargraph/rbs_map/core_map.rb +58 -58
- data/lib/solargraph/rbs_map/stdlib_map.rb +43 -43
- data/lib/solargraph/rbs_map.rb +163 -163
- data/lib/solargraph/server_methods.rb +16 -16
- data/lib/solargraph/shell.rb +363 -352
- data/lib/solargraph/source/chain/array.rb +37 -37
- data/lib/solargraph/source/chain/call.rb +337 -337
- data/lib/solargraph/source/chain/class_variable.rb +13 -13
- data/lib/solargraph/source/chain/constant.rb +26 -26
- data/lib/solargraph/source/chain/global_variable.rb +13 -13
- data/lib/solargraph/source/chain/hash.rb +34 -34
- data/lib/solargraph/source/chain/if.rb +28 -28
- data/lib/solargraph/source/chain/instance_variable.rb +13 -13
- data/lib/solargraph/source/chain/link.rb +109 -109
- data/lib/solargraph/source/chain/literal.rb +48 -48
- 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 +291 -291
- data/lib/solargraph/source/change.rb +82 -82
- data/lib/solargraph/source/cursor.rb +166 -166
- data/lib/solargraph/source/source_chainer.rb +194 -194
- data/lib/solargraph/source/updater.rb +55 -55
- data/lib/solargraph/source.rb +498 -498
- data/lib/solargraph/source_map/clip.rb +226 -226
- data/lib/solargraph/source_map/data.rb +34 -34
- data/lib/solargraph/source_map/mapper.rb +259 -259
- data/lib/solargraph/source_map.rb +212 -212
- data/lib/solargraph/type_checker/checks.rb +124 -124
- data/lib/solargraph/type_checker/param_def.rb +37 -37
- data/lib/solargraph/type_checker/problem.rb +32 -32
- data/lib/solargraph/type_checker/rules.rb +84 -84
- data/lib/solargraph/type_checker.rb +814 -814
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +255 -255
- data/lib/solargraph/workspace/require_paths.rb +97 -97
- data/lib/solargraph/workspace.rb +220 -220
- data/lib/solargraph/yard_map/helpers.rb +44 -44
- data/lib/solargraph/yard_map/mapper/to_method.rb +130 -130
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -31
- data/lib/solargraph/yard_map/mapper.rb +79 -79
- data/lib/solargraph/yard_map/to_method.rb +89 -89
- data/lib/solargraph/yard_tags.rb +20 -20
- data/lib/solargraph/yardoc.rb +87 -87
- data/lib/solargraph.rb +105 -105
- data/rbs_collection.yaml +1 -1
- metadata +12 -12
- /data/{sig → rbs}/shims/ast/0/node.rbs +0 -0
- /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
- /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
- /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
module Common
|
|
6
|
-
# @!method source
|
|
7
|
-
# @abstract
|
|
8
|
-
# @return [Source, nil]
|
|
9
|
-
# @type @closure [Pin::Closure, nil]
|
|
10
|
-
|
|
11
|
-
# @return [Location]
|
|
12
|
-
attr_reader :location
|
|
13
|
-
|
|
14
|
-
# @sg-ignore Solargraph::Pin::Common#closure return type could not be inferred
|
|
15
|
-
# @return [Pin::Closure, nil]
|
|
16
|
-
def closure
|
|
17
|
-
Solargraph.assert_or_log(:closure, "Closure not set on #{self.class} #{name.inspect} from #{source.inspect}") unless @closure
|
|
18
|
-
@closure
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# @return [String]
|
|
22
|
-
def name
|
|
23
|
-
@name ||= ''
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# @return [ComplexType]
|
|
27
|
-
def return_type
|
|
28
|
-
@return_type ||= ComplexType::UNDEFINED
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# @return [ComplexType]
|
|
32
|
-
def context
|
|
33
|
-
# Get the static context from the nearest namespace
|
|
34
|
-
@context ||= find_context
|
|
35
|
-
end
|
|
36
|
-
alias full_context context
|
|
37
|
-
|
|
38
|
-
# @return [String]
|
|
39
|
-
def namespace
|
|
40
|
-
context.namespace.to_s
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# @return [ComplexType]
|
|
44
|
-
def binder
|
|
45
|
-
@binder || context
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
# @return [String]
|
|
49
|
-
def comments
|
|
50
|
-
@comments ||= ''
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# @return [String]
|
|
54
|
-
def path
|
|
55
|
-
@path ||= name.empty? ? context.namespace : "#{context.namespace}::#{name}"
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
protected
|
|
59
|
-
|
|
60
|
-
attr_writer :context
|
|
61
|
-
|
|
62
|
-
private
|
|
63
|
-
|
|
64
|
-
# @return [ComplexType]
|
|
65
|
-
def find_context
|
|
66
|
-
here = closure
|
|
67
|
-
until here.nil?
|
|
68
|
-
if here.is_a?(Pin::Namespace)
|
|
69
|
-
return here.return_type
|
|
70
|
-
elsif here.is_a?(Pin::Method)
|
|
71
|
-
return here.context
|
|
72
|
-
end
|
|
73
|
-
here = here.closure
|
|
74
|
-
end
|
|
75
|
-
ComplexType::ROOT
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
module Common
|
|
6
|
+
# @!method source
|
|
7
|
+
# @abstract
|
|
8
|
+
# @return [Source, nil]
|
|
9
|
+
# @type @closure [Pin::Closure, nil]
|
|
10
|
+
|
|
11
|
+
# @return [Location]
|
|
12
|
+
attr_reader :location
|
|
13
|
+
|
|
14
|
+
# @sg-ignore Solargraph::Pin::Common#closure return type could not be inferred
|
|
15
|
+
# @return [Pin::Closure, nil]
|
|
16
|
+
def closure
|
|
17
|
+
Solargraph.assert_or_log(:closure, "Closure not set on #{self.class} #{name.inspect} from #{source.inspect}") unless @closure
|
|
18
|
+
@closure
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# @return [String]
|
|
22
|
+
def name
|
|
23
|
+
@name ||= ''
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# @return [ComplexType]
|
|
27
|
+
def return_type
|
|
28
|
+
@return_type ||= ComplexType::UNDEFINED
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# @return [ComplexType]
|
|
32
|
+
def context
|
|
33
|
+
# Get the static context from the nearest namespace
|
|
34
|
+
@context ||= find_context
|
|
35
|
+
end
|
|
36
|
+
alias full_context context
|
|
37
|
+
|
|
38
|
+
# @return [String]
|
|
39
|
+
def namespace
|
|
40
|
+
context.namespace.to_s
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# @return [ComplexType]
|
|
44
|
+
def binder
|
|
45
|
+
@binder || context
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# @return [String]
|
|
49
|
+
def comments
|
|
50
|
+
@comments ||= ''
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# @return [String]
|
|
54
|
+
def path
|
|
55
|
+
@path ||= name.empty? ? context.namespace : "#{context.namespace}::#{name}"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
protected
|
|
59
|
+
|
|
60
|
+
attr_writer :context
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
# @return [ComplexType]
|
|
65
|
+
def find_context
|
|
66
|
+
here = closure
|
|
67
|
+
until here.nil?
|
|
68
|
+
if here.is_a?(Pin::Namespace)
|
|
69
|
+
return here.return_type
|
|
70
|
+
elsif here.is_a?(Pin::Method)
|
|
71
|
+
return here.context
|
|
72
|
+
end
|
|
73
|
+
here = here.closure
|
|
74
|
+
end
|
|
75
|
+
ComplexType::ROOT
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Solargraph
|
|
4
|
-
module Pin
|
|
5
|
-
class Constant < BaseVariable
|
|
6
|
-
attr_reader :visibility
|
|
7
|
-
|
|
8
|
-
# @param visibility [::Symbol] The visibility of the constant (:public, :protected, or :private)
|
|
9
|
-
# @param splat [Hash] Additional options supported by superclasses
|
|
10
|
-
def initialize visibility: :public, **splat
|
|
11
|
-
super(**splat)
|
|
12
|
-
@visibility = visibility
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def return_type
|
|
16
|
-
@return_type ||= generate_complex_type
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def completion_item_kind
|
|
20
|
-
Solargraph::LanguageServer::CompletionItemKinds::CONSTANT
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# @return [Integer]
|
|
24
|
-
def symbol_kind
|
|
25
|
-
LanguageServer::SymbolKinds::CONSTANT
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def path
|
|
29
|
-
@path ||= context.namespace.to_s.empty? ? name : "#{context.namespace}::#{name}"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
private
|
|
33
|
-
|
|
34
|
-
# @return [ComplexType]
|
|
35
|
-
def generate_complex_type
|
|
36
|
-
tags = docstring.tags(:return).map(&:types).flatten.reject(&:nil?)
|
|
37
|
-
if tags.empty?
|
|
38
|
-
tags = docstring.tags(:type).map(&:types).flatten.reject(&:nil?)
|
|
39
|
-
end
|
|
40
|
-
return ComplexType::UNDEFINED if tags.empty?
|
|
41
|
-
ComplexType.try_parse *tags
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Solargraph
|
|
4
|
+
module Pin
|
|
5
|
+
class Constant < BaseVariable
|
|
6
|
+
attr_reader :visibility
|
|
7
|
+
|
|
8
|
+
# @param visibility [::Symbol] The visibility of the constant (:public, :protected, or :private)
|
|
9
|
+
# @param splat [Hash] Additional options supported by superclasses
|
|
10
|
+
def initialize visibility: :public, **splat
|
|
11
|
+
super(**splat)
|
|
12
|
+
@visibility = visibility
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def return_type
|
|
16
|
+
@return_type ||= generate_complex_type
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def completion_item_kind
|
|
20
|
+
Solargraph::LanguageServer::CompletionItemKinds::CONSTANT
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# @return [Integer]
|
|
24
|
+
def symbol_kind
|
|
25
|
+
LanguageServer::SymbolKinds::CONSTANT
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def path
|
|
29
|
+
@path ||= context.namespace.to_s.empty? ? name : "#{context.namespace}::#{name}"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
# @return [ComplexType]
|
|
35
|
+
def generate_complex_type
|
|
36
|
+
tags = docstring.tags(:return).map(&:types).flatten.reject(&:nil?)
|
|
37
|
+
if tags.empty?
|
|
38
|
+
tags = docstring.tags(:type).map(&:types).flatten.reject(&:nil?)
|
|
39
|
+
end
|
|
40
|
+
return ComplexType::UNDEFINED if tags.empty?
|
|
41
|
+
ComplexType.try_parse *tags
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'cgi'
|
|
4
|
-
|
|
5
|
-
module Solargraph
|
|
6
|
-
module Pin
|
|
7
|
-
# @todo Move this stuff. It should be the responsibility of the language server.
|
|
8
|
-
# @todo abstract methods below should be verified to be overridden
|
|
9
|
-
# by type checker when mixin included by non-abstract class
|
|
10
|
-
module Conversions
|
|
11
|
-
# @!parse
|
|
12
|
-
# include Documenting
|
|
13
|
-
# include Common
|
|
14
|
-
|
|
15
|
-
# @return [Integer]
|
|
16
|
-
# @abstract
|
|
17
|
-
def completion_item_kind
|
|
18
|
-
raise NotImplementedError
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# @abstract
|
|
22
|
-
# @return [Boolean]
|
|
23
|
-
def deprecated?
|
|
24
|
-
raise NotImplementedError
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# @abstract
|
|
28
|
-
def probed?
|
|
29
|
-
raise NotImplementedError
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# @abstract
|
|
33
|
-
def proxied?
|
|
34
|
-
raise NotImplementedError
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# @return [Hash]
|
|
38
|
-
def completion_item
|
|
39
|
-
@completion_item ||= {
|
|
40
|
-
label: name,
|
|
41
|
-
kind: completion_item_kind,
|
|
42
|
-
detail: detail,
|
|
43
|
-
data: {
|
|
44
|
-
path: path,
|
|
45
|
-
return_type: return_type.tag,
|
|
46
|
-
location: (location ? location.to_hash : nil),
|
|
47
|
-
deprecated: deprecated?
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# @return [Hash]
|
|
53
|
-
def resolve_completion_item
|
|
54
|
-
@resolve_completion_item ||= begin
|
|
55
|
-
extra = {}
|
|
56
|
-
alldoc = ''
|
|
57
|
-
# alldoc += link_documentation unless link_documentation.nil?
|
|
58
|
-
# alldoc += "\n\n" unless alldoc.empty?
|
|
59
|
-
alldoc += documentation unless documentation.nil?
|
|
60
|
-
extra[:documentation] = alldoc unless alldoc.empty?
|
|
61
|
-
completion_item.merge(extra)
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# @return [::Array<Hash>]
|
|
66
|
-
def signature_help
|
|
67
|
-
[]
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# @return [String, nil]
|
|
71
|
-
def detail
|
|
72
|
-
# This property is not cached in an instance variable because it can
|
|
73
|
-
# change when pins get proxied.
|
|
74
|
-
detail = String.new
|
|
75
|
-
detail += "=#{probed? ? '~' : (proxied? ? '^' : '>')} #{return_type.to_s}" unless return_type.undefined?
|
|
76
|
-
detail.strip!
|
|
77
|
-
return nil if detail.empty?
|
|
78
|
-
detail
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# Get a markdown-flavored link to a documentation page.
|
|
82
|
-
#
|
|
83
|
-
# @return [String]
|
|
84
|
-
def link_documentation
|
|
85
|
-
@link_documentation ||= generate_link
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
# @return [String, nil]
|
|
89
|
-
def text_documentation
|
|
90
|
-
this_path = path || name || return_type.tag
|
|
91
|
-
return nil if this_path == 'undefined'
|
|
92
|
-
escape_brackets this_path
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
# @return [void]
|
|
96
|
-
def reset_conversions
|
|
97
|
-
@completion_item = nil
|
|
98
|
-
@resolve_completion_item = nil
|
|
99
|
-
@signature_help = nil
|
|
100
|
-
@detail = nil
|
|
101
|
-
@link_documentation = nil
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
private
|
|
105
|
-
|
|
106
|
-
# @return [String, nil]
|
|
107
|
-
def generate_link
|
|
108
|
-
this_path = path || name || return_type.tag
|
|
109
|
-
return nil if this_path == 'undefined'
|
|
110
|
-
return nil if this_path.nil? || this_path == 'undefined'
|
|
111
|
-
return this_path if path.nil?
|
|
112
|
-
"[#{escape_brackets(this_path).gsub('_', '\\\\_')}](solargraph:/document?query=#{CGI.escape(this_path)})"
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
# @param text [String]
|
|
116
|
-
# @return [String]
|
|
117
|
-
def escape_brackets text
|
|
118
|
-
# text.gsub(/(\<|\>)/, "\\#{$1}")
|
|
119
|
-
text.gsub("<", '\<').gsub(">", '\>')
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'cgi'
|
|
4
|
+
|
|
5
|
+
module Solargraph
|
|
6
|
+
module Pin
|
|
7
|
+
# @todo Move this stuff. It should be the responsibility of the language server.
|
|
8
|
+
# @todo abstract methods below should be verified to be overridden
|
|
9
|
+
# by type checker when mixin included by non-abstract class
|
|
10
|
+
module Conversions
|
|
11
|
+
# @!parse
|
|
12
|
+
# include Documenting
|
|
13
|
+
# include Common
|
|
14
|
+
|
|
15
|
+
# @return [Integer]
|
|
16
|
+
# @abstract
|
|
17
|
+
def completion_item_kind
|
|
18
|
+
raise NotImplementedError
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# @abstract
|
|
22
|
+
# @return [Boolean]
|
|
23
|
+
def deprecated?
|
|
24
|
+
raise NotImplementedError
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @abstract
|
|
28
|
+
def probed?
|
|
29
|
+
raise NotImplementedError
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# @abstract
|
|
33
|
+
def proxied?
|
|
34
|
+
raise NotImplementedError
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# @return [Hash]
|
|
38
|
+
def completion_item
|
|
39
|
+
@completion_item ||= {
|
|
40
|
+
label: name,
|
|
41
|
+
kind: completion_item_kind,
|
|
42
|
+
detail: detail,
|
|
43
|
+
data: {
|
|
44
|
+
path: path,
|
|
45
|
+
return_type: return_type.tag,
|
|
46
|
+
location: (location ? location.to_hash : nil),
|
|
47
|
+
deprecated: deprecated?
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# @return [Hash]
|
|
53
|
+
def resolve_completion_item
|
|
54
|
+
@resolve_completion_item ||= begin
|
|
55
|
+
extra = {}
|
|
56
|
+
alldoc = ''
|
|
57
|
+
# alldoc += link_documentation unless link_documentation.nil?
|
|
58
|
+
# alldoc += "\n\n" unless alldoc.empty?
|
|
59
|
+
alldoc += documentation unless documentation.nil?
|
|
60
|
+
extra[:documentation] = alldoc unless alldoc.empty?
|
|
61
|
+
completion_item.merge(extra)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# @return [::Array<Hash>]
|
|
66
|
+
def signature_help
|
|
67
|
+
[]
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# @return [String, nil]
|
|
71
|
+
def detail
|
|
72
|
+
# This property is not cached in an instance variable because it can
|
|
73
|
+
# change when pins get proxied.
|
|
74
|
+
detail = String.new
|
|
75
|
+
detail += "=#{probed? ? '~' : (proxied? ? '^' : '>')} #{return_type.to_s}" unless return_type.undefined?
|
|
76
|
+
detail.strip!
|
|
77
|
+
return nil if detail.empty?
|
|
78
|
+
detail
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Get a markdown-flavored link to a documentation page.
|
|
82
|
+
#
|
|
83
|
+
# @return [String]
|
|
84
|
+
def link_documentation
|
|
85
|
+
@link_documentation ||= generate_link
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# @return [String, nil]
|
|
89
|
+
def text_documentation
|
|
90
|
+
this_path = path || name || return_type.tag
|
|
91
|
+
return nil if this_path == 'undefined'
|
|
92
|
+
escape_brackets this_path
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# @return [void]
|
|
96
|
+
def reset_conversions
|
|
97
|
+
@completion_item = nil
|
|
98
|
+
@resolve_completion_item = nil
|
|
99
|
+
@signature_help = nil
|
|
100
|
+
@detail = nil
|
|
101
|
+
@link_documentation = nil
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
private
|
|
105
|
+
|
|
106
|
+
# @return [String, nil]
|
|
107
|
+
def generate_link
|
|
108
|
+
this_path = path || name || return_type.tag
|
|
109
|
+
return nil if this_path == 'undefined'
|
|
110
|
+
return nil if this_path.nil? || this_path == 'undefined'
|
|
111
|
+
return this_path if path.nil?
|
|
112
|
+
"[#{escape_brackets(this_path).gsub('_', '\\\\_')}](solargraph:/document?query=#{CGI.escape(this_path)})"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# @param text [String]
|
|
116
|
+
# @return [String]
|
|
117
|
+
def escape_brackets text
|
|
118
|
+
# text.gsub(/(\<|\>)/, "\\#{$1}")
|
|
119
|
+
text.gsub("<", '\<').gsub(">", '\>')
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|