jimeh-solargraph 0.40.4.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 +7 -0
- data/.github/workflows/ci.yml +54 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +24 -0
- data/.yardopts +2 -0
- data/CHANGELOG.md +1003 -0
- data/Gemfile +7 -0
- data/LICENSE +21 -0
- data/README.md +123 -0
- data/Rakefile +25 -0
- data/SPONSORS.md +15 -0
- data/bin/solargraph +5 -0
- data/jimeh-solargraph.gemspec +44 -0
- data/lib/.rubocop.yml +21 -0
- data/lib/solargraph.rb +67 -0
- data/lib/solargraph/api_map.rb +752 -0
- data/lib/solargraph/api_map/bundler_methods.rb +27 -0
- data/lib/solargraph/api_map/cache.rb +70 -0
- data/lib/solargraph/api_map/source_to_yard.rb +81 -0
- data/lib/solargraph/api_map/store.rb +256 -0
- data/lib/solargraph/bench.rb +30 -0
- data/lib/solargraph/compat.rb +23 -0
- data/lib/solargraph/complex_type.rb +213 -0
- data/lib/solargraph/complex_type/type_methods.rb +127 -0
- data/lib/solargraph/complex_type/unique_type.rb +75 -0
- data/lib/solargraph/convention.rb +47 -0
- data/lib/solargraph/convention/base.rb +33 -0
- data/lib/solargraph/convention/gemfile.rb +15 -0
- data/lib/solargraph/convention/gemspec.rb +22 -0
- data/lib/solargraph/convention/rspec.rb +21 -0
- data/lib/solargraph/converters/dd.rb +12 -0
- data/lib/solargraph/converters/dl.rb +12 -0
- data/lib/solargraph/converters/dt.rb +12 -0
- data/lib/solargraph/converters/misc.rb +1 -0
- data/lib/solargraph/diagnostics.rb +55 -0
- data/lib/solargraph/diagnostics/base.rb +29 -0
- data/lib/solargraph/diagnostics/require_not_found.rb +37 -0
- data/lib/solargraph/diagnostics/rubocop.rb +90 -0
- data/lib/solargraph/diagnostics/rubocop_helpers.rb +45 -0
- data/lib/solargraph/diagnostics/severities.rb +15 -0
- data/lib/solargraph/diagnostics/type_check.rb +54 -0
- data/lib/solargraph/diagnostics/update_errors.rb +41 -0
- data/lib/solargraph/documentor.rb +78 -0
- data/lib/solargraph/environ.rb +45 -0
- data/lib/solargraph/language_server.rb +19 -0
- data/lib/solargraph/language_server/completion_item_kinds.rb +35 -0
- data/lib/solargraph/language_server/error_codes.rb +20 -0
- data/lib/solargraph/language_server/host.rb +746 -0
- data/lib/solargraph/language_server/host/cataloger.rb +56 -0
- data/lib/solargraph/language_server/host/diagnoser.rb +81 -0
- data/lib/solargraph/language_server/host/dispatch.rb +112 -0
- data/lib/solargraph/language_server/host/sources.rb +156 -0
- data/lib/solargraph/language_server/message.rb +92 -0
- data/lib/solargraph/language_server/message/base.rb +85 -0
- data/lib/solargraph/language_server/message/cancel_request.rb +13 -0
- data/lib/solargraph/language_server/message/client.rb +11 -0
- data/lib/solargraph/language_server/message/client/register_capability.rb +15 -0
- data/lib/solargraph/language_server/message/completion_item.rb +11 -0
- data/lib/solargraph/language_server/message/completion_item/resolve.rb +57 -0
- data/lib/solargraph/language_server/message/exit_notification.rb +13 -0
- data/lib/solargraph/language_server/message/extended.rb +21 -0
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +100 -0
- data/lib/solargraph/language_server/message/extended/document.rb +20 -0
- data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -0
- data/lib/solargraph/language_server/message/extended/download_core.rb +23 -0
- data/lib/solargraph/language_server/message/extended/environment.rb +25 -0
- data/lib/solargraph/language_server/message/extended/search.rb +20 -0
- data/lib/solargraph/language_server/message/initialize.rb +153 -0
- data/lib/solargraph/language_server/message/initialized.rb +26 -0
- data/lib/solargraph/language_server/message/method_not_found.rb +16 -0
- data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -0
- data/lib/solargraph/language_server/message/shutdown.rb +13 -0
- data/lib/solargraph/language_server/message/text_document.rb +28 -0
- data/lib/solargraph/language_server/message/text_document/base.rb +19 -0
- data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -0
- data/lib/solargraph/language_server/message/text_document/completion.rb +57 -0
- data/lib/solargraph/language_server/message/text_document/definition.rb +38 -0
- data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -0
- data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -0
- data/lib/solargraph/language_server/message/text_document/document_symbol.rb +23 -0
- data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -0
- data/lib/solargraph/language_server/message/text_document/formatting.rb +105 -0
- data/lib/solargraph/language_server/message/text_document/hover.rb +44 -0
- data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -0
- data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -0
- data/lib/solargraph/language_server/message/text_document/references.rb +16 -0
- data/lib/solargraph/language_server/message/text_document/rename.rb +19 -0
- data/lib/solargraph/language_server/message/text_document/signature_help.rb +29 -0
- data/lib/solargraph/language_server/message/workspace.rb +14 -0
- data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +29 -0
- data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +33 -0
- data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -0
- data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -0
- data/lib/solargraph/language_server/message_types.rb +14 -0
- data/lib/solargraph/language_server/request.rb +24 -0
- data/lib/solargraph/language_server/symbol_kinds.rb +36 -0
- data/lib/solargraph/language_server/transport.rb +13 -0
- data/lib/solargraph/language_server/transport/adapter.rb +56 -0
- data/lib/solargraph/language_server/transport/data_reader.rb +72 -0
- data/lib/solargraph/language_server/uri_helpers.rb +49 -0
- data/lib/solargraph/library.rb +426 -0
- data/lib/solargraph/location.rb +37 -0
- data/lib/solargraph/logging.rb +27 -0
- data/lib/solargraph/page.rb +83 -0
- data/lib/solargraph/parser.rb +26 -0
- data/lib/solargraph/parser/comment_ripper.rb +52 -0
- data/lib/solargraph/parser/legacy.rb +12 -0
- data/lib/solargraph/parser/legacy/class_methods.rb +109 -0
- data/lib/solargraph/parser/legacy/flawed_builder.rb +16 -0
- data/lib/solargraph/parser/legacy/node_chainer.rb +118 -0
- data/lib/solargraph/parser/legacy/node_methods.rb +311 -0
- data/lib/solargraph/parser/legacy/node_processors.rb +54 -0
- data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/args_node.rb +35 -0
- data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +15 -0
- data/lib/solargraph/parser/legacy/node_processors/block_node.rb +22 -0
- data/lib/solargraph/parser/legacy/node_processors/casgn_node.rb +25 -0
- data/lib/solargraph/parser/legacy/node_processors/cvasgn_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/def_node.rb +63 -0
- data/lib/solargraph/parser/legacy/node_processors/defs_node.rb +36 -0
- data/lib/solargraph/parser/legacy/node_processors/gvasgn_node.rb +23 -0
- data/lib/solargraph/parser/legacy/node_processors/ivasgn_node.rb +38 -0
- data/lib/solargraph/parser/legacy/node_processors/lvasgn_node.rb +28 -0
- data/lib/solargraph/parser/legacy/node_processors/namespace_node.rb +39 -0
- data/lib/solargraph/parser/legacy/node_processors/orasgn_node.rb +16 -0
- data/lib/solargraph/parser/legacy/node_processors/resbody_node.rb +36 -0
- data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +21 -0
- data/lib/solargraph/parser/legacy/node_processors/send_node.rb +257 -0
- data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +18 -0
- data/lib/solargraph/parser/node_methods.rb +43 -0
- data/lib/solargraph/parser/node_processor.rb +43 -0
- data/lib/solargraph/parser/node_processor/base.rb +80 -0
- data/lib/solargraph/parser/region.rb +66 -0
- data/lib/solargraph/parser/rubyvm.rb +40 -0
- data/lib/solargraph/parser/rubyvm/class_methods.rb +150 -0
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +135 -0
- data/lib/solargraph/parser/rubyvm/node_methods.rb +301 -0
- data/lib/solargraph/parser/rubyvm/node_processors.rb +62 -0
- data/lib/solargraph/parser/rubyvm/node_processors/alias_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +86 -0
- data/lib/solargraph/parser/rubyvm/node_processors/begin_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +22 -0
- data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +22 -0
- data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +64 -0
- data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +57 -0
- data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +23 -0
- data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +38 -0
- data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +39 -0
- data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +20 -0
- data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +27 -0
- data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +39 -0
- data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +26 -0
- data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +45 -0
- data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +21 -0
- data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +15 -0
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +277 -0
- data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +18 -0
- data/lib/solargraph/parser/snippet.rb +13 -0
- data/lib/solargraph/pin.rb +36 -0
- data/lib/solargraph/pin/base.rb +296 -0
- data/lib/solargraph/pin/base_variable.rb +84 -0
- data/lib/solargraph/pin/block.rb +62 -0
- data/lib/solargraph/pin/class_variable.rb +8 -0
- data/lib/solargraph/pin/closure.rb +37 -0
- data/lib/solargraph/pin/common.rb +70 -0
- data/lib/solargraph/pin/constant.rb +43 -0
- data/lib/solargraph/pin/conversions.rb +96 -0
- data/lib/solargraph/pin/documenting.rb +105 -0
- data/lib/solargraph/pin/duck_method.rb +16 -0
- data/lib/solargraph/pin/global_variable.rb +8 -0
- data/lib/solargraph/pin/instance_variable.rb +30 -0
- data/lib/solargraph/pin/keyword.rb +15 -0
- data/lib/solargraph/pin/keyword_param.rb +8 -0
- data/lib/solargraph/pin/local_variable.rb +21 -0
- data/lib/solargraph/pin/localized.rb +43 -0
- data/lib/solargraph/pin/method.rb +245 -0
- data/lib/solargraph/pin/method_alias.rb +31 -0
- data/lib/solargraph/pin/namespace.rb +85 -0
- data/lib/solargraph/pin/parameter.rb +206 -0
- data/lib/solargraph/pin/proxy_type.rb +29 -0
- data/lib/solargraph/pin/reference.rb +14 -0
- data/lib/solargraph/pin/reference/extend.rb +10 -0
- data/lib/solargraph/pin/reference/include.rb +10 -0
- data/lib/solargraph/pin/reference/override.rb +29 -0
- data/lib/solargraph/pin/reference/prepend.rb +10 -0
- data/lib/solargraph/pin/reference/require.rb +14 -0
- data/lib/solargraph/pin/reference/superclass.rb +10 -0
- data/lib/solargraph/pin/singleton.rb +11 -0
- data/lib/solargraph/pin/symbol.rb +47 -0
- data/lib/solargraph/position.rb +100 -0
- data/lib/solargraph/range.rb +95 -0
- data/lib/solargraph/server_methods.rb +16 -0
- data/lib/solargraph/shell.rb +222 -0
- data/lib/solargraph/source.rb +537 -0
- data/lib/solargraph/source/chain.rb +154 -0
- data/lib/solargraph/source/chain/block_variable.rb +13 -0
- data/lib/solargraph/source/chain/call.rb +203 -0
- data/lib/solargraph/source/chain/class_variable.rb +13 -0
- data/lib/solargraph/source/chain/constant.rb +75 -0
- data/lib/solargraph/source/chain/global_variable.rb +13 -0
- data/lib/solargraph/source/chain/head.rb +35 -0
- data/lib/solargraph/source/chain/instance_variable.rb +13 -0
- data/lib/solargraph/source/chain/link.rb +67 -0
- data/lib/solargraph/source/chain/literal.rb +23 -0
- data/lib/solargraph/source/chain/or.rb +23 -0
- data/lib/solargraph/source/chain/variable.rb +13 -0
- data/lib/solargraph/source/chain/z_super.rb +30 -0
- data/lib/solargraph/source/change.rb +79 -0
- data/lib/solargraph/source/cursor.rb +164 -0
- data/lib/solargraph/source/encoding_fixes.rb +23 -0
- data/lib/solargraph/source/source_chainer.rb +190 -0
- data/lib/solargraph/source/updater.rb +54 -0
- data/lib/solargraph/source_map.rb +188 -0
- data/lib/solargraph/source_map/clip.rb +224 -0
- data/lib/solargraph/source_map/completion.rb +23 -0
- data/lib/solargraph/source_map/mapper.rb +215 -0
- data/lib/solargraph/type_checker.rb +503 -0
- data/lib/solargraph/type_checker/checks.rb +99 -0
- data/lib/solargraph/type_checker/param_def.rb +35 -0
- data/lib/solargraph/type_checker/problem.rb +32 -0
- data/lib/solargraph/type_checker/rules.rb +57 -0
- data/lib/solargraph/version.rb +5 -0
- data/lib/solargraph/views/_method.erb +62 -0
- data/lib/solargraph/views/_name_type_tag.erb +10 -0
- data/lib/solargraph/views/_namespace.erb +24 -0
- data/lib/solargraph/views/document.erb +23 -0
- data/lib/solargraph/views/environment.erb +58 -0
- data/lib/solargraph/views/layout.erb +44 -0
- data/lib/solargraph/views/search.erb +11 -0
- data/lib/solargraph/workspace.rb +209 -0
- data/lib/solargraph/workspace/config.rb +230 -0
- data/lib/solargraph/yard_map.rb +435 -0
- data/lib/solargraph/yard_map/cache.rb +19 -0
- data/lib/solargraph/yard_map/core_docs.rb +170 -0
- data/lib/solargraph/yard_map/core_fills.rb +185 -0
- data/lib/solargraph/yard_map/core_gen.rb +76 -0
- data/lib/solargraph/yard_map/helpers.rb +16 -0
- data/lib/solargraph/yard_map/mapper.rb +77 -0
- data/lib/solargraph/yard_map/mapper/to_constant.rb +25 -0
- data/lib/solargraph/yard_map/mapper/to_method.rb +78 -0
- data/lib/solargraph/yard_map/mapper/to_namespace.rb +27 -0
- data/lib/solargraph/yard_map/rdoc_to_yard.rb +140 -0
- data/lib/solargraph/yard_map/stdlib_fills.rb +43 -0
- data/lib/solargraph/yard_map/to_method.rb +79 -0
- data/lib/yard-solargraph.rb +30 -0
- data/yardoc/2.2.2.tar.gz +0 -0
- metadata +564 -0
@@ -0,0 +1,206 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module Pin
|
5
|
+
class Parameter < LocalVariable
|
6
|
+
attr_reader :decl
|
7
|
+
|
8
|
+
attr_reader :asgn_code
|
9
|
+
|
10
|
+
def initialize decl: :arg, asgn_code: nil, **splat
|
11
|
+
super(**splat)
|
12
|
+
@asgn_code = asgn_code
|
13
|
+
@decl = decl
|
14
|
+
end
|
15
|
+
|
16
|
+
def keyword?
|
17
|
+
[:kwarg, :kwoptarg].include?(decl)
|
18
|
+
end
|
19
|
+
|
20
|
+
def kwrestarg?
|
21
|
+
decl == :kwrestarg || (assignment && [:HASH, :hash].include?(assignment.type))
|
22
|
+
end
|
23
|
+
|
24
|
+
def restarg?
|
25
|
+
decl == :restarg
|
26
|
+
end
|
27
|
+
|
28
|
+
def rest?
|
29
|
+
decl == :restarg || decl == :kwrestarg
|
30
|
+
end
|
31
|
+
|
32
|
+
def full
|
33
|
+
case decl
|
34
|
+
when :optarg
|
35
|
+
"#{name} = #{asgn_code}"
|
36
|
+
when :kwarg
|
37
|
+
"#{name}:"
|
38
|
+
when :kwoptarg
|
39
|
+
"#{name}: #{asgn_code}"
|
40
|
+
when :restarg
|
41
|
+
"*#{name}"
|
42
|
+
when :kwrestarg
|
43
|
+
"**#{name}"
|
44
|
+
when :block, :blockarg
|
45
|
+
"&#{name}"
|
46
|
+
else
|
47
|
+
name
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def return_type
|
52
|
+
if @return_type.nil?
|
53
|
+
@return_type = ComplexType::UNDEFINED
|
54
|
+
found = param_tag
|
55
|
+
@return_type = ComplexType.try_parse(*found.types) unless found.nil? or found.types.nil?
|
56
|
+
if @return_type.undefined?
|
57
|
+
if decl == :restarg
|
58
|
+
@return_type = ComplexType.try_parse('Array')
|
59
|
+
elsif decl == :kwrestarg
|
60
|
+
@return_type = ComplexType.try_parse('Hash')
|
61
|
+
elsif decl == :blockarg
|
62
|
+
@return_type = ComplexType.try_parse('Proc')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
super
|
67
|
+
@return_type
|
68
|
+
end
|
69
|
+
|
70
|
+
# The parameter's zero-based location in the block's signature.
|
71
|
+
#
|
72
|
+
# @return [Integer]
|
73
|
+
def index
|
74
|
+
closure.parameter_names.index(name)
|
75
|
+
end
|
76
|
+
|
77
|
+
# @param api_map [ApiMap]
|
78
|
+
def typify api_map
|
79
|
+
return return_type.qualify(api_map, closure.context.namespace) unless return_type.undefined?
|
80
|
+
closure.is_a?(Pin::Block) ? typify_block_param(api_map) : typify_method_param(api_map)
|
81
|
+
end
|
82
|
+
|
83
|
+
def documentation
|
84
|
+
tag = param_tag
|
85
|
+
return '' if tag.nil? || tag.text.nil?
|
86
|
+
tag.text
|
87
|
+
end
|
88
|
+
|
89
|
+
def try_merge! pin
|
90
|
+
return false unless super && closure == pin.closure
|
91
|
+
true
|
92
|
+
end
|
93
|
+
|
94
|
+
def probe api_map
|
95
|
+
typify api_map
|
96
|
+
end
|
97
|
+
|
98
|
+
private
|
99
|
+
|
100
|
+
# @return [YARD::Tags::Tag]
|
101
|
+
def param_tag
|
102
|
+
found = nil
|
103
|
+
params = closure.docstring.tags(:param)
|
104
|
+
params.each do |p|
|
105
|
+
next unless p.name == name
|
106
|
+
found = p
|
107
|
+
break
|
108
|
+
end
|
109
|
+
if found.nil? and !index.nil?
|
110
|
+
found = params[index] if params[index] && (params[index].name.nil? || params[index].name.empty?)
|
111
|
+
end
|
112
|
+
found
|
113
|
+
end
|
114
|
+
|
115
|
+
# @param api_map [ApiMap]
|
116
|
+
# @return [ComplexType]
|
117
|
+
def typify_block_param api_map
|
118
|
+
if closure.is_a?(Pin::Block) && closure.receiver
|
119
|
+
chain = Parser.chain(closure.receiver, filename)
|
120
|
+
clip = api_map.clip_at(location.filename, location.range.start)
|
121
|
+
locals = clip.locals - [self]
|
122
|
+
meths = chain.define(api_map, closure, locals)
|
123
|
+
meths.each do |meth|
|
124
|
+
if meth.docstring.has_tag?(:yieldparam_single_parameter)
|
125
|
+
type = chain.base.infer(api_map, closure, locals)
|
126
|
+
if type.defined? && !type.subtypes.empty?
|
127
|
+
bmeth = chain.base.define(api_map, closure, locals).first
|
128
|
+
return type.subtypes.first.qualify(api_map, bmeth.context.namespace)
|
129
|
+
end
|
130
|
+
else
|
131
|
+
yps = meth.docstring.tags(:yieldparam)
|
132
|
+
unless yps[index].nil? or yps[index].types.nil? or yps[index].types.empty?
|
133
|
+
return ComplexType.try_parse(yps[index].types.first).self_to(chain.base.infer(api_map, closure, locals).namespace).qualify(api_map, meth.context.namespace)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
ComplexType::UNDEFINED
|
139
|
+
end
|
140
|
+
|
141
|
+
# @param api_map [ApiMap]
|
142
|
+
# @return [ComplexType]
|
143
|
+
def typify_method_param api_map
|
144
|
+
meths = api_map.get_method_stack(closure.full_context.namespace, closure.name, scope: closure.scope)
|
145
|
+
# meths.shift # Ignore the first one
|
146
|
+
meths.each do |meth|
|
147
|
+
found = nil
|
148
|
+
params = meth.docstring.tags(:param)
|
149
|
+
if params.empty?
|
150
|
+
params = see_reference(docstring, api_map)
|
151
|
+
end
|
152
|
+
params.each do |p|
|
153
|
+
next unless p.name == name
|
154
|
+
found = p
|
155
|
+
break
|
156
|
+
end
|
157
|
+
if found.nil? and !index.nil?
|
158
|
+
found = params[index] if params[index] && (params[index].name.nil? || params[index].name.empty?)
|
159
|
+
end
|
160
|
+
return ComplexType.try_parse(*found.types).qualify(api_map, meth.context.namespace) unless found.nil? || found.types.nil?
|
161
|
+
end
|
162
|
+
ComplexType::UNDEFINED
|
163
|
+
end
|
164
|
+
|
165
|
+
# @param heredoc [YARD::Docstring]
|
166
|
+
# @param api_map [ApiMap]
|
167
|
+
# @param skip [Array]
|
168
|
+
# @return [Array<YARD::Tags::Tag>]
|
169
|
+
def see_reference heredoc, api_map, skip = []
|
170
|
+
heredoc.ref_tags.each do |ref|
|
171
|
+
next unless ref.tag_name == 'param' && ref.owner
|
172
|
+
result = resolve_reference(ref.owner.to_s, api_map, skip)
|
173
|
+
return result unless result.nil?
|
174
|
+
end
|
175
|
+
[]
|
176
|
+
end
|
177
|
+
|
178
|
+
# @param ref [String]
|
179
|
+
# @param api_map [ApiMap]
|
180
|
+
# @param skip [Array]
|
181
|
+
# @return [Array<YARD::Tags::Tag>, nil]
|
182
|
+
def resolve_reference ref, api_map, skip
|
183
|
+
return nil if skip.include?(ref)
|
184
|
+
skip.push ref
|
185
|
+
parts = ref.split(/[\.#]/)
|
186
|
+
if parts.first.empty?
|
187
|
+
path = "#{namespace}#{ref}"
|
188
|
+
else
|
189
|
+
fqns = api_map.qualify(parts.first, namespace)
|
190
|
+
return nil if fqns.nil?
|
191
|
+
path = fqns + ref[parts.first.length] + parts.last
|
192
|
+
end
|
193
|
+
pins = api_map.get_path_pins(path)
|
194
|
+
pins.each do |pin|
|
195
|
+
params = pin.docstring.tags(:param)
|
196
|
+
return params unless params.empty?
|
197
|
+
end
|
198
|
+
pins.each do |pin|
|
199
|
+
params = see_reference(pin.docstring, api_map, skip)
|
200
|
+
return params unless params.empty?
|
201
|
+
end
|
202
|
+
nil
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module Pin
|
5
|
+
class ProxyType < Base
|
6
|
+
# @param return_type [ComplexType]
|
7
|
+
def initialize return_type: ComplexType::UNDEFINED, **splat
|
8
|
+
super(**splat)
|
9
|
+
@return_type = return_type
|
10
|
+
end
|
11
|
+
|
12
|
+
def context
|
13
|
+
@return_type
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param return_type [ComplexType]
|
17
|
+
# @return [ProxyType]
|
18
|
+
def self.anonymous return_type
|
19
|
+
parts = return_type.namespace.split('::')
|
20
|
+
namespace = parts[0..-2].join('::').to_s
|
21
|
+
name = parts.last.to_s
|
22
|
+
# ProxyType.new(nil, namespace, name, return_type)
|
23
|
+
ProxyType.new(
|
24
|
+
closure: Solargraph::Pin::Namespace.new(name: namespace), return_type: return_type
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module Pin
|
5
|
+
class Reference < Base
|
6
|
+
autoload :Require, 'solargraph/pin/reference/require'
|
7
|
+
autoload :Superclass, 'solargraph/pin/reference/superclass'
|
8
|
+
autoload :Include, 'solargraph/pin/reference/include'
|
9
|
+
autoload :Prepend, 'solargraph/pin/reference/prepend'
|
10
|
+
autoload :Extend, 'solargraph/pin/reference/extend'
|
11
|
+
autoload :Override, 'solargraph/pin/reference/override'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module Pin
|
5
|
+
class Reference
|
6
|
+
class Override < Reference
|
7
|
+
# @return [Array<YARD::Tags::Tag>]
|
8
|
+
attr_reader :tags
|
9
|
+
|
10
|
+
# @return [Array<Symbol>]
|
11
|
+
attr_reader :delete
|
12
|
+
|
13
|
+
def initialize location, name, tags, delete = []
|
14
|
+
super(location: location, name: name)
|
15
|
+
@tags = tags
|
16
|
+
@delete = delete
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.method_return name, *tags, delete: []
|
20
|
+
new(nil, name, [YARD::Tags::Tag.new('return', nil, tags)], delete)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.from_comment name, comment
|
24
|
+
new(nil, name, Solargraph::Source.parse_docstring(comment).to_docstring.tags)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
module Pin
|
5
|
+
class Symbol < Base
|
6
|
+
# @param location [Solargraph::Location]
|
7
|
+
# @param name [String]
|
8
|
+
def initialize location, name
|
9
|
+
super(location: location, name: name)
|
10
|
+
# @name = name
|
11
|
+
# @location = location
|
12
|
+
end
|
13
|
+
|
14
|
+
def namespace
|
15
|
+
''
|
16
|
+
end
|
17
|
+
|
18
|
+
def path
|
19
|
+
''
|
20
|
+
end
|
21
|
+
|
22
|
+
def completion_item_kind
|
23
|
+
Solargraph::LanguageServer::CompletionItemKinds::KEYWORD
|
24
|
+
end
|
25
|
+
|
26
|
+
def comments
|
27
|
+
''
|
28
|
+
end
|
29
|
+
|
30
|
+
def return_type
|
31
|
+
@return_type ||= Solargraph::ComplexType::SYMBOL
|
32
|
+
end
|
33
|
+
|
34
|
+
def directives
|
35
|
+
[]
|
36
|
+
end
|
37
|
+
|
38
|
+
def visibility
|
39
|
+
:public
|
40
|
+
end
|
41
|
+
|
42
|
+
def deprecated?
|
43
|
+
false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Solargraph
|
4
|
+
# The zero-based line and column numbers of a position in a string.
|
5
|
+
#
|
6
|
+
class Position
|
7
|
+
# @return [Integer]
|
8
|
+
attr_reader :line
|
9
|
+
|
10
|
+
# @return [Integer]
|
11
|
+
attr_reader :character
|
12
|
+
|
13
|
+
alias column character
|
14
|
+
|
15
|
+
# @param line [Integer]
|
16
|
+
# @param character [Integer]
|
17
|
+
def initialize line, character
|
18
|
+
@line = line
|
19
|
+
@character = character
|
20
|
+
end
|
21
|
+
|
22
|
+
# Get a hash of the position. This representation is suitable for use in
|
23
|
+
# the language server protocol.
|
24
|
+
#
|
25
|
+
# @return [Hash]
|
26
|
+
def to_hash
|
27
|
+
{
|
28
|
+
line: line,
|
29
|
+
character: character
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def inspect
|
34
|
+
"#<#{self.class} #{line}, #{character}>"
|
35
|
+
end
|
36
|
+
|
37
|
+
# Get a numeric offset for the specified text and position.
|
38
|
+
#
|
39
|
+
# @param text [String]
|
40
|
+
# @param position [Position]
|
41
|
+
# @return [Integer]
|
42
|
+
def self.to_offset text, position
|
43
|
+
return 0 if text.empty?
|
44
|
+
text.lines[0...position.line].sum(&:length) + position.character
|
45
|
+
end
|
46
|
+
|
47
|
+
# Get a numeric offset for the specified text and a position identified
|
48
|
+
# by its line and character.
|
49
|
+
#
|
50
|
+
# @param text [String]
|
51
|
+
# @param line [Integer]
|
52
|
+
# @param character [Integer]
|
53
|
+
# @return [Integer]
|
54
|
+
def self.line_char_to_offset text, line, character
|
55
|
+
to_offset(text, Position.new(line, character))
|
56
|
+
end
|
57
|
+
|
58
|
+
# Get a position for the specified text and offset.
|
59
|
+
#
|
60
|
+
# @param text [String]
|
61
|
+
# @param offset [Integer]
|
62
|
+
# @return [Position]
|
63
|
+
def self.from_offset text, offset
|
64
|
+
cursor = 0
|
65
|
+
line = 0
|
66
|
+
character = nil
|
67
|
+
text.lines.each do |l|
|
68
|
+
line_length = l.length
|
69
|
+
char_length = l.chomp.length
|
70
|
+
if cursor + char_length >= offset
|
71
|
+
character = offset - cursor
|
72
|
+
break
|
73
|
+
end
|
74
|
+
cursor += line_length
|
75
|
+
line += 1
|
76
|
+
end
|
77
|
+
character = 0 if character.nil? and (cursor - offset).between?(0, 1)
|
78
|
+
raise InvalidOffsetError if character.nil?
|
79
|
+
Position.new(line, character)
|
80
|
+
end
|
81
|
+
|
82
|
+
# A helper method for generating positions from arrays of integers. The
|
83
|
+
# original parameter is returned if it is already a position.
|
84
|
+
#
|
85
|
+
# @raise [ArgumentError] if the object cannot be converted to a position.
|
86
|
+
#
|
87
|
+
# @param object [Position, Array(Integer, Integer)]
|
88
|
+
# @return [Position]
|
89
|
+
def self.normalize object
|
90
|
+
return object if object.is_a?(Position)
|
91
|
+
return Position.new(object[0], object[1]) if object.is_a?(Array)
|
92
|
+
raise ArgumentError, "Unable to convert #{object.class} to Position"
|
93
|
+
end
|
94
|
+
|
95
|
+
def == other
|
96
|
+
return false unless other.is_a?(Position)
|
97
|
+
line == other.line and character == other.character
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|