solargraph 0.59.0.dev.1 → 0.59.0.dev.2

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.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/plugins.yml +4 -1
  3. data/.github/workflows/rspec.yml +3 -14
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +32 -5
  6. data/.rubocop_todo.yml +37 -931
  7. data/CHANGELOG.md +7 -1
  8. data/Gemfile +3 -1
  9. data/Rakefile +25 -23
  10. data/bin/solargraph +2 -1
  11. data/lib/solargraph/api_map/index.rb +5 -11
  12. data/lib/solargraph/api_map/source_to_yard.rb +9 -8
  13. data/lib/solargraph/api_map/store.rb +22 -20
  14. data/lib/solargraph/api_map.rb +50 -37
  15. data/lib/solargraph/bench.rb +44 -45
  16. data/lib/solargraph/complex_type/type_methods.rb +12 -15
  17. data/lib/solargraph/complex_type/unique_type.rb +54 -43
  18. data/lib/solargraph/complex_type.rb +69 -61
  19. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
  20. data/lib/solargraph/convention/data_definition/data_definition_node.rb +4 -4
  21. data/lib/solargraph/convention/data_definition.rb +1 -1
  22. data/lib/solargraph/convention/gemfile.rb +15 -15
  23. data/lib/solargraph/convention/gemspec.rb +23 -23
  24. data/lib/solargraph/convention/rakefile.rb +17 -17
  25. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +1 -1
  26. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +3 -3
  27. data/lib/solargraph/convention/struct_definition.rb +3 -3
  28. data/lib/solargraph/convention.rb +78 -78
  29. data/lib/solargraph/converters/dd.rb +19 -17
  30. data/lib/solargraph/converters/dl.rb +17 -15
  31. data/lib/solargraph/converters/dt.rb +17 -15
  32. data/lib/solargraph/converters/misc.rb +3 -1
  33. data/lib/solargraph/diagnostics/rubocop.rb +10 -10
  34. data/lib/solargraph/diagnostics/rubocop_helpers.rb +3 -3
  35. data/lib/solargraph/diagnostics/type_check.rb +10 -10
  36. data/lib/solargraph/diagnostics/update_errors.rb +37 -41
  37. data/lib/solargraph/doc_map.rb +9 -10
  38. data/lib/solargraph/equality.rb +3 -3
  39. data/lib/solargraph/gem_pins.rb +7 -5
  40. data/lib/solargraph/language_server/error_codes.rb +20 -20
  41. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  42. data/lib/solargraph/language_server/host/dispatch.rb +2 -3
  43. data/lib/solargraph/language_server/host/message_worker.rb +2 -2
  44. data/lib/solargraph/language_server/host/sources.rb +1 -1
  45. data/lib/solargraph/language_server/host.rb +24 -21
  46. data/lib/solargraph/language_server/message/base.rb +97 -97
  47. data/lib/solargraph/language_server/message/client/register_capability.rb +13 -15
  48. data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -60
  49. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +10 -11
  50. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  51. data/lib/solargraph/language_server/message/extended/download_core.rb +20 -19
  52. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  53. data/lib/solargraph/language_server/message/initialize.rb +197 -191
  54. data/lib/solargraph/language_server/message/text_document/completion.rb +8 -8
  55. data/lib/solargraph/language_server/message/text_document/definition.rb +41 -34
  56. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +23 -16
  57. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +29 -21
  58. data/lib/solargraph/language_server/message/text_document/formatting.rb +6 -6
  59. data/lib/solargraph/language_server/message/text_document/hover.rb +3 -5
  60. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +18 -11
  61. data/lib/solargraph/language_server/message/text_document/references.rb +23 -16
  62. data/lib/solargraph/language_server/message/text_document/rename.rb +26 -19
  63. data/lib/solargraph/language_server/message/text_document/signature_help.rb +2 -2
  64. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -19
  65. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +41 -35
  66. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +48 -40
  67. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +32 -26
  68. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +27 -19
  69. data/lib/solargraph/language_server/message.rb +94 -94
  70. data/lib/solargraph/language_server/request.rb +29 -27
  71. data/lib/solargraph/language_server/transport/data_reader.rb +72 -74
  72. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  73. data/lib/solargraph/library.rb +28 -33
  74. data/lib/solargraph/location.rb +10 -12
  75. data/lib/solargraph/logging.rb +4 -4
  76. data/lib/solargraph/page.rb +92 -92
  77. data/lib/solargraph/parser/comment_ripper.rb +12 -4
  78. data/lib/solargraph/parser/flow_sensitive_typing.rb +32 -42
  79. data/lib/solargraph/parser/node_processor/base.rb +4 -4
  80. data/lib/solargraph/parser/node_processor.rb +1 -1
  81. data/lib/solargraph/parser/parser_gem/class_methods.rb +4 -4
  82. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
  83. data/lib/solargraph/parser/parser_gem/node_chainer.rb +20 -20
  84. data/lib/solargraph/parser/parser_gem/node_methods.rb +66 -65
  85. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +12 -12
  86. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +1 -1
  87. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +3 -3
  88. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +38 -37
  89. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +3 -3
  90. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +2 -1
  91. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +1 -1
  92. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +3 -5
  93. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +118 -112
  94. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
  95. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +1 -1
  96. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +1 -1
  97. data/lib/solargraph/parser/parser_gem.rb +14 -12
  98. data/lib/solargraph/parser/snippet.rb +2 -0
  99. data/lib/solargraph/parser.rb +25 -23
  100. data/lib/solargraph/pin/base.rb +78 -64
  101. data/lib/solargraph/pin/base_variable.rb +28 -71
  102. data/lib/solargraph/pin/block.rb +3 -2
  103. data/lib/solargraph/pin/breakable.rb +2 -0
  104. data/lib/solargraph/pin/callable.rb +23 -26
  105. data/lib/solargraph/pin/closure.rb +5 -4
  106. data/lib/solargraph/pin/common.rb +5 -2
  107. data/lib/solargraph/pin/compound_statement.rb +3 -3
  108. data/lib/solargraph/pin/constant.rb +43 -45
  109. data/lib/solargraph/pin/conversions.rb +9 -4
  110. data/lib/solargraph/pin/delegated_method.rb +4 -4
  111. data/lib/solargraph/pin/documenting.rb +3 -2
  112. data/lib/solargraph/pin/local_variable.rb +4 -4
  113. data/lib/solargraph/pin/method.rb +71 -70
  114. data/lib/solargraph/pin/namespace.rb +13 -12
  115. data/lib/solargraph/pin/parameter.rb +28 -27
  116. data/lib/solargraph/pin/proxy_type.rb +2 -0
  117. data/lib/solargraph/pin/reference.rb +17 -0
  118. data/lib/solargraph/pin/search.rb +2 -2
  119. data/lib/solargraph/pin/signature.rb +9 -14
  120. data/lib/solargraph/pin/symbol.rb +1 -0
  121. data/lib/solargraph/pin/until.rb +1 -3
  122. data/lib/solargraph/pin/while.rb +1 -3
  123. data/lib/solargraph/pin_cache.rb +16 -19
  124. data/lib/solargraph/position.rb +35 -17
  125. data/lib/solargraph/range.rb +10 -9
  126. data/lib/solargraph/rbs_map/conversions.rb +312 -206
  127. data/lib/solargraph/rbs_map/core_fills.rb +91 -84
  128. data/lib/solargraph/rbs_map/stdlib_map.rb +0 -1
  129. data/lib/solargraph/rbs_map.rb +3 -12
  130. data/lib/solargraph/server_methods.rb +16 -16
  131. data/lib/solargraph/shell.rb +63 -53
  132. data/lib/solargraph/source/chain/array.rb +39 -37
  133. data/lib/solargraph/source/chain/call.rb +49 -44
  134. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  135. data/lib/solargraph/source/chain/constant.rb +3 -1
  136. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  137. data/lib/solargraph/source/chain/hash.rb +8 -6
  138. data/lib/solargraph/source/chain/if.rb +11 -10
  139. data/lib/solargraph/source/chain/instance_variable.rb +3 -1
  140. data/lib/solargraph/source/chain/link.rb +99 -109
  141. data/lib/solargraph/source/chain/literal.rb +4 -6
  142. data/lib/solargraph/source/chain/or.rb +2 -4
  143. data/lib/solargraph/source/chain/q_call.rb +13 -11
  144. data/lib/solargraph/source/chain/variable.rb +15 -13
  145. data/lib/solargraph/source/chain/z_super.rb +28 -30
  146. data/lib/solargraph/source/chain.rb +24 -16
  147. data/lib/solargraph/source/change.rb +3 -3
  148. data/lib/solargraph/source/cursor.rb +18 -18
  149. data/lib/solargraph/source/encoding_fixes.rb +6 -7
  150. data/lib/solargraph/source/source_chainer.rb +46 -32
  151. data/lib/solargraph/source/updater.rb +1 -1
  152. data/lib/solargraph/source.rb +27 -29
  153. data/lib/solargraph/source_map/clip.rb +38 -30
  154. data/lib/solargraph/source_map/mapper.rb +52 -46
  155. data/lib/solargraph/source_map.rb +8 -4
  156. data/lib/solargraph/type_checker/rules.rb +8 -8
  157. data/lib/solargraph/type_checker.rb +95 -101
  158. data/lib/solargraph/version.rb +1 -1
  159. data/lib/solargraph/workspace/config.rb +10 -9
  160. data/lib/solargraph/workspace/gemspecs.rb +1 -1
  161. data/lib/solargraph/workspace.rb +21 -44
  162. data/lib/solargraph/yard_map/helpers.rb +6 -2
  163. data/lib/solargraph/yard_map/mapper/to_method.rb +8 -6
  164. data/lib/solargraph/yard_map/mapper/to_namespace.rb +1 -1
  165. data/lib/solargraph/yard_map/mapper.rb +12 -12
  166. data/lib/solargraph/yard_tags.rb +20 -20
  167. data/lib/solargraph.rb +5 -5
  168. data/solargraph.gemspec +35 -34
  169. metadata +28 -28
