solargraph 0.58.1 → 0.59.0.dev.1
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/.envrc +3 -0
- data/.github/workflows/linting.yml +4 -5
- data/.github/workflows/plugins.yml +40 -36
- data/.github/workflows/rspec.yml +45 -13
- data/.github/workflows/typecheck.yml +2 -2
- data/.rubocop_todo.yml +27 -49
- data/README.md +3 -3
- data/Rakefile +1 -0
- data/lib/solargraph/api_map/cache.rb +110 -110
- data/lib/solargraph/api_map/constants.rb +289 -279
- data/lib/solargraph/api_map/index.rb +204 -193
- data/lib/solargraph/api_map/source_to_yard.rb +109 -97
- data/lib/solargraph/api_map/store.rb +387 -384
- data/lib/solargraph/api_map.rb +1000 -945
- data/lib/solargraph/complex_type/conformance.rb +176 -0
- data/lib/solargraph/complex_type/type_methods.rb +242 -228
- data/lib/solargraph/complex_type/unique_type.rb +632 -482
- data/lib/solargraph/complex_type.rb +549 -444
- data/lib/solargraph/convention/data_definition/data_definition_node.rb +93 -91
- data/lib/solargraph/convention/data_definition.rb +108 -105
- data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +62 -61
- data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +103 -102
- data/lib/solargraph/convention/struct_definition.rb +168 -164
- data/lib/solargraph/diagnostics/require_not_found.rb +54 -53
- data/lib/solargraph/diagnostics/rubocop.rb +119 -118
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +70 -68
- data/lib/solargraph/diagnostics/type_check.rb +56 -55
- data/lib/solargraph/doc_map.rb +200 -439
- data/lib/solargraph/equality.rb +34 -34
- data/lib/solargraph/gem_pins.rb +97 -98
- data/lib/solargraph/language_server/host/dispatch.rb +131 -130
- data/lib/solargraph/language_server/host/message_worker.rb +113 -112
- data/lib/solargraph/language_server/host/sources.rb +100 -99
- data/lib/solargraph/language_server/host.rb +883 -878
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +109 -114
- data/lib/solargraph/language_server/message/extended/document.rb +24 -23
- data/lib/solargraph/language_server/message/text_document/completion.rb +58 -56
- data/lib/solargraph/language_server/message/text_document/definition.rb +42 -40
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +28 -26
- data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
- data/lib/solargraph/language_server/message/text_document/hover.rb +60 -58
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +25 -24
- data/lib/solargraph/language_server/message/text_document/type_definition.rb +27 -25
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +25 -23
- data/lib/solargraph/library.rb +729 -683
- data/lib/solargraph/location.rb +87 -82
- data/lib/solargraph/logging.rb +57 -37
- data/lib/solargraph/parser/comment_ripper.rb +76 -69
- data/lib/solargraph/parser/flow_sensitive_typing.rb +483 -255
- data/lib/solargraph/parser/node_processor/base.rb +122 -92
- data/lib/solargraph/parser/node_processor.rb +63 -62
- data/lib/solargraph/parser/parser_gem/class_methods.rb +167 -149
- data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
- data/lib/solargraph/parser/parser_gem/node_methods.rb +506 -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 +61 -59
- data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +24 -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 +60 -53
- data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
- data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +41 -40
- data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +30 -29
- data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +61 -59
- data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
- data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
- data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
- data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +39 -38
- data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +53 -52
- data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +296 -291
- data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
- data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +33 -29
- data/lib/solargraph/parser/parser_gem/node_processors.rb +74 -70
- data/lib/solargraph/parser/region.rb +75 -69
- data/lib/solargraph/parser/snippet.rb +17 -17
- data/lib/solargraph/pin/base.rb +761 -729
- data/lib/solargraph/pin/base_variable.rb +418 -126
- data/lib/solargraph/pin/block.rb +126 -104
- data/lib/solargraph/pin/breakable.rb +13 -9
- data/lib/solargraph/pin/callable.rb +278 -231
- data/lib/solargraph/pin/closure.rb +68 -72
- data/lib/solargraph/pin/common.rb +94 -79
- data/lib/solargraph/pin/compound_statement.rb +55 -0
- data/lib/solargraph/pin/conversions.rb +124 -123
- data/lib/solargraph/pin/delegated_method.rb +131 -120
- data/lib/solargraph/pin/documenting.rb +115 -114
- data/lib/solargraph/pin/instance_variable.rb +38 -34
- data/lib/solargraph/pin/keyword.rb +16 -20
- data/lib/solargraph/pin/local_variable.rb +31 -75
- data/lib/solargraph/pin/method.rb +720 -672
- data/lib/solargraph/pin/method_alias.rb +42 -34
- data/lib/solargraph/pin/namespace.rb +121 -115
- data/lib/solargraph/pin/parameter.rb +338 -275
- data/lib/solargraph/pin/proxy_type.rb +40 -39
- data/lib/solargraph/pin/reference/override.rb +47 -47
- data/lib/solargraph/pin/reference/superclass.rb +17 -15
- data/lib/solargraph/pin/reference.rb +41 -39
- data/lib/solargraph/pin/search.rb +62 -61
- data/lib/solargraph/pin/signature.rb +69 -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 +46 -44
- data/lib/solargraph/pin_cache.rb +665 -245
- data/lib/solargraph/position.rb +118 -119
- data/lib/solargraph/range.rb +112 -112
- data/lib/solargraph/rbs_map/conversions.rb +846 -823
- data/lib/solargraph/rbs_map/core_map.rb +65 -58
- data/lib/solargraph/rbs_map/stdlib_map.rb +72 -43
- data/lib/solargraph/rbs_map.rb +217 -163
- data/lib/solargraph/shell.rb +397 -352
- data/lib/solargraph/source/chain/call.rb +372 -337
- data/lib/solargraph/source/chain/constant.rb +28 -26
- data/lib/solargraph/source/chain/hash.rb +35 -34
- data/lib/solargraph/source/chain/if.rb +29 -28
- data/lib/solargraph/source/chain/instance_variable.rb +34 -13
- data/lib/solargraph/source/chain/literal.rb +53 -48
- data/lib/solargraph/source/chain/or.rb +31 -23
- data/lib/solargraph/source/chain.rb +294 -291
- data/lib/solargraph/source/change.rb +89 -82
- data/lib/solargraph/source/cursor.rb +172 -166
- data/lib/solargraph/source/source_chainer.rb +204 -194
- data/lib/solargraph/source/updater.rb +59 -55
- data/lib/solargraph/source.rb +524 -498
- data/lib/solargraph/source_map/clip.rb +237 -226
- data/lib/solargraph/source_map/data.rb +37 -34
- data/lib/solargraph/source_map/mapper.rb +282 -259
- data/lib/solargraph/source_map.rb +220 -212
- data/lib/solargraph/type_checker/problem.rb +34 -32
- data/lib/solargraph/type_checker/rules.rb +157 -84
- data/lib/solargraph/type_checker.rb +895 -814
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/workspace/config.rb +257 -255
- data/lib/solargraph/workspace/gemspecs.rb +367 -0
- data/lib/solargraph/workspace/require_paths.rb +98 -97
- data/lib/solargraph/workspace.rb +362 -220
- data/lib/solargraph/yard_map/helpers.rb +45 -44
- data/lib/solargraph/yard_map/mapper/to_method.rb +134 -130
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
- data/lib/solargraph/yard_map/mapper.rb +84 -79
- data/lib/solargraph/yardoc.rb +97 -87
- data/lib/solargraph.rb +126 -105
- data/rbs/fills/rubygems/0/dependency.rbs +193 -0
- data/rbs/fills/tuple/tuple.rbs +28 -0
- data/rbs/shims/ast/0/node.rbs +5 -0
- data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
- data/rbs_collection.yaml +1 -1
- data/solargraph.gemspec +2 -1
- metadata +22 -17
- data/lib/solargraph/type_checker/checks.rb +0 -124
- data/lib/solargraph/type_checker/param_def.rb +0 -37
- data/lib/solargraph/yard_map/to_method.rb +0 -89
- data/sig/shims/ast/0/node.rbs +0 -5
- /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,94 @@
|
|
|
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
|
-
#
|
|
10
|
-
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
# @
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
# @
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
+
# @!method reset_generated!
|
|
10
|
+
# @abstract
|
|
11
|
+
# @return [void]
|
|
12
|
+
# @type @closure [Pin::Closure, nil]
|
|
13
|
+
# @type @binder [ComplexType, ComplexType::UniqueType, nil]
|
|
14
|
+
|
|
15
|
+
# @todo Missed nil violation
|
|
16
|
+
# @return [Location, nil]
|
|
17
|
+
attr_accessor :location
|
|
18
|
+
|
|
19
|
+
# @param value [Pin::Closure]
|
|
20
|
+
# @return [void]
|
|
21
|
+
def closure=(value)
|
|
22
|
+
@closure = value
|
|
23
|
+
# remove cached values generated from closure
|
|
24
|
+
reset_generated!
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @return [Pin::Closure, nil]
|
|
28
|
+
def closure
|
|
29
|
+
Solargraph.assert_or_log(:closure, "Closure not set on #{self.class} #{name.inspect} from #{source.inspect}") unless @closure
|
|
30
|
+
@closure
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# @return [String]
|
|
34
|
+
def name
|
|
35
|
+
@name ||= ''
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# @todo redundant with Base#return_type?
|
|
39
|
+
# @return [ComplexType]
|
|
40
|
+
def return_type
|
|
41
|
+
@return_type ||= ComplexType::UNDEFINED
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# @return [ComplexType, ComplexType::UniqueType]
|
|
45
|
+
def context
|
|
46
|
+
# Get the static context from the nearest namespace
|
|
47
|
+
@context ||= find_context
|
|
48
|
+
end
|
|
49
|
+
alias full_context context
|
|
50
|
+
|
|
51
|
+
# @return [String]
|
|
52
|
+
def namespace
|
|
53
|
+
context.namespace.to_s
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# @return [ComplexType, ComplexType::UniqueType]
|
|
57
|
+
# @sg-ignore https://github.com/castwide/solargraph/pull/1100
|
|
58
|
+
def binder
|
|
59
|
+
@binder || context
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# @return [String]
|
|
63
|
+
def comments
|
|
64
|
+
@comments ||= ''
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# @return [String]
|
|
68
|
+
def path
|
|
69
|
+
@path ||= name.empty? ? context.namespace : "#{context.namespace}::#{name}"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
protected
|
|
73
|
+
|
|
74
|
+
attr_writer :context
|
|
75
|
+
|
|
76
|
+
private
|
|
77
|
+
|
|
78
|
+
# @return [ComplexType]
|
|
79
|
+
def find_context
|
|
80
|
+
here = closure
|
|
81
|
+
until here.nil?
|
|
82
|
+
if here.is_a?(Pin::Namespace)
|
|
83
|
+
return here.return_type
|
|
84
|
+
elsif here.is_a?(Pin::Method)
|
|
85
|
+
return here.context
|
|
86
|
+
end
|
|
87
|
+
# @sg-ignore Need to add nil check here
|
|
88
|
+
here = here.closure
|
|
89
|
+
end
|
|
90
|
+
ComplexType::ROOT
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
module Solargraph
|
|
2
|
+
module Pin
|
|
3
|
+
# A series of statements where if a given statement executes, /all
|
|
4
|
+
# of the previous statements in the sequence must have executed as
|
|
5
|
+
# well/. In other words, the statements are run from the top in
|
|
6
|
+
# sequence, until interrupted by something like a
|
|
7
|
+
# return/break/next/raise/etc.
|
|
8
|
+
#
|
|
9
|
+
# This mix-in is used in flow sensitive typing to determine how
|
|
10
|
+
# far we can assume a given assertion about a type can be trusted
|
|
11
|
+
# to be true.
|
|
12
|
+
#
|
|
13
|
+
# Some examples in Ruby:
|
|
14
|
+
#
|
|
15
|
+
# * Bodies of methods and Ruby blocks
|
|
16
|
+
# * Branches of conditionals and loops - if/elsif/else,
|
|
17
|
+
# unless/else, when, until, ||=, ?:, switch/case/else
|
|
18
|
+
# * The body of begin-end/try/rescue/ensure statements
|
|
19
|
+
#
|
|
20
|
+
# Compare/contrast with:
|
|
21
|
+
#
|
|
22
|
+
# * Scope - a sequence where variables declared are not available
|
|
23
|
+
# after the end of the scope. Note that this is not necessarily
|
|
24
|
+
# true for a compound statement.
|
|
25
|
+
# * Compound statement - synonym
|
|
26
|
+
# * Block - in Ruby this has a special meaning (a closure passed to a method), but
|
|
27
|
+
# in general parlance this is also a synonym.
|
|
28
|
+
# * Closure - a sequence which is also a scope
|
|
29
|
+
# * Namespace - a named sequence which is also a scope and a
|
|
30
|
+
# closure
|
|
31
|
+
#
|
|
32
|
+
# See:
|
|
33
|
+
# https://cse.buffalo.edu/~regan/cse305/RubyBNF.pdf
|
|
34
|
+
# https://ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/syntax.html
|
|
35
|
+
# https://en.wikipedia.org/wiki/Block_(programming)
|
|
36
|
+
#
|
|
37
|
+
# Note:
|
|
38
|
+
#
|
|
39
|
+
# Just because statement #1 in a sequence is executed, it doesn't
|
|
40
|
+
# mean that future ones will. Consider the effect of
|
|
41
|
+
# break/next/return/raise/etc. on control flow.
|
|
42
|
+
class CompoundStatement < Pin::Base
|
|
43
|
+
attr_reader :node
|
|
44
|
+
|
|
45
|
+
# @param receiver [Parser::AST::Node, nil]
|
|
46
|
+
# @param node [Parser::AST::Node, nil]
|
|
47
|
+
# @param context [ComplexType, nil]
|
|
48
|
+
# @param args [::Array<Parameter>]
|
|
49
|
+
def initialize node: nil, **splat
|
|
50
|
+
super(**splat)
|
|
51
|
+
@node = node
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -1,123 +1,124 @@
|
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
# alldoc +=
|
|
59
|
-
alldoc +=
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
#
|
|
74
|
-
|
|
75
|
-
detail
|
|
76
|
-
detail.
|
|
77
|
-
|
|
78
|
-
detail
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
#
|
|
83
|
-
#
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
@
|
|
99
|
-
@
|
|
100
|
-
@
|
|
101
|
-
@
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return nil if this_path
|
|
111
|
-
return
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
# @
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
text.gsub(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
+
# @sg-ignore flow sensitive typing needs to handle attrs
|
|
47
|
+
location: (location ? location.to_hash : nil),
|
|
48
|
+
deprecated: deprecated?
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# @return [Hash]
|
|
54
|
+
def resolve_completion_item
|
|
55
|
+
@resolve_completion_item ||= begin
|
|
56
|
+
extra = {}
|
|
57
|
+
alldoc = ''
|
|
58
|
+
# alldoc += link_documentation unless link_documentation.nil?
|
|
59
|
+
# alldoc += "\n\n" unless alldoc.empty?
|
|
60
|
+
alldoc += documentation unless documentation.nil?
|
|
61
|
+
extra[:documentation] = alldoc unless alldoc.empty?
|
|
62
|
+
completion_item.merge(extra)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# @return [::Array<Hash>]
|
|
67
|
+
def signature_help
|
|
68
|
+
[]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# @return [String, nil]
|
|
72
|
+
def detail
|
|
73
|
+
# This property is not cached in an instance variable because it can
|
|
74
|
+
# change when pins get proxied.
|
|
75
|
+
detail = String.new
|
|
76
|
+
detail += "=#{probed? ? '~' : (proxied? ? '^' : '>')} #{return_type.to_s}" unless return_type.undefined?
|
|
77
|
+
detail.strip!
|
|
78
|
+
return nil if detail.empty?
|
|
79
|
+
detail
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Get a markdown-flavored link to a documentation page.
|
|
83
|
+
#
|
|
84
|
+
# @return [String, nil]
|
|
85
|
+
def link_documentation
|
|
86
|
+
@link_documentation ||= generate_link
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# @return [String, nil]
|
|
90
|
+
def text_documentation
|
|
91
|
+
this_path = path || name || return_type.tag
|
|
92
|
+
return nil if this_path == 'undefined'
|
|
93
|
+
escape_brackets this_path
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# @return [void]
|
|
97
|
+
def reset_conversions
|
|
98
|
+
@completion_item = nil
|
|
99
|
+
@resolve_completion_item = nil
|
|
100
|
+
@signature_help = nil
|
|
101
|
+
@detail = nil
|
|
102
|
+
@link_documentation = nil
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
private
|
|
106
|
+
|
|
107
|
+
# @return [String, nil]
|
|
108
|
+
def generate_link
|
|
109
|
+
this_path = path || name || return_type.tag
|
|
110
|
+
return nil if this_path == 'undefined'
|
|
111
|
+
return nil if this_path.nil? || this_path == 'undefined'
|
|
112
|
+
return this_path if path.nil?
|
|
113
|
+
"[#{escape_brackets(this_path).gsub('_', '\\\\_')}](solargraph:/document?query=#{CGI.escape(this_path)})"
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# @param text [String]
|
|
117
|
+
# @return [String]
|
|
118
|
+
def escape_brackets text
|
|
119
|
+
# text.gsub(/(\<|\>)/, "\\#{$1}")
|
|
120
|
+
text.gsub("<", '\<').gsub(">", '\>')
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|