solargraph 0.39.14 → 0.40.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/.travis.yml +4 -8
- data/CHANGELOG.md +988 -0
- data/Rakefile +12 -1
- data/SPONSORS.md +1 -0
- data/lib/solargraph.rb +2 -4
- data/lib/solargraph/api_map.rb +75 -74
- data/lib/solargraph/api_map/cache.rb +2 -2
- data/lib/solargraph/api_map/store.rb +4 -8
- data/lib/solargraph/{bundle.rb → bench.rb} +6 -2
- data/lib/solargraph/compat.rb +14 -0
- data/lib/solargraph/complex_type.rb +2 -2
- data/lib/solargraph/convention.rb +13 -4
- data/lib/solargraph/convention/base.rb +16 -8
- data/lib/solargraph/convention/gemfile.rb +2 -5
- data/lib/solargraph/convention/gemspec.rb +3 -6
- data/lib/solargraph/convention/rspec.rb +3 -6
- data/lib/solargraph/documentor.rb +2 -0
- data/lib/solargraph/environ.rb +11 -6
- data/lib/solargraph/language_server/message/extended/check_gem_version.rb +6 -1
- data/lib/solargraph/language_server/message/text_document/definition.rb +1 -1
- data/lib/solargraph/language_server/message/text_document/formatting.rb +17 -19
- data/lib/solargraph/library.rb +8 -10
- data/lib/solargraph/parser/legacy/node_chainer.rb +7 -7
- data/lib/solargraph/parser/legacy/node_methods.rb +5 -0
- data/lib/solargraph/parser/legacy/node_processors/ivasgn_node.rb +1 -1
- data/lib/solargraph/parser/legacy/node_processors/send_node.rb +36 -23
- data/lib/solargraph/parser/node_processor/base.rb +3 -0
- data/lib/solargraph/parser/rubyvm/node_chainer.rb +9 -9
- data/lib/solargraph/parser/rubyvm/node_methods.rb +11 -1
- data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +1 -1
- data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +1 -1
- data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +40 -29
- data/lib/solargraph/pin.rb +0 -3
- data/lib/solargraph/pin/common.rb +1 -1
- data/lib/solargraph/pin/conversions.rb +3 -4
- data/lib/solargraph/pin/documenting.rb +3 -9
- data/lib/solargraph/pin/method.rb +141 -7
- data/lib/solargraph/pin/method_alias.rb +1 -1
- data/lib/solargraph/position.rb +2 -14
- data/lib/solargraph/shell.rb +1 -1
- data/lib/solargraph/source.rb +10 -6
- data/lib/solargraph/source/chain.rb +18 -5
- data/lib/solargraph/source_map.rb +4 -1
- data/lib/solargraph/source_map/clip.rb +3 -2
- data/lib/solargraph/source_map/mapper.rb +10 -6
- data/lib/solargraph/type_checker.rb +35 -39
- data/lib/solargraph/type_checker/param_def.rb +1 -1
- data/lib/solargraph/version.rb +1 -1
- data/lib/solargraph/yard_map.rb +40 -47
- data/lib/solargraph/yard_map/core_fills.rb +185 -0
- data/lib/solargraph/yard_map/helpers.rb +16 -0
- data/lib/solargraph/yard_map/mapper.rb +14 -8
- data/lib/solargraph/{pin/yard_pin/constant.rb → yard_map/mapper/to_constant.rb} +6 -6
- data/lib/solargraph/yard_map/mapper/to_method.rb +78 -0
- data/lib/solargraph/{pin/yard_pin/namespace.rb → yard_map/mapper/to_namespace.rb} +6 -6
- data/lib/solargraph/yard_map/rdoc_to_yard.rb +1 -1
- data/lib/solargraph/yard_map/stdlib_fills.rb +43 -0
- data/lib/solargraph/yard_map/to_method.rb +79 -0
- data/solargraph.gemspec +4 -4
- metadata +20 -34
- data/lib/solargraph/core_fills.rb +0 -160
- data/lib/solargraph/pin/attribute.rb +0 -49
- data/lib/solargraph/pin/base_method.rb +0 -141
- data/lib/solargraph/pin/yard_pin.rb +0 -12
- data/lib/solargraph/pin/yard_pin/method.rb +0 -80
- data/lib/solargraph/pin/yard_pin/yard_mixin.rb +0 -20
- data/lib/solargraph/stdlib_fills.rb +0 -40
- data/travis-bundler.rb +0 -11
@@ -1,160 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Solargraph
|
4
|
-
# Overrides for the Ruby core.
|
5
|
-
#
|
6
|
-
# The YardMap uses this module to add type information to core methods.
|
7
|
-
#
|
8
|
-
module CoreFills
|
9
|
-
Override = Pin::Reference::Override
|
10
|
-
|
11
|
-
KEYWORDS = [
|
12
|
-
'__ENCODING__', '__LINE__', '__FILE__', 'BEGIN', 'END', 'alias', 'and',
|
13
|
-
'begin', 'break', 'case', 'class', 'def', 'defined?', 'do', 'else',
|
14
|
-
'elsif', 'end', 'ensure', 'false', 'for', 'if', 'in', 'module', 'next',
|
15
|
-
'nil', 'not', 'or', 'redo', 'rescue', 'retry', 'return', 'self', 'super',
|
16
|
-
'then', 'true', 'undef', 'unless', 'until', 'when', 'while', 'yield'
|
17
|
-
].freeze
|
18
|
-
|
19
|
-
methods_with_yieldparam_subtypes = %w[
|
20
|
-
Array#each Array#map Array#map! Array#any? Array#all? Array#index
|
21
|
-
Array#keep_if Array#delete_if
|
22
|
-
Enumerable#each_entry Enumerable#map Enumerable#any? Enumerable#all?
|
23
|
-
Enumerable#select Enumerable#reject
|
24
|
-
Set#each
|
25
|
-
]
|
26
|
-
|
27
|
-
OVERRIDES = [
|
28
|
-
Override.method_return('Array#keep_if', 'self'),
|
29
|
-
Override.method_return('Array#delete_if', 'self'),
|
30
|
-
Override.from_comment('Array#reject', %(
|
31
|
-
@overload reject(&block)
|
32
|
-
@return [self]
|
33
|
-
@overload reject()
|
34
|
-
@return [Enumerator]
|
35
|
-
)),
|
36
|
-
Override.method_return('Array#reverse', 'self', delete: ['overload']),
|
37
|
-
Override.from_comment('Array#select', %(
|
38
|
-
@overload select(&block)
|
39
|
-
@return [self]
|
40
|
-
@overload select()
|
41
|
-
@return [Enumerator]
|
42
|
-
)),
|
43
|
-
Override.from_comment('Array#[]', %(
|
44
|
-
@overload [](range)
|
45
|
-
@param range [Range]
|
46
|
-
@return [self]
|
47
|
-
@overload [](num1, num2)
|
48
|
-
@param num1 [Integer]
|
49
|
-
@param num2 [Integer]
|
50
|
-
@return [self]
|
51
|
-
@overload [](num)
|
52
|
-
@param num [Integer]
|
53
|
-
@return_single_parameter
|
54
|
-
@return_single_parameter
|
55
|
-
)),
|
56
|
-
Override.from_comment('Array#first', %(
|
57
|
-
@overload first(num)
|
58
|
-
@param num [Integer]
|
59
|
-
@return [self]
|
60
|
-
@return_single_parameter
|
61
|
-
)),
|
62
|
-
Override.from_comment('Array#last', %(
|
63
|
-
@overload last(num)
|
64
|
-
@param num [Integer]
|
65
|
-
@return [self]
|
66
|
-
@return_single_parameter
|
67
|
-
)),
|
68
|
-
Override.method_return('Array#uniq', 'self'),
|
69
|
-
Override.method_return('Array#zip', 'Array, nil'),
|
70
|
-
|
71
|
-
Override.from_comment('BasicObject#==', %(
|
72
|
-
@param other [BasicObject]
|
73
|
-
@return [Boolean]
|
74
|
-
)),
|
75
|
-
Override.method_return('BasicObject#initialize', 'void'),
|
76
|
-
|
77
|
-
Override.method_return('Class#new', 'self'),
|
78
|
-
Override.method_return('Class.new', 'Class<Object>'),
|
79
|
-
Override.method_return('Class#allocate', 'self'),
|
80
|
-
Override.method_return('Class.allocate', 'Class<Object>'),
|
81
|
-
|
82
|
-
Override.method_return('Enumerable#select', 'self'),
|
83
|
-
|
84
|
-
Override.method_return('File.absolute_path', 'String'),
|
85
|
-
Override.method_return('File.basename', 'String'),
|
86
|
-
Override.method_return('File.dirname', 'String'),
|
87
|
-
Override.method_return('File.extname', 'String'),
|
88
|
-
Override.method_return('File.join', 'String'),
|
89
|
-
|
90
|
-
Override.from_comment('Float#+', %(
|
91
|
-
@param y [Numeric]
|
92
|
-
@return [Numeric]
|
93
|
-
)),
|
94
|
-
|
95
|
-
Override.from_comment('Hash#[]', %(
|
96
|
-
@return_value_parameter
|
97
|
-
)),
|
98
|
-
|
99
|
-
# @todo This override isn't robust enough. It needs to allow for
|
100
|
-
# parameterized Hash types, e.g., [Hash{Symbol => String}].
|
101
|
-
Override.from_comment('Hash#[]=', %(
|
102
|
-
@param_tuple
|
103
|
-
)),
|
104
|
-
|
105
|
-
Override.from_comment('Integer#+', %(
|
106
|
-
@param y [Numeric]
|
107
|
-
@return [Numeric]
|
108
|
-
)),
|
109
|
-
|
110
|
-
Override.method_return('Kernel#puts', 'nil'),
|
111
|
-
|
112
|
-
# Override.method_return('Module#attr_reader', 'void'),
|
113
|
-
# Override.method_return('Module#attr_writer', 'void'),
|
114
|
-
# Override.method_return('Module#attr_accessor', 'void'),
|
115
|
-
|
116
|
-
Override.from_comment('Numeric#+', %(
|
117
|
-
@param y [Numeric]
|
118
|
-
@return [Numeric]
|
119
|
-
)),
|
120
|
-
|
121
|
-
Override.method_return('Object#!', 'Boolean'),
|
122
|
-
Override.method_return('Object#clone', 'self', delete: [:overload]),
|
123
|
-
Override.method_return('Object#dup', 'self', delete: [:overload]),
|
124
|
-
Override.method_return('Object#freeze', 'self', delete: [:overload]),
|
125
|
-
Override.method_return('Object#inspect', 'String'),
|
126
|
-
Override.method_return('Object#taint', 'self'),
|
127
|
-
Override.method_return('Object#to_s', 'String'),
|
128
|
-
Override.method_return('Object#untaint', 'self'),
|
129
|
-
Override.from_comment('Object#tap', %(
|
130
|
-
@return [self]
|
131
|
-
@yieldparam [self]
|
132
|
-
)),
|
133
|
-
|
134
|
-
Override.from_comment('STDERR', %(
|
135
|
-
@type [IO]
|
136
|
-
)),
|
137
|
-
|
138
|
-
Override.from_comment('STDIN', %(
|
139
|
-
@type [IO]
|
140
|
-
)),
|
141
|
-
|
142
|
-
Override.from_comment('STDOUT', %(
|
143
|
-
@type [IO]
|
144
|
-
)),
|
145
|
-
|
146
|
-
Override.method_return('String#freeze', 'self'),
|
147
|
-
Override.method_return('String#split', 'Array<String>'),
|
148
|
-
Override.method_return('String#lines', 'Array<String>'),
|
149
|
-
Override.from_comment('String#each_line', %(
|
150
|
-
@yieldparam [String]
|
151
|
-
))
|
152
|
-
].concat(
|
153
|
-
methods_with_yieldparam_subtypes.map do |path|
|
154
|
-
Override.from_comment(path, %(
|
155
|
-
@yieldparam_single_parameter
|
156
|
-
))
|
157
|
-
end
|
158
|
-
)
|
159
|
-
end
|
160
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Solargraph
|
4
|
-
module Pin
|
5
|
-
class Attribute < BaseMethod
|
6
|
-
# @return [::Symbol] :reader or :writer
|
7
|
-
attr_reader :access
|
8
|
-
|
9
|
-
# @param access [::Symbol] :reader or :writer
|
10
|
-
def initialize access: :reader, **splat
|
11
|
-
super(**splat)
|
12
|
-
@access = access
|
13
|
-
if access == :writer
|
14
|
-
parameters.push(
|
15
|
-
Pin::Parameter.new(name: 'value', decl: :arg, closure: self)
|
16
|
-
)
|
17
|
-
if return_type.defined?
|
18
|
-
docstring.add_tag YARD::Tags::Tag.new(:param, '', return_type.to_s.split(', '), 'value')
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def completion_item_kind
|
24
|
-
Solargraph::LanguageServer::CompletionItemKinds::PROPERTY
|
25
|
-
end
|
26
|
-
|
27
|
-
def symbol_kind
|
28
|
-
Solargraph::LanguageServer::SymbolKinds::PROPERTY
|
29
|
-
end
|
30
|
-
|
31
|
-
def path
|
32
|
-
@path ||= namespace + (scope == :instance ? '#' : '.') + name
|
33
|
-
end
|
34
|
-
|
35
|
-
def probe api_map
|
36
|
-
types = []
|
37
|
-
varname = "@#{name.gsub(/=$/, '')}"
|
38
|
-
pins = api_map.get_instance_variable_pins(binder.namespace, binder.scope).select { |iv| iv.name == varname }
|
39
|
-
pins.each do |pin|
|
40
|
-
type = pin.typify(api_map)
|
41
|
-
type = pin.probe(api_map) if type.undefined?
|
42
|
-
types.push type if type.defined?
|
43
|
-
end
|
44
|
-
return ComplexType::UNDEFINED if types.empty?
|
45
|
-
ComplexType.try_parse(*types.map(&:tag).uniq)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,141 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Solargraph
|
4
|
-
module Pin
|
5
|
-
# The base class for method and attribute pins.
|
6
|
-
#
|
7
|
-
class BaseMethod < Closure
|
8
|
-
# @return [::Symbol] :public, :private, or :protected
|
9
|
-
attr_reader :visibility
|
10
|
-
|
11
|
-
# @return [Parser::AST::Node]
|
12
|
-
attr_reader :node
|
13
|
-
|
14
|
-
# @param visibility [::Symbol] :public, :protected, or :private
|
15
|
-
# @param explicit [Boolean]
|
16
|
-
def initialize visibility: :public, explicit: true, **splat
|
17
|
-
super(**splat)
|
18
|
-
@visibility = visibility
|
19
|
-
@explicit = explicit
|
20
|
-
end
|
21
|
-
|
22
|
-
def return_type
|
23
|
-
@return_type ||= generate_complex_type
|
24
|
-
end
|
25
|
-
|
26
|
-
def path
|
27
|
-
@path ||= "#{namespace}#{(scope == :instance ? '#' : '.')}#{name}"
|
28
|
-
end
|
29
|
-
|
30
|
-
def typify api_map
|
31
|
-
decl = super
|
32
|
-
return decl unless decl.undefined?
|
33
|
-
type = see_reference(api_map) || typify_from_super(api_map)
|
34
|
-
return type.qualify(api_map, namespace) unless type.nil?
|
35
|
-
name.end_with?('?') ? ComplexType::BOOLEAN : ComplexType::UNDEFINED
|
36
|
-
end
|
37
|
-
|
38
|
-
# @return [Array<Pin::Parameter>]
|
39
|
-
def parameters
|
40
|
-
@parameters ||= []
|
41
|
-
end
|
42
|
-
|
43
|
-
# @return [Array<String>]
|
44
|
-
def parameter_names
|
45
|
-
parameters.map(&:name)
|
46
|
-
end
|
47
|
-
|
48
|
-
def documentation
|
49
|
-
if @documentation.nil?
|
50
|
-
@documentation ||= super || ''
|
51
|
-
param_tags = docstring.tags(:param)
|
52
|
-
unless param_tags.nil? or param_tags.empty?
|
53
|
-
@documentation += "\n\n" unless @documentation.empty?
|
54
|
-
@documentation += "Params:\n"
|
55
|
-
lines = []
|
56
|
-
param_tags.each do |p|
|
57
|
-
l = "* #{p.name}"
|
58
|
-
l += " [#{escape_brackets(p.types.join(', '))}]" unless p.types.nil? or p.types.empty?
|
59
|
-
l += " #{p.text}"
|
60
|
-
lines.push l
|
61
|
-
end
|
62
|
-
@documentation += lines.join("\n")
|
63
|
-
end
|
64
|
-
return_tags = docstring.tags(:return)
|
65
|
-
unless return_tags.empty?
|
66
|
-
@documentation += "\n\n" unless @documentation.empty?
|
67
|
-
@documentation += "Returns:\n"
|
68
|
-
lines = []
|
69
|
-
return_tags.each do |r|
|
70
|
-
l = "*"
|
71
|
-
l += " [#{escape_brackets(r.types.join(', '))}]" unless r.types.nil? or r.types.empty?
|
72
|
-
l += " #{r.text}"
|
73
|
-
lines.push l
|
74
|
-
end
|
75
|
-
@documentation += lines.join("\n")
|
76
|
-
end
|
77
|
-
@documentation += "\n\n" unless @documentation.empty?
|
78
|
-
@documentation += "Visibility: #{visibility}"
|
79
|
-
end
|
80
|
-
@documentation.to_s
|
81
|
-
end
|
82
|
-
|
83
|
-
def explicit?
|
84
|
-
@explicit
|
85
|
-
end
|
86
|
-
|
87
|
-
private
|
88
|
-
|
89
|
-
# @return [ComplexType]
|
90
|
-
def generate_complex_type
|
91
|
-
tags = docstring.tags(:return).map(&:types).flatten.reject(&:nil?)
|
92
|
-
return ComplexType::UNDEFINED if tags.empty?
|
93
|
-
ComplexType.try_parse *tags
|
94
|
-
end
|
95
|
-
|
96
|
-
# @param api_map [ApiMap]
|
97
|
-
# @return [ComplexType, nil]
|
98
|
-
def see_reference api_map
|
99
|
-
docstring.ref_tags.each do |ref|
|
100
|
-
next unless ref.tag_name == 'return' && ref.owner
|
101
|
-
result = resolve_reference(ref.owner.to_s, api_map)
|
102
|
-
return result unless result.nil?
|
103
|
-
end
|
104
|
-
match = comments.match(/^[ \t]*\(see (.*)\)/m)
|
105
|
-
return nil if match.nil?
|
106
|
-
resolve_reference match[1], api_map
|
107
|
-
end
|
108
|
-
|
109
|
-
# @param api_map [ApiMap]
|
110
|
-
# @return [ComplexType, nil]
|
111
|
-
def typify_from_super api_map
|
112
|
-
stack = api_map.get_method_stack(namespace, name, scope: scope).reject { |pin| pin.path == path }
|
113
|
-
return nil if stack.empty?
|
114
|
-
stack.each do |pin|
|
115
|
-
return pin.return_type unless pin.return_type.undefined?
|
116
|
-
end
|
117
|
-
nil
|
118
|
-
end
|
119
|
-
|
120
|
-
# @param ref [String]
|
121
|
-
# @param api_map [ApiMap]
|
122
|
-
# @return [ComplexType]
|
123
|
-
def resolve_reference ref, api_map
|
124
|
-
parts = ref.split(/[\.#]/)
|
125
|
-
if parts.first.empty? || parts.one?
|
126
|
-
path = "#{namespace}#{ref}"
|
127
|
-
else
|
128
|
-
fqns = api_map.qualify(parts.first, namespace)
|
129
|
-
return ComplexType::UNDEFINED if fqns.nil?
|
130
|
-
path = fqns + ref[parts.first.length] + parts.last
|
131
|
-
end
|
132
|
-
pins = api_map.get_path_pins(path)
|
133
|
-
pins.each do |pin|
|
134
|
-
type = pin.typify(api_map)
|
135
|
-
return type unless type.undefined?
|
136
|
-
end
|
137
|
-
nil
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Solargraph
|
4
|
-
module Pin
|
5
|
-
module YardPin
|
6
|
-
autoload :YardMixin, 'solargraph/pin/yard_pin/yard_mixin'
|
7
|
-
autoload :Constant, 'solargraph/pin/yard_pin/constant'
|
8
|
-
autoload :Method, 'solargraph/pin/yard_pin/method'
|
9
|
-
autoload :Namespace, 'solargraph/pin/yard_pin/namespace'
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Solargraph
|
4
|
-
module Pin
|
5
|
-
module YardPin
|
6
|
-
class Method < Pin::Method
|
7
|
-
include YardMixin
|
8
|
-
|
9
|
-
# @param code_object [YARD::CodeObjects::Base]
|
10
|
-
# @param name [String, nil]
|
11
|
-
# @param scope [Symbol, nil]
|
12
|
-
# @param visibility [Symbol, nil]
|
13
|
-
# @param closure [Solargraph::Pin::Closure, nil]
|
14
|
-
# @param spec [Gem::Specification]
|
15
|
-
def initialize code_object, name = nil, scope = nil, visibility = nil, closure = nil, spec = nil
|
16
|
-
closure ||= Solargraph::Pin::Namespace.new(
|
17
|
-
name: code_object.namespace.to_s,
|
18
|
-
gates: [code_object.namespace.to_s]
|
19
|
-
)
|
20
|
-
super(
|
21
|
-
location: object_location(code_object, spec),
|
22
|
-
closure: closure,
|
23
|
-
name: name || code_object.name.to_s,
|
24
|
-
comments: code_object.docstring ? code_object.docstring.all.to_s : '',
|
25
|
-
scope: scope || code_object.scope,
|
26
|
-
visibility: visibility || code_object.visibility,
|
27
|
-
parameters: get_parameters(code_object),
|
28
|
-
explicit: code_object.is_explicit?
|
29
|
-
)
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
# @param code_object [YARD::CodeObjects::Base]
|
35
|
-
# @return [Array<Solargraph::Pin::Parameter>]
|
36
|
-
def get_parameters code_object
|
37
|
-
return [] unless code_object.is_a?(YARD::CodeObjects::MethodObject)
|
38
|
-
# HACK: Skip `nil` and `self` parameters that are sometimes emitted
|
39
|
-
# for methods defined in C
|
40
|
-
# See https://github.com/castwide/solargraph/issues/345
|
41
|
-
code_object.parameters.select { |a| a[0] && a[0] != 'self' }.map do |a|
|
42
|
-
Solargraph::Pin::Parameter.new(
|
43
|
-
location: location,
|
44
|
-
closure: self,
|
45
|
-
comments: comments,
|
46
|
-
name: arg_name(a),
|
47
|
-
presence: nil,
|
48
|
-
decl: arg_type(a),
|
49
|
-
asgn_code: a[1]
|
50
|
-
)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
# @param a [Array]
|
55
|
-
# @return [String]
|
56
|
-
def arg_name a
|
57
|
-
a[0].match(/[A-Za-z0-9_]*/)[0]
|
58
|
-
end
|
59
|
-
|
60
|
-
# @param a [Array]
|
61
|
-
# @return [Symbol]
|
62
|
-
def arg_type a
|
63
|
-
if a[0].start_with?('**')
|
64
|
-
:kwrestarg
|
65
|
-
elsif a[0].start_with?('*')
|
66
|
-
:restarg
|
67
|
-
elsif a[0].start_with?('&')
|
68
|
-
:blockarg
|
69
|
-
elsif a[1]
|
70
|
-
:optarg
|
71
|
-
elsif a[0].end_with?(':')
|
72
|
-
a[1] ? :kwarg : :kwoptarg
|
73
|
-
else
|
74
|
-
:arg
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Solargraph
|
4
|
-
module Pin
|
5
|
-
module YardPin
|
6
|
-
module YardMixin
|
7
|
-
private
|
8
|
-
|
9
|
-
# @param code_object [YARD::CodeObjects::Base]
|
10
|
-
# @param spec [Gem::Specification]
|
11
|
-
# @return [Solargraph::Location, nil]
|
12
|
-
def object_location code_object, spec
|
13
|
-
return nil if spec.nil? || code_object.nil? || code_object.file.nil? || code_object.line.nil?
|
14
|
-
file = File.join(spec.full_gem_path, code_object.file)
|
15
|
-
Solargraph::Location.new(file, Solargraph::Range.from_to(code_object.line - 1, 0, code_object.line - 1, 0))
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|