@@ -14,6 +14,7 @@ module Solargraph
14
14
  # @param block [Signature, nil]
15
15
  # @param return_type [ComplexType, nil]
16
16
  # @param parameters [::Array<Pin::Parameter>]
17
+ # @param [Hash{Symbol => Object}] splat
17
18
  def initialize block: nil, return_type: nil, parameters: [], **splat
18
19
  super(**splat)
19
20
  @block = block
@@ -36,7 +37,7 @@ module Solargraph
36
37
  # @param other [self]
37
38
  #
38
39
  # @return [Pin::Signature, nil]
39
- def combine_blocks(other)
40
+ def combine_blocks other
40
41
  if block.nil?
41
42
  other.block
42
43
  elsif other.block.nil?
@@ -51,10 +52,10 @@ module Solargraph
51
52
  # @param attrs [Hash{Symbol => Object}]
52
53
  #
53
54
  # @return [self]
54
- def combine_with(other, attrs={})
55
+ def combine_with other, attrs = {}
55
56
  new_attrs = {
56
57
  block: combine_blocks(other),
57
- return_type: combine_return_type(other),
58
+ return_type: combine_return_type(other)
58
59
  }.merge(attrs)
59
60
  new_attrs[:parameters] = choose_parameters(other).clone.freeze unless new_attrs.key?(:parameters)
