solargraph 0.32.1 → 0.32.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 (177) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +6 -0
  5. data/.travis.yml +25 -0
  6. data/EXAMPLES.md +76 -0
  7. data/Gemfile +3 -0
  8. data/LANGUAGE_SERVER.md +51 -0
  9. data/LICENSE +21 -0
  10. data/OVERVIEW.md +37 -0
  11. data/README.md +106 -0
  12. data/Rakefile +14 -0
  13. data/SERVER.md +95 -0
  14. data/bin/solargraph +0 -0
  15. data/bin/solargraph-runtime +5 -5
  16. data/lib/solargraph.rb +54 -54
  17. data/lib/solargraph/api_map.rb +659 -659
  18. data/lib/solargraph/api_map/cache.rb +49 -49
  19. data/lib/solargraph/api_map/source_to_yard.rb +67 -67
  20. data/lib/solargraph/api_map/store.rb +201 -201
  21. data/lib/solargraph/bundle.rb +24 -24
  22. data/lib/solargraph/complex_type.rb +150 -150
  23. data/lib/solargraph/complex_type/type_methods.rb +124 -124
  24. data/lib/solargraph/complex_type/unique_type.rb +44 -44
  25. data/lib/solargraph/core_fills.rb +37 -37
  26. data/lib/solargraph/diagnostics.rb +52 -52
  27. data/lib/solargraph/diagnostics/base.rb +20 -20
  28. data/lib/solargraph/diagnostics/require_not_found.rb +28 -28
  29. data/lib/solargraph/diagnostics/rubocop.rb +98 -98
  30. data/lib/solargraph/diagnostics/rubocop_helpers.rb +46 -46
  31. data/lib/solargraph/diagnostics/type_not_defined.rb +108 -108
  32. data/lib/solargraph/diagnostics/update_errors.rb +38 -38
  33. data/lib/solargraph/language_server/completion_item_kinds.rb +33 -33
  34. data/lib/solargraph/language_server/error_codes.rb +18 -18
  35. data/lib/solargraph/language_server/host.rb +684 -681
  36. data/lib/solargraph/language_server/host/cataloger.rb +54 -79
  37. data/lib/solargraph/language_server/host/diagnoser.rb +80 -80
  38. data/lib/solargraph/language_server/host/dispatch.rb +112 -113
  39. data/lib/solargraph/language_server/host/sources.rb +138 -138
  40. data/lib/solargraph/language_server/message.rb +90 -90
  41. data/lib/solargraph/language_server/message/base.rb +83 -83
  42. data/lib/solargraph/language_server/message/completion_item/resolve.rb +40 -40
  43. data/lib/solargraph/language_server/message/exit_notification.rb +11 -11
  44. data/lib/solargraph/language_server/message/extended.rb +19 -19
  45. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +86 -86
  46. data/lib/solargraph/language_server/message/extended/document.rb +18 -18
  47. data/lib/solargraph/language_server/message/extended/document_gems.rb +30 -30
  48. data/lib/solargraph/language_server/message/extended/environment.rb +20 -20
  49. data/lib/solargraph/language_server/message/extended/search.rb +18 -18
  50. data/lib/solargraph/language_server/message/initialize.rb +141 -141
  51. data/lib/solargraph/language_server/message/initialized.rb +23 -23
  52. data/lib/solargraph/language_server/message/shutdown.rb +11 -11
  53. data/lib/solargraph/language_server/message/text_document.rb +25 -25
  54. data/lib/solargraph/language_server/message/text_document/completion.rb +51 -51
  55. data/lib/solargraph/language_server/message/text_document/definition.rb +18 -18
  56. data/lib/solargraph/language_server/message/text_document/did_change.rb +13 -13
  57. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +21 -21
  58. data/lib/solargraph/language_server/message/text_document/folding_range.rb +24 -24
  59. data/lib/solargraph/language_server/message/text_document/formatting.rb +50 -50
  60. data/lib/solargraph/language_server/message/text_document/hover.rb +31 -31
  61. data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +32 -32
  62. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +9 -9
  63. data/lib/solargraph/language_server/message/text_document/references.rb +14 -14
  64. data/lib/solargraph/language_server/message/text_document/rename.rb +17 -17
  65. data/lib/solargraph/language_server/message/text_document/signature_help.rb +19 -19
  66. data/lib/solargraph/language_server/message/workspace.rb +12 -12
  67. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +29 -29
  68. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +29 -27
  69. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
  70. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +21 -21
  71. data/lib/solargraph/language_server/request.rb +22 -22
  72. data/lib/solargraph/language_server/symbol_kinds.rb +34 -34
  73. data/lib/solargraph/language_server/transport.rb +11 -11
  74. data/lib/solargraph/language_server/transport/adapter.rb +60 -60
  75. data/lib/solargraph/language_server/transport/data_reader.rb +66 -66
  76. data/lib/solargraph/language_server/uri_helpers.rb +25 -25
  77. data/lib/solargraph/library.rb +421 -419
  78. data/lib/solargraph/live_map.rb +126 -126
  79. data/lib/solargraph/live_map/cache.rb +38 -38
  80. data/lib/solargraph/location.rb +31 -31
  81. data/lib/solargraph/logging.rb +25 -25
  82. data/lib/solargraph/page.rb +68 -68
  83. data/lib/solargraph/pin.rb +50 -50
  84. data/lib/solargraph/pin/attribute.rb +41 -41
  85. data/lib/solargraph/pin/base.rb +280 -280
  86. data/lib/solargraph/pin/base_method.rb +76 -76
  87. data/lib/solargraph/pin/base_variable.rb +72 -72
  88. data/lib/solargraph/pin/block.rb +32 -32
  89. data/lib/solargraph/pin/block_parameter.rb +103 -103
  90. data/lib/solargraph/pin/class_variable.rb +9 -9
  91. data/lib/solargraph/pin/constant.rb +30 -30
  92. data/lib/solargraph/pin/conversions.rb +79 -79
  93. data/lib/solargraph/pin/documenting.rb +41 -41
  94. data/lib/solargraph/pin/duck_method.rb +14 -14
  95. data/lib/solargraph/pin/global_variable.rb +9 -9
  96. data/lib/solargraph/pin/instance_variable.rb +9 -9
  97. data/lib/solargraph/pin/keyword.rb +17 -17
  98. data/lib/solargraph/pin/local_variable.rb +23 -23
  99. data/lib/solargraph/pin/localized.rb +22 -22
  100. data/lib/solargraph/pin/method.rb +126 -126
  101. data/lib/solargraph/pin/method_alias.rb +30 -30
  102. data/lib/solargraph/pin/method_parameter.rb +40 -40
  103. data/lib/solargraph/pin/namespace.rb +54 -54
  104. data/lib/solargraph/pin/plugin/method.rb +25 -25
  105. data/lib/solargraph/pin/proxy_type.rb +35 -35
  106. data/lib/solargraph/pin/reference.rb +22 -22
  107. data/lib/solargraph/pin/reference/extend.rb +11 -11
  108. data/lib/solargraph/pin/reference/include.rb +11 -11
  109. data/lib/solargraph/pin/reference/require.rb +15 -15
  110. data/lib/solargraph/pin/reference/superclass.rb +11 -11
  111. data/lib/solargraph/pin/symbol.rb +44 -44
  112. data/lib/solargraph/pin/yard_pin.rb +10 -10
  113. data/lib/solargraph/pin/yard_pin/constant.rb +14 -14
  114. data/lib/solargraph/pin/yard_pin/method.rb +35 -35
  115. data/lib/solargraph/pin/yard_pin/namespace.rb +19 -19
  116. data/lib/solargraph/pin/yard_pin/yard_mixin.rb +14 -14
  117. data/lib/solargraph/plugin.rb +8 -8
  118. data/lib/solargraph/plugin/base.rb +41 -41
  119. data/lib/solargraph/plugin/canceler.rb +11 -11
  120. data/lib/solargraph/plugin/process.rb +172 -172
  121. data/lib/solargraph/plugin/runtime.rb +134 -134
  122. data/lib/solargraph/position.rb +110 -110
  123. data/lib/solargraph/range.rb +83 -83
  124. data/lib/solargraph/server_methods.rb +14 -14
  125. data/lib/solargraph/shell.rb +102 -102
  126. data/lib/solargraph/source.rb +521 -521
  127. data/lib/solargraph/source/chain.rb +120 -120
  128. data/lib/solargraph/source/chain/call.rb +107 -107
  129. data/lib/solargraph/source/chain/class_variable.rb +11 -11
  130. data/lib/solargraph/source/chain/constant.rb +30 -30
  131. data/lib/solargraph/source/chain/global_variable.rb +11 -11
  132. data/lib/solargraph/source/chain/head.rb +33 -33
  133. data/lib/solargraph/source/chain/instance_variable.rb +11 -11
  134. data/lib/solargraph/source/chain/link.rb +33 -33
  135. data/lib/solargraph/source/chain/literal.rb +21 -21
  136. data/lib/solargraph/source/chain/variable.rb +11 -11
  137. data/lib/solargraph/source/change.rb +77 -77
  138. data/lib/solargraph/source/cursor.rb +157 -157
  139. data/lib/solargraph/source/node_chainer.rb +96 -96
  140. data/lib/solargraph/source/node_methods.rb +225 -225
  141. data/lib/solargraph/source/source_chainer.rb +183 -183
  142. data/lib/solargraph/source_map.rb +169 -169
  143. data/lib/solargraph/source_map/clip.rb +145 -145
  144. data/lib/solargraph/source_map/completion.rb +21 -21
  145. data/lib/solargraph/source_map/mapper.rb +149 -149
  146. data/lib/solargraph/source_map/node_processor.rb +78 -78
  147. data/lib/solargraph/source_map/node_processor/alias_node.rb +19 -19
  148. data/lib/solargraph/source_map/node_processor/args_node.rb +28 -28
  149. data/lib/solargraph/source_map/node_processor/base.rb +68 -68
  150. data/lib/solargraph/source_map/node_processor/begin_node.rb +11 -11
  151. data/lib/solargraph/source_map/node_processor/block_node.rb +14 -14
  152. data/lib/solargraph/source_map/node_processor/casgn_node.rb +14 -14
  153. data/lib/solargraph/source_map/node_processor/cvasgn_node.rb +14 -14
  154. data/lib/solargraph/source_map/node_processor/def_node.rb +54 -54
  155. data/lib/solargraph/source_map/node_processor/defs_node.rb +21 -21
  156. data/lib/solargraph/source_map/node_processor/gvasgn_node.rb +12 -12
  157. data/lib/solargraph/source_map/node_processor/ivasgn_node.rb +18 -18
  158. data/lib/solargraph/source_map/node_processor/lvasgn_node.rb +16 -16
  159. data/lib/solargraph/source_map/node_processor/namespace_node.rb +26 -26
  160. data/lib/solargraph/source_map/node_processor/orasgn_node.rb +12 -12
  161. data/lib/solargraph/source_map/node_processor/sclass_node.rb +11 -11
  162. data/lib/solargraph/source_map/node_processor/send_node.rb +162 -162
  163. data/lib/solargraph/source_map/node_processor/sym_node.rb +11 -11
  164. data/lib/solargraph/source_map/region.rb +58 -58
  165. data/lib/solargraph/version.rb +3 -3
  166. data/lib/solargraph/views/environment.erb +53 -53
  167. data/lib/solargraph/workspace.rb +183 -183
  168. data/lib/solargraph/workspace/config.rb +170 -170
  169. data/lib/solargraph/yard_map.rb +298 -298
  170. data/lib/solargraph/yard_map/cache.rb +17 -17
  171. data/lib/solargraph/yard_map/core_docs.rb +163 -163
  172. data/lib/solargraph/yard_map/core_gen.rb +76 -76
  173. data/lib/yard-coregen.rb +16 -16
  174. data/lib/yard-solargraph.rb +18 -18
  175. data/solargraph.gemspec +37 -0
  176. data/travis-bundler.rb +10 -0
  177. metadata +19 -6