60
61
  super(other, new_attrs)
@@ -72,8 +73,10 @@ module Solargraph
72
73
  # @param other [self]
73
74
  #
74
75
  # @return [Array<Pin::Parameter>]
75
- def choose_parameters(other)
76
- raise "Trying to combine two pins with different arities - \nself =#{inspect}, \nother=#{other.inspect}, \n\n self.arity=#{self.arity}, \nother.arity=#{other.arity}" if other.arity != arity
76
+ def choose_parameters other
77
+ if other.arity != arity
78
+ raise "Trying to combine two pins with different arities - \nself =#{inspect}, \nother=#{other.inspect}, \n\n self.arity=#{arity}, \nother.arity=#{other.arity}"
79
+ end
77
80
  # @param param [Pin::Parameter]
78
81
  # @param other_param [Pin::Parameter]
79
82
  parameters.zip(other.parameters).map do |param, other_param|
@@ -129,16 +132,15 @@ module Solargraph
129
132
  # @param return_type_context [ComplexType, nil]
130
133
  # @param yield_arg_types [Array<ComplexType>, nil]
131
134
  # @param yield_return_type_context [ComplexType, nil]
132
- # @param context [ComplexType, nil]
133
135
  # @param resolved_generic_values [Hash{String => ComplexType}]
134
136
  #
135
137
  # @return [self]
136
- def resolve_generics_from_context(generics_to_resolve,
138
+ def resolve_generics_from_context generics_to_resolve,
137
139
  arg_types = nil,
138
140
  return_type_context = nil,
139
141
  yield_arg_types = nil,
140
142
  yield_return_type_context = nil,
141
- resolved_generic_values: {})
143
+ resolved_generic_values: {}
142
144
  callable = super(generics_to_resolve, return_type_context, resolved_generic_values: resolved_generic_values)
143
145
  callable.parameters = callable.parameters.each_with_index.map do |param, i|
144
146
  if arg_types.nil?
@@ -149,10 +151,12 @@ module Solargraph
149
151
  resolved_generic_values: resolved_generic_values)
150
152
  end
151
153
  end
152
- callable.block = block.resolve_generics_from_context(generics_to_resolve,
153
- yield_arg_types,
154
- yield_return_type_context,
155
- resolved_generic_values: resolved_generic_values) if callable.block?
154
+ if callable.block?
155
+ callable.block = block.resolve_generics_from_context(generics_to_resolve,
156
+ yield_arg_types,
157
+ yield_return_type_context,
158
+ resolved_generic_values: resolved_generic_values)
159
+ end
156
160
  callable
157
161
  end
158
162
 
@@ -171,7 +175,7 @@ module Solargraph
171
175
  # @sg-ignore Need to add nil check here
172
176
  # @return [String]
173
177
  def method_name
174
- raise "closure was nil in #{self.inspect}" if closure.nil?
178
+ raise "closure was nil in #{inspect}" if closure.nil?
175
179
  # @sg-ignore Need to add nil check here
176
180
  @method_name ||= closure.name
177
181
  end
@@ -181,16 +185,15 @@ module Solargraph
181
185
  # @param return_type_context [ComplexType, nil]
182
186
  # @param yield_arg_types [Array<ComplexType>, nil]
183
187
  # @param yield_return_type_context [ComplexType, nil]
184
- # @param context [ComplexType, nil]
185
188
  # @param resolved_generic_values [Hash{String => ComplexType}]
186
189
  #
187
190
  # @return [self]
188
- def resolve_generics_from_context_until_complete(generics_to_resolve,
191
+ def resolve_generics_from_context_until_complete generics_to_resolve,
189
192
  arg_types = nil,
190
193
  return_type_context = nil,
191
194
  yield_arg_types = nil,
192
195
  yield_return_type_context = nil,
193
- resolved_generic_values: {})
196
+ resolved_generic_values: {}
194
197
  # See
195
198
  # https://github.com/soutaro/steep/tree/master/lib/steep/type_inference
196
199
  # and
@@ -208,7 +211,7 @@ module Solargraph
208
211
  resolved_generic_values: resolved_generic_values)
209
212
  if last_resolved_generic_values == resolved_generic_values
210
213
  # erase anything unresolved
211
- return new_pin.erase_generics(self.generics)
214
+ return new_pin.erase_generics(generics)
212
215
  end