@@ -1,76 +1,76 @@
1
- module Solargraph
2
- module Pin
3
- # The base class for method and attribute pins.
4
- #
5
- class BaseMethod < Base
6
- # @return [Symbol] :instance or :class
7
- attr_reader :scope
8
-
9
- # @return [Symbol] :public, :private, or :protected
10
- attr_reader :visibility
11
-
12
- def return_complex_type
13
- @return_complex_type ||= generate_complex_type
14
- end
15
-
16
- def typify api_map
17
- decl = super
18
- return decl unless decl.undefined?
19
- type = see_reference(api_map)
20
- return type unless type.nil?
21
- ComplexType::UNDEFINED
22
- end
23
-
24
- private
25
-
26
- # @return [ComplexType]
27
- def generate_complex_type
28
- tag = docstring.tag(:return)
29
- if tag.nil?
30
- ol = docstring.tag(:overload)
31
- tag = ol.tag(:return) unless ol.nil?
32
- end
33
- return ComplexType::UNDEFINED if tag.nil? or tag.types.nil? or tag.types.empty?
34
- ComplexType.try_parse *tag.types
35
- end
36
-
37
- # @param api_map [ApiMap]
38
- # @return [ComplexType]
39
- def see_reference api_map
40
- docstring.ref_tags.each do |ref|
41
- next unless ref.tag_name == 'return' && ref.owner
42
- result = resolve_reference(ref.owner.to_s, api_map)
43
- return result unless result.nil?
44
- end
45
- match = comments.match(/\(see (.*)\)/)
46
- return nil if match.nil?
47
- resolve_reference match[1], api_map
48
- end
49
-
50
- # @param ref [String]
51
- # @param api_map [ApiMap]
52
- # @return [ComplexType]
53
- def resolve_reference ref, api_map
54
- parts = ref.split(/[\.#]/)
55
- if parts.first.empty?
56
- path = "#{namespace}#{ref}"
57
- else
58
- fqns = api_map.qualify(parts.first, namespace)
59
- return ComplexType::UNDEFINED if fqns.nil?
60
- path = fqns + ref[parts.first.length] + parts.last
61
- end
62
- pins = api_map.get_path_pins(path)
63
- pins.each do |pin|
64
- type = pin.typify(api_map)
65
- return type unless type.undefined?
66
- end
67
- pins = api_map.get_path_pins(path)
68
- pins.each do |pin|
69
- type = pin.typify(api_map)
70
- return type unless type.undefined?
71
- end
72
- nil
73
- end
74
- end
75
- end
76
- end
1
+ module Solargraph
2
+ module Pin
3
+ # The base class for method and attribute pins.
4
+ #
5
+ class BaseMethod < Base
6
+ # @return [Symbol] :instance or :class
7
+ attr_reader :scope
8
+
9
+ # @return [Symbol] :public, :private, or :protected
10
+ attr_reader :visibility
11
+
12
+ def return_complex_type
13
+ @return_complex_type ||= generate_complex_type
14
+ end
15
+
16
+ def typify api_map
17
+ decl = super
18
+ return decl unless decl.undefined?
19
+ type = see_reference(api_map)
20
+ return type unless type.nil?
21
+ ComplexType::UNDEFINED
22
+ end
23
+
24
+ private
25
+
26
+ # @return [ComplexType]
27
+ def generate_complex_type
28
+ tag = docstring.tag(:return)
29
+ if tag.nil?
30
+ ol = docstring.tag(:overload)
31
+ tag = ol.tag(:return) unless ol.nil?
32
+ end
33
+ return ComplexType::UNDEFINED if tag.nil? or tag.types.nil? or tag.types.empty?
34
+ ComplexType.try_parse *tag.types
35
+ end
36
+
37
+ # @param api_map [ApiMap]
38
+ # @return [ComplexType]
39
+ def see_reference api_map
40
+ docstring.ref_tags.each do |ref|
41
+ next unless ref.tag_name == 'return' && ref.owner
42
+ result = resolve_reference(ref.owner.to_s, api_map)
43
+ return result unless result.nil?
44
+ end
45
+ match = comments.match(/\(see (.*)\)/)
46
+ return nil if match.nil?
47
+ resolve_reference match[1], api_map
48
+ end
49
+
50
+ # @param ref [String]
51
+ # @param api_map [ApiMap]
52
+ # @return [ComplexType]
53
+ def resolve_reference ref, api_map
54
+ parts = ref.split(/[\.#]/)
55
+ if parts.first.empty?
56
+ path = "#{namespace}#{ref}"
57
+ else
58
+ fqns = api_map.qualify(parts.first, namespace)
59
+ return ComplexType::UNDEFINED if fqns.nil?
60
+ path = fqns + ref[parts.first.length] + parts.last
61
+ end
62
+ pins = api_map.get_path_pins(path)
63
+ pins.each do |pin|
64
+ type = pin.typify(api_map)
65
+ return type unless type.undefined?
66
+ end
67
+ pins = api_map.get_path_pins(path)
68
+ pins.each do |pin|
69
+ type = pin.typify(api_map)
70
+ return type unless type.undefined?
71
+ end
72
+ nil
73
+ end
74
+ end
75
+ end
76
+ end
@@ -1,72 +1,72 @@
1
- module Solargraph
2
- module Pin
3
- class BaseVariable < Base
4
- include Solargraph::Source::NodeMethods
5
-
6
- attr_reader :context
7
-
8
- attr_reader :assignment
9
-
10
- def initialize location, namespace, name, comments, assignment, literal, context
11
- super(location, namespace, name, comments)
12
- @assignment = assignment
13
- @literal = literal
14
- @context = context
15
- end
16
-
17
- def signature
18
- @signature ||= resolve_node_signature(@assignment)
19
- end
20
-
21
- def completion_item_kind
22
- Solargraph::LanguageServer::CompletionItemKinds::VARIABLE
23
- end
24
-
25
- # @return [Integer]
26
- def symbol_kind
27
- Solargraph::LanguageServer::SymbolKinds::VARIABLE
28
- end
29
-
30
- def return_complex_type
31
- @return_complex_type ||= generate_complex_type
32
- end
33
-
34
- def nil_assignment?
35
- return_complex_type.nil?
36
- end
37
-
38
- def variable?
39
- true
40
- end
41
-
42
- def probe api_map
43
- return ComplexType::UNDEFINED if @assignment.nil?
44
- chain = Source::NodeChainer.chain(@assignment, filename)
45
- clip = api_map.clip_at(location.filename, location.range.start)
46
- locals = clip.locals - [self]
47
- chain.infer(api_map, ProxyType.anonymous(context), locals)
48
- end
49
-
50
- def == other
51
- return false unless super
52
- assignment == other.assignment
53
- end
54
-
55
- def try_merge! pin
56
- return false unless super
57
- @assignment = pin.assignment
58
- @return_complex_type = pin.return_complex_type
59
- true
60
- end
61
-
62
- private
63
-
64
- def generate_complex_type
65
- tag = docstring.tag(:type)
66
- return ComplexType.try_parse(*tag.types) unless tag.nil? || tag.types.nil? || tag.types.empty?
67
- return ComplexType.try_parse(@literal) unless @literal.nil?
68
- ComplexType.new
69
- end
70
- end
71
- end
72
- end
1
+ module Solargraph
2
+ module Pin
3
+ class BaseVariable < Base
4
+ include Solargraph::Source::NodeMethods
5
+
6
+ attr_reader :context
7
+
8
+ attr_reader :assignment
9
+
10
+ def initialize location, namespace, name, comments, assignment, literal, context
11
+ super(location, namespace, name, comments)
12
+ @assignment = assignment
13
+ @literal = literal
14
+ @context = context
15
+ end
16
+
17
+ def signature
18
+ @signature ||= resolve_node_signature(@assignment)
19
+ end
20
+
21
+ def completion_item_kind
22
+ Solargraph::LanguageServer::CompletionItemKinds::VARIABLE
23
+ end
24
+
25
+ # @return [Integer]
26
+ def symbol_kind
27
+ Solargraph::LanguageServer::SymbolKinds::VARIABLE
28
+ end
29
+
30
+ def return_complex_type
31
+ @return_complex_type ||= generate_complex_type
32
+ end
33
+
34
+ def nil_assignment?
35
+ return_complex_type.nil?
36
+ end
37
+
38
+ def variable?
39
+ true
40
+ end
41
+
42
+ def probe api_map
43
+ return ComplexType::UNDEFINED if @assignment.nil?
44
+ chain = Source::NodeChainer.chain(@assignment, filename)
45
+ clip = api_map.clip_at(location.filename, location.range.start)
46
+ locals = clip.locals - [self]
47
+ chain.infer(api_map, ProxyType.anonymous(context), locals)
48
+ end
49
+
50
+ def == other
51
+ return false unless super
52
+ assignment == other.assignment
53
+ end
54
+
55
+ def try_merge! pin
56
+ return false unless super
57
+ @assignment = pin.assignment
58
+ @return_complex_type = pin.return_complex_type
59
+ true
60
+ end
61
+
62
+ private
63
+
64
+ def generate_complex_type
65
+ tag = docstring.tag(:type)
66
+ return ComplexType.try_parse(*tag.types) unless tag.nil? || tag.types.nil? || tag.types.empty?
67
+ return ComplexType.try_parse(@literal) unless @literal.nil?
68
+ ComplexType.new
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,32 +1,32 @@
1
- module Solargraph
2
- module Pin
3
- class Block < Base
4
- # The signature of the method that receives this block.
5
- #
6
- # @return [Parser::AST::Node]
7
- attr_reader :receiver
8
-
9
- def initialize location, namespace, name, comments, receiver, context
10
- super(location, namespace, name, comments)
11
- @receiver = receiver
12
- @context = context
13
- end
14
-
15
- def kind
16
- Pin::BLOCK
17
- end
18
-
19
- # @return [Array<String>]
20
- def parameters
21
- @parameters ||= []
22
- end
23
-
24
- def nearly? other
25
- return false unless super
26
- # @todo Trying to not to block merges too much
27
- # receiver == other.receiver and parameters == other.parameters
28
- true
29
- end
30
- end
31
- end
32
- end
1
+ module Solargraph
2
+ module Pin
3
+ class Block < Base
4
+ # The signature of the method that receives this block.
5
+ #
6
+ # @return [Parser::AST::Node]
7
+ attr_reader :receiver
8
+
9
+ def initialize location, namespace, name, comments, receiver, context
10
+ super(location, namespace, name, comments)
11
+ @receiver = receiver
12
+ @context = context
13
+ end
14
+
15
+ def kind
16
+ Pin::BLOCK
17
+ end
18
+
19
+ # @return [Array<String>]
20
+ def parameters
21
+ @parameters ||= []
22
+ end
23
+
24
+ def nearly? other
25
+ return false unless super
26
+ # @todo Trying to not to block merges too much
27
+ # receiver == other.receiver and parameters == other.parameters
28
+ true
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,103 +1,103 @@
1
- module Solargraph
2
- module Pin
3
- class BlockParameter < Base
4
- include Localized
5
-
6
- # @return [Pin::Block]
7
- attr_reader :block
8
-
9
- def initialize location, namespace, name, comments, block
10
- super(location, namespace, name, comments)
11
- @block = block
12
- @presence = block.location.range
13
- end
14
-
15
- # @return [Integer]
16
- def kind
17
- Pin::BLOCK_PARAMETER
18
- end
19
-
20
- # @return [Integer]
21
- def completion_item_kind
22
- Solargraph::LanguageServer::CompletionItemKinds::VARIABLE
23
- end
24
-
25
- # @return [Integer]
26
- def symbol_kind
27
- Solargraph::LanguageServer::SymbolKinds::VARIABLE
28
- end
29
-
30
- # The parameter's zero-based location in the block's signature.
31
- #
32
- # @return [Integer]
33
- def index
34
- block.parameters.index(self)
35
- end
36
-
37
- def nearly? other
38
- return false unless super
39
- block.nearly?(other.block)
40
- end
41
-
42
- def try_merge! other
43
- return false unless super
44
- @block = other.block
45
- @presence = other.block.location.range
46
- @return_complex_type = nil
47
- true
48
- end
49
-
50
- # @return [Array<Solargraph::ComplexType>]
51
- def return_complex_type
52
- if @return_complex_type.nil?
53
- @return_complex_type = ComplexType.new
54
- found = nil
55
- params = block.docstring.tags(:param)
56
- params.each do |p|
57
- next unless p.name == name
58
- found = p
59
- break
60
- end
61
- if found.nil? and !index.nil?
62
- found = params[index] if params[index] && (params[index].name.nil? || params[index].name.empty?)
63
- end
64
- @return_complex_type = ComplexType.try_parse(*found.types) unless found.nil? or found.types.nil?
65
- end
66
- super
67
- @return_complex_type
68
- end
69
-
70
- def context
71
- block
72
- end
73
-
74
- # @param api_map [ApiMap]
75
- def typify api_map
76
- # @todo Does anything need to be eliminated because it's more accurately a probe?
77
- type = super
78
- return type unless type.undefined?
79
- chain = Source::NodeChainer.chain(block.receiver, filename)
80
- clip = api_map.clip_at(location.filename, location.range.start)
81
- locals = clip.locals - [self]
82
- meths = chain.define(api_map, block, locals)
83
- meths.each do |meth|
84
- if (Solargraph::CoreFills::METHODS_WITH_YIELDPARAM_SUBTYPES.include?(meth.path))
85
- bmeth = chain.base.define(api_map, context, locals).first
86
- return ComplexType::UNDEFINED if bmeth.nil? or bmeth.return_complex_type.undefined? or bmeth.return_complex_type.subtypes.empty?
87
- return bmeth.return_complex_type.subtypes.first.qualify(api_map, bmeth.context.namespace)
88
- elsif (Solargraph::CoreFills::METHODS_WITH_YIELDPARAM_SELF.include?(meth.path))
89
- bmeth = chain.base.define(api_map, context, locals).first
90
- return ComplexType::UNDEFINED if bmeth.nil?
91
- return bmeth.typify(api_map)
92
- else
93
- yps = meth.docstring.tags(:yieldparam)
94
- unless yps[index].nil? or yps[index].types.nil? or yps[index].types.empty?
95
- return ComplexType.try_parse(yps[index].types.first).qualify(api_map, meth.context.namespace)
96
- end
97
- end
98
- end
99
- ComplexType::UNDEFINED
100
- end
101
- end
102
- end
103
- end
1
+ module Solargraph
2
+ module Pin
3
+ class BlockParameter < Base
4
+ include Localized
5
+
6
+ # @return [Pin::Block]
7
+ attr_reader :block
8
+
9
+ def initialize location, namespace, name, comments, block
10
+ super(location, namespace, name, comments)
11
+ @block = block
12
+ @presence = block.location.range
13
+ end
14
+
15
+ # @return [Integer]
16
+ def kind
17
+ Pin::BLOCK_PARAMETER
18
+ end
19
+
20
+ # @return [Integer]
21
+ def completion_item_kind
22
+ Solargraph::LanguageServer::CompletionItemKinds::VARIABLE
23
+ end
24
+
25
+ # @return [Integer]
26
+ def symbol_kind
27
+ Solargraph::LanguageServer::SymbolKinds::VARIABLE
28
+ end
29
+
30
+ # The parameter's zero-based location in the block's signature.
31
+ #
32
+ # @return [Integer]
33
+ def index
34
+ block.parameters.index(self)
35
+ end
36
+
37
+ def nearly? other
38
+ return false unless super
39
+ block.nearly?(other.block)
40
+ end
41
+
42
+ def try_merge! other
43
+ return false unless super
44
+ @block = other.block
45
+ @presence = other.block.location.range
46
+ @return_complex_type = nil
47
+ true
48
+ end
49
+
50
+ # @return [Array<Solargraph::ComplexType>]
51
+ def return_complex_type
52
+ if @return_complex_type.nil?
53
+ @return_complex_type = ComplexType.new
54
+ found = nil
55
+ params = block.docstring.tags(:param)
56
+ params.each do |p|
57
+ next unless p.name == name
58
+ found = p
59
+ break
60
+ end
61
+ if found.nil? and !index.nil?
62
+ found = params[index] if params[index] && (params[index].name.nil? || params[index].name.empty?)
63
+ end
64
+ @return_complex_type = ComplexType.try_parse(*found.types) unless found.nil? or found.types.nil?
65
+ end
66
+ super
67
+ @return_complex_type
68
+ end
69
+
70
+ def context
71
+ block
72
+ end
73
+
74
+ # @param api_map [ApiMap]
75
+ def typify api_map
76
+ # @todo Does anything need to be eliminated because it's more accurately a probe?
77
+ type = super
78
+ return type unless type.undefined?
79
+ chain = Source::NodeChainer.chain(block.receiver, filename)
80
+ clip = api_map.clip_at(location.filename, location.range.start)
81
+ locals = clip.locals - [self]
82
+ meths = chain.define(api_map, block, locals)
83
+ meths.each do |meth|
84
+ if (Solargraph::CoreFills::METHODS_WITH_YIELDPARAM_SUBTYPES.include?(meth.path))
85
+ bmeth = chain.base.define(api_map, context, locals).first
86
+ return ComplexType::UNDEFINED if bmeth.nil? or bmeth.return_complex_type.undefined? or bmeth.return_complex_type.subtypes.empty?
87
+ return bmeth.return_complex_type.subtypes.first.qualify(api_map, bmeth.context.namespace)
88
+ elsif (Solargraph::CoreFills::METHODS_WITH_YIELDPARAM_SELF.include?(meth.path))
89
+ bmeth = chain.base.define(api_map, context, locals).first
90
+ return ComplexType::UNDEFINED if bmeth.nil?
91
+ return bmeth.typify(api_map)
92
+ else
93
+ yps = meth.docstring.tags(:yieldparam)
94
+ unless yps[index].nil? or yps[index].types.nil? or yps[index].types.empty?
95
+ return ComplexType.try_parse(yps[index].types.first).qualify(api_map, meth.context.namespace)
96
+ end
97
+ end
98
+ end
99
+ ComplexType::UNDEFINED
100
+ end
101
+ end
102
+ end
103
+ end