213
216
  new_pin.resolve_generics_from_context_until_complete(generics_to_resolve,
214
217
  arg_types,
@@ -221,7 +224,7 @@ module Solargraph
221
224
  # @yieldparam [ComplexType]
222
225
  # @yieldreturn [ComplexType]
223
226
  # @return [self]
224
- def transform_types(&transform)
227
+ def transform_types &transform
225
228
  # @todo 'super' alone should work here I think, but doesn't typecheck at level typed
226
229
  callable = super(&transform)
227
230
  callable.block = block.transform_types(&transform) if block?
@@ -246,11 +249,6 @@ module Solargraph
246
249
  true
247
250
  end
248
251
 
249
- def reset_generated!
250
- super
251
- @parameters.each(&:reset_generated!)
252
- end
253
-
254
252
  # @return [Integer]
255
253
  def mandatory_positional_param_count
256
254
  parameters.count(&:arg?)
@@ -258,12 +256,11 @@ module Solargraph
258
256
 
259
257
  # @return [String]
260
258
  def parameters_to_rbs
261
- # @sg-ignore Need to add nil check here
262
- rbs_generics + '(' + parameters.map { |param| param.to_rbs }.join(', ') + ') ' + (block.nil? ? '' : '{ ' + block.to_rbs + ' } ')
259
+ "#{rbs_generics}(#{parameters.map(&:to_rbs).join(', ')}) #{"{ #{block.to_rbs} } " unless block.nil?}"
263
260
  end
264
261
 
265
262
  def to_rbs
266
- parameters_to_rbs + '-> ' + (return_type&.to_rbs || 'untyped')
263
+ "#{parameters_to_rbs}-> #{return_type&.to_rbs || 'untyped'}"
267
264
  end
268
265
 
269
266
  def block?
@@ -9,7 +9,8 @@ module Solargraph
9
9
  # @param scope [::Symbol] :class or :instance
10
10
  # @param generics [::Array<Pin::String>, nil]
11
11
  # @param generic_defaults [Hash{String => ComplexType}]
12
- def initialize scope: :class, generics: nil, generic_defaults: {}, **splat
12
+ # @param [Hash{Symbol => Object}] splat
13
+ def initialize scope: :class, generics: nil, generic_defaults: {}, **splat
13
14
  super(**splat)
14
15
  @scope = scope
15
16
  @generics = generics
@@ -25,10 +26,10 @@ module Solargraph
25
26
  # @param attrs [Hash{Symbol => Object}]
26
27
  #
27
28
  # @return [self]
28
- def combine_with(other, attrs={})
29
+ def combine_with other, attrs = {}
29
30
  new_attrs = {
30
31
  scope: assert_same(other, :scope),
31
- generics: generics.empty? ? other.generics : generics,
32
+ generics: generics.empty? ? other.generics : generics
32
33
  }.merge(attrs)
33
34
  super(other, new_attrs)
34
35
  end
@@ -61,7 +62,7 @@ module Solargraph
61
62
  def rbs_generics
62
63
  return '' if generics.empty?
63
64
 
64
- '[' + generics.map { |gen| gen.to_s }.join(', ') + '] '
65
+ "[#{generics.map(&:to_s).join(', ')}] "
65
66
  end
66
67
  end
67
68
  end
@@ -18,7 +18,7 @@ module Solargraph
18
18
 
19
19
  # @param value [Pin::Closure]
20
20
  # @return [void]
21
- def closure=(value)
21
+ def closure= value
22
22
  @closure = value
23
23
  # remove cached values generated from closure
24
24
  reset_generated!
@@ -26,7 +26,10 @@ module Solargraph
26
26
 
27
27
  # @return [Pin::Closure, nil]
28
28
  def closure
29
- Solargraph.assert_or_log(:closure, "Closure not set on #{self.class} #{name.inspect} from #{source.inspect}") unless @closure
29
+ unless @closure
30
+ Solargraph.assert_or_log(:closure,
31
+ "Closure not set on #{self.class} #{name.inspect} from #{source.inspect}")
32
+ end
30
33
  @closure
31
34
  end
32
35
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Solargraph
2
4
  module Pin
3
5
  # A series of statements where if a given statement executes, /all
@@ -42,10 +44,8 @@ module Solargraph
42
44
  class CompoundStatement < Pin::Base
43
45
  attr_reader :node
44
46
 
45
- # @param receiver [Parser::AST::Node, nil]
46
47
  # @param node [Parser::AST::Node, nil]
47
- # @param context [ComplexType, nil]
48
- # @param args [::Array<Parameter>]
48
+ # @param [Hash{Symbol => Object}] splat
49
49
  def initialize node: nil, **splat
50
50
  super(**splat)
51
51
  @node = node
@@ -1,45 +1,43 @@
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.compact
37
+ tags = docstring.tags(:type).map(&:types).flatten.compact if tags.empty?
38
+ return ComplexType::UNDEFINED if tags.empty?
39
+ ComplexType.try_parse(*tags)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -43,8 +43,7 @@ module Solargraph
43
43
  data: {
44
44
  path: path,
45
45
  return_type: return_type.tag,
46
- # @sg-ignore flow sensitive typing needs to handle attrs
47
- location: (location ? location.to_hash : nil),
46
+ location: location&.to_hash,
48
47
  deprecated: deprecated?
49
48
  }
50
49
  }
@@ -73,7 +72,13 @@ module Solargraph
73
72
  # This property is not cached in an instance variable because it can
74
73
  # change when pins get proxied.
75
74
  detail = String.new
76
- detail += "=#{probed? ? '~' : (proxied? ? '^' : '>')} #{return_type.to_s}" unless return_type.undefined?
75
+ unless return_type.undefined?
76
+ detail += "=#{if probed?
77
+ '~'
78
+ else
79
+ (proxied? ? '^' : '>')
80
+ end} #{return_type}"
81
+ end
77
82
  detail.strip!
78
83
  return nil if detail.empty?
79
84
  detail
@@ -117,7 +122,7 @@ module Solargraph
117
122
  # @return [String]
118
123
  def escape_brackets text
119
124
  # text.gsub(/(\<|\>)/, "\\#{$1}")
120
- text.gsub("<", '\<').gsub(">", '\>')
125
+ text.gsub('<', '\<').gsub('>', '\>')
121
126
  end
122
127
  end
123
128
  end
@@ -15,6 +15,7 @@ module Solargraph
15
15
  # @param receiver [Source::Chain, nil] the source code used to resolve the receiver for this delegated method.
16
16
  # @param name [String, nil]
17
17
  # @param receiver_method_name [String, nil] the method name that will be called on the receiver (defaults to :name).
18
+ # @param [Hash{Symbol => Object}] splat
18
19
  def initialize(method: nil, receiver: nil, name: method&.name, receiver_method_name: name, **splat)
19
20
  raise ArgumentError, 'either :method or :receiver is required' if (method && receiver) || (!method && !receiver)
20
21
  # @sg-ignore Need to add nil check here
@@ -35,7 +36,6 @@ module Solargraph
35
36
  @resolved_method&.send(:location)
36
37
  end
37
38
 
38
-
39
39
  def type_location
40
40
  return super if super
41
41
 
@@ -59,7 +59,7 @@ module Solargraph
59
59
  end
60
60
 
61
61
  # @param api_map [ApiMap]
62
- def resolvable?(api_map)
62
+ def resolvable? api_map
63
63
  resolve_method(api_map)
64
64
  !!@resolved_method
65
65
  end
@@ -112,10 +112,10 @@ module Solargraph
112
112
  #
113
113
  # @param chain [Source::Chain]
114
114
  # @return [String]
115
- def print_chain(chain)
115
+ def print_chain chain
116
116
  out = +''
117
117
  chain.links.each_with_index do |link, index|
118
- if index > 0
118
+ if index.positive?
119
119
  if Source::Chain::Constant
120
120
  out << '::' unless link.word.start_with?('::')
121
121
  else
@@ -62,7 +62,7 @@ module Solargraph
62
62
 
63
63
  # @return [String]
64
64
  def to_code
65
- "\n```ruby\n#{Documenting.normalize_indentation(@plaintext)}#{@plaintext.end_with?("\n") ? '' : "\n"}```\n\n"
65
+ "\n```ruby\n#{Documenting.normalize_indentation(@plaintext)}#{"\n" unless @plaintext.end_with?("\n")}```\n\n"
66
66
  end
67
67
 
68
68
  # @return [String]
@@ -78,7 +78,8 @@ module Solargraph
78
78
  # line and at least two spaces of indentation. This is a common
79
79
  # convention in Ruby core documentation, e.g., String#split.
80
80
  sections = [DocSection.new(false)]
81
- Documenting.normalize_indentation(Documenting.strip_html_comments(docstring.to_s.gsub("\t", ' '))).lines.each do |l|
81
+ Documenting.normalize_indentation(Documenting.strip_html_comments(docstring.to_s.gsub("\t",
82
+ ' '))).lines.each do |l|
82
83
  if l.start_with?(' ')
83
84
  # Code block
84
85
  sections.push DocSection.new(true) unless sections.last.code?
@@ -6,7 +6,7 @@ module Solargraph
6
6
  # @param api_map [ApiMap]
7
7
  # @return [ComplexType, ComplexType::UniqueType]
8
8
  def probe api_map
9
- if presence_certain? && return_type && return_type&.defined?
9
+ if presence_certain? && return_type&.defined?
10
10
  # flow sensitive typing has already figured out this type
11
11
  # has been downcast - use the type it figured out
12
12
  # @sg-ignore flow sensitive typing should support ivars
@@ -16,15 +16,15 @@ module Solargraph
16
16
  super
17
17
  end
18
18
 
19
- def combine_with(other, attrs={})
19
+ def combine_with other, attrs = {}
20
20
  # keep this as a parameter
21
- return other.combine_with(self, attrs) if other.is_a?(Parameter) && !self.is_a?(Parameter)
21
+ return other.combine_with(self, attrs) if other.is_a?(Parameter) && !is_a?(Parameter)
22
22
 
23
23
  super
24
24
  end
25
25
 
26
26
  def to_rbs
27
- (name || '(anon)') + ' ' + (return_type&.to_rbs || 'untyped')
27
+ "#{name || '(anon)'} #{return_type&.to_rbs || 'untyped'}"
28
28
  end
29
29
  end
30
30
  end