solargraph 0.57.0 → 0.58.3

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 (216) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.github/workflows/linting.yml +4 -2
  4. data/.github/workflows/plugins.yml +63 -28
  5. data/.github/workflows/rspec.yml +19 -4
  6. data/.github/workflows/typecheck.yml +2 -2
  7. data/.gitignore +1 -0
  8. data/.rubocop.yml +1 -1
  9. data/.rubocop_todo.yml +90 -1438
  10. data/CHANGELOG.md +39 -0
  11. data/Rakefile +1 -1
  12. data/bin/solargraph +3 -0
  13. data/lib/solargraph/api_map/cache.rb +110 -110
  14. data/lib/solargraph/api_map/constants.rb +279 -218
  15. data/lib/solargraph/api_map/index.rb +193 -169
  16. data/lib/solargraph/api_map/source_to_yard.rb +97 -94
  17. data/lib/solargraph/api_map/store.rb +384 -374
  18. data/lib/solargraph/api_map.rb +945 -951
  19. data/lib/solargraph/bench.rb +45 -45
  20. data/lib/solargraph/complex_type/type_methods.rb +228 -223
  21. data/lib/solargraph/complex_type/unique_type.rb +482 -475
  22. data/lib/solargraph/complex_type.rb +444 -427
  23. data/lib/solargraph/convention/active_support_concern.rb +1 -1
  24. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
  25. data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -91
  26. data/lib/solargraph/convention/data_definition.rb +105 -105
  27. data/lib/solargraph/convention/gemfile.rb +15 -15
  28. data/lib/solargraph/convention/gemspec.rb +23 -23
  29. data/lib/solargraph/convention/rakefile.rb +17 -17
  30. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -61
  31. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -102
  32. data/lib/solargraph/convention/struct_definition.rb +164 -164
  33. data/lib/solargraph/convention.rb +78 -78
  34. data/lib/solargraph/converters/dd.rb +17 -17
  35. data/lib/solargraph/converters/dl.rb +15 -15
  36. data/lib/solargraph/converters/dt.rb +15 -15
  37. data/lib/solargraph/converters/misc.rb +1 -1
  38. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  39. data/lib/solargraph/diagnostics/rubocop.rb +118 -118
  40. data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -66
  41. data/lib/solargraph/diagnostics/type_check.rb +55 -55
  42. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  43. data/lib/solargraph/doc_map.rb +439 -436
  44. data/lib/solargraph/environ.rb +1 -1
  45. data/lib/solargraph/equality.rb +34 -33
  46. data/lib/solargraph/gem_pins.rb +98 -94
  47. data/lib/solargraph/language_server/error_codes.rb +20 -20
  48. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  49. data/lib/solargraph/language_server/host/dispatch.rb +130 -130
  50. data/lib/solargraph/language_server/host/message_worker.rb +112 -112
  51. data/lib/solargraph/language_server/host/sources.rb +99 -99
  52. data/lib/solargraph/language_server/host.rb +878 -872
  53. data/lib/solargraph/language_server/message/base.rb +97 -97
  54. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  55. data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
  56. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -114
  57. data/lib/solargraph/language_server/message/extended/document.rb +23 -23
  58. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  59. data/lib/solargraph/language_server/message/extended/download_core.rb +19 -19
  60. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  61. data/lib/solargraph/language_server/message/initialize.rb +191 -191
  62. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
  63. data/lib/solargraph/language_server/message/text_document/definition.rb +40 -40
  64. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  65. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
  66. data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -145
  67. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
  68. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  69. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  70. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  71. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
  72. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -25
  73. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
  74. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
  75. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -26
  76. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  77. data/lib/solargraph/language_server/message.rb +94 -94
  78. data/lib/solargraph/language_server/progress.rb +1 -1
  79. data/lib/solargraph/language_server/request.rb +27 -25
  80. data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
  81. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  82. data/lib/solargraph/library.rb +683 -683
  83. data/lib/solargraph/location.rb +82 -81
  84. data/lib/solargraph/logging.rb +37 -37
  85. data/lib/solargraph/page.rb +92 -93
  86. data/lib/solargraph/parser/comment_ripper.rb +69 -69
  87. data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -255
  88. data/lib/solargraph/parser/node_processor/base.rb +92 -92
  89. data/lib/solargraph/parser/node_processor.rb +62 -62
  90. data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -159
  91. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
  92. data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -166
  93. data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -499
  94. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -21
  95. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -59
  96. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
  97. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
  98. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -53
  99. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -37
  100. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -23
  101. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -40
  102. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -29
  103. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -59
  104. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -42
  105. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
  106. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -38
  107. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -43
  108. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -292
  109. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
  110. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -29
  111. data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -70
  112. data/lib/solargraph/parser/parser_gem.rb +12 -12
  113. data/lib/solargraph/parser/region.rb +69 -69
  114. data/lib/solargraph/parser/snippet.rb +17 -17
  115. data/lib/solargraph/parser.rb +23 -23
  116. data/lib/solargraph/pin/base.rb +729 -708
  117. data/lib/solargraph/pin/base_variable.rb +126 -124
  118. data/lib/solargraph/pin/block.rb +104 -103
  119. data/lib/solargraph/pin/breakable.rb +9 -9
  120. data/lib/solargraph/pin/callable.rb +231 -227
  121. data/lib/solargraph/pin/closure.rb +72 -76
  122. data/lib/solargraph/pin/common.rb +79 -79
  123. data/lib/solargraph/pin/constant.rb +45 -45
  124. data/lib/solargraph/pin/conversions.rb +123 -123
  125. data/lib/solargraph/pin/delegated_method.rb +120 -121
  126. data/lib/solargraph/pin/documenting.rb +114 -114
  127. data/lib/solargraph/pin/instance_variable.rb +34 -34
  128. data/lib/solargraph/pin/keyword.rb +20 -20
  129. data/lib/solargraph/pin/local_variable.rb +75 -79
  130. data/lib/solargraph/pin/method.rb +672 -656
  131. data/lib/solargraph/pin/method_alias.rb +34 -34
  132. data/lib/solargraph/pin/namespace.rb +115 -115
  133. data/lib/solargraph/pin/parameter.rb +275 -271
  134. data/lib/solargraph/pin/proxy_type.rb +39 -36
  135. data/lib/solargraph/pin/reference/override.rb +47 -47
  136. data/lib/solargraph/pin/reference/superclass.rb +15 -15
  137. data/lib/solargraph/pin/reference.rb +39 -48
  138. data/lib/solargraph/pin/search.rb +61 -58
  139. data/lib/solargraph/pin/signature.rb +61 -61
  140. data/lib/solargraph/pin/symbol.rb +53 -53
  141. data/lib/solargraph/pin/until.rb +18 -18
  142. data/lib/solargraph/pin/while.rb +18 -18
  143. data/lib/solargraph/pin.rb +44 -44
  144. data/lib/solargraph/pin_cache.rb +245 -245
  145. data/lib/solargraph/position.rb +132 -118
  146. data/lib/solargraph/range.rb +112 -108
  147. data/lib/solargraph/rbs_map/conversions.rb +823 -802
  148. data/lib/solargraph/rbs_map/core_fills.rb +84 -66
  149. data/lib/solargraph/rbs_map/core_map.rb +58 -54
  150. data/lib/solargraph/rbs_map/stdlib_map.rb +43 -43
  151. data/lib/solargraph/rbs_map.rb +163 -163
  152. data/lib/solargraph/server_methods.rb +16 -16
  153. data/lib/solargraph/shell.rb +363 -271
  154. data/lib/solargraph/source/chain/array.rb +37 -37
  155. data/lib/solargraph/source/chain/call.rb +337 -333
  156. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  157. data/lib/solargraph/source/chain/constant.rb +26 -89
  158. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  159. data/lib/solargraph/source/chain/hash.rb +34 -34
  160. data/lib/solargraph/source/chain/if.rb +28 -28
  161. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  162. data/lib/solargraph/source/chain/link.rb +109 -109
  163. data/lib/solargraph/source/chain/literal.rb +48 -48
  164. data/lib/solargraph/source/chain/or.rb +23 -23
  165. data/lib/solargraph/source/chain/q_call.rb +11 -11
  166. data/lib/solargraph/source/chain/variable.rb +13 -13
  167. data/lib/solargraph/source/chain/z_super.rb +30 -30
  168. data/lib/solargraph/source/chain.rb +291 -289
  169. data/lib/solargraph/source/change.rb +82 -82
  170. data/lib/solargraph/source/cursor.rb +166 -166
  171. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  172. data/lib/solargraph/source/source_chainer.rb +194 -194
  173. data/lib/solargraph/source/updater.rb +55 -55
  174. data/lib/solargraph/source.rb +498 -498
  175. data/lib/solargraph/source_map/clip.rb +226 -234
  176. data/lib/solargraph/source_map/data.rb +34 -34
  177. data/lib/solargraph/source_map/mapper.rb +259 -261
  178. data/lib/solargraph/source_map.rb +212 -207
  179. data/lib/solargraph/type_checker/checks.rb +124 -124
  180. data/lib/solargraph/type_checker/param_def.rb +37 -37
  181. data/lib/solargraph/type_checker/problem.rb +32 -32
  182. data/lib/solargraph/type_checker/rules.rb +84 -70
  183. data/lib/solargraph/type_checker.rb +814 -752
  184. data/lib/solargraph/version.rb +5 -5
  185. data/lib/solargraph/workspace/config.rb +255 -237
  186. data/lib/solargraph/workspace/require_paths.rb +97 -98
  187. data/lib/solargraph/workspace.rb +220 -225
  188. data/lib/solargraph/yard_map/helpers.rb +44 -44
  189. data/lib/solargraph/yard_map/mapper/to_method.rb +130 -129
  190. data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -30
  191. data/lib/solargraph/yard_map/mapper.rb +79 -79
  192. data/lib/solargraph/yard_map/to_method.rb +89 -88
  193. data/lib/solargraph/yard_tags.rb +20 -20
  194. data/lib/solargraph/yardoc.rb +87 -64
  195. data/lib/solargraph.rb +105 -105
  196. data/rbs/fills/bundler/0/bundler.rbs +4271 -0
  197. data/rbs/fills/open3/0/open3.rbs +172 -0
  198. data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
  199. data/rbs/fills/rubygems/0/errors.rbs +364 -0
  200. data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
  201. data/rbs/fills/rubygems/0/specification.rbs +1753 -0
  202. data/rbs/shims/ast/0/node.rbs +5 -0
  203. data/rbs/shims/ast/2.4/.rbs_meta.yaml +9 -0
  204. data/rbs/shims/ast/2.4/ast.rbs +73 -0
  205. data/rbs/shims/parser/3.2.0.1/manifest.yaml +7 -0
  206. data/rbs/shims/parser/3.2.0.1/parser.rbs +201 -0
  207. data/rbs/shims/parser/3.2.0.1/polyfill.rbs +4 -0
  208. data/rbs_collection.yaml +4 -4
  209. data/solargraph.gemspec +15 -4
  210. metadata +71 -16
  211. data/lib/solargraph/parser/node_methods.rb +0 -97
  212. /data/rbs/fills/{tuple.rbs → tuple/tuple.rbs} +0 -0
  213. /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
  214. /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
  215. /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
  216. /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
@@ -1,79 +1,79 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- module Common
6
- # @!method source
7
- # @abstract
8
- # @return [Source, nil]
9
- # @type @closure [Pin::Closure, nil]
10
-
11
- # @return [Location]
12
- attr_reader :location
13
-
14
- # @sg-ignore Solargraph::Pin::Common#closure return type could not be inferred
15
- # @return [Pin::Closure, nil]
16
- def closure
17
- Solargraph.assert_or_log(:closure, "Closure not set on #{self.class} #{name.inspect} from #{source.inspect}") unless @closure
18
- @closure
19
- end
20
-
21
- # @return [String]
22
- def name
23
- @name ||= ''
24
- end
25
-
26
- # @return [ComplexType]
27
- def return_type
28
- @return_type ||= ComplexType::UNDEFINED
29
- end
30
-
31
- # @return [ComplexType]
32
- def context
33
- # Get the static context from the nearest namespace
34
- @context ||= find_context
35
- end
36
- alias full_context context
37
-
38
- # @return [String]
39
- def namespace
40
- context.namespace.to_s
41
- end
42
-
43
- # @return [ComplexType]
44
- def binder
45
- @binder || context
46
- end
47
-
48
- # @return [String]
49
- def comments
50
- @comments ||= ''
51
- end
52
-
53
- # @return [String]
54
- def path
55
- @path ||= name.empty? ? context.namespace : "#{context.namespace}::#{name}"
56
- end
57
-
58
- protected
59
-
60
- attr_writer :context
61
-
62
- private
63
-
64
- # @return [ComplexType]
65
- def find_context
66
- here = closure
67
- until here.nil?
68
- if here.is_a?(Pin::Namespace)
69
- return here.return_type
70
- elsif here.is_a?(Pin::Method)
71
- return here.context
72
- end
73
- here = here.closure
74
- end
75
- ComplexType::ROOT
76
- end
77
- end
78
- end
79
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ module Common
6
+ # @!method source
7
+ # @abstract
8
+ # @return [Source, nil]
9
+ # @type @closure [Pin::Closure, nil]
10
+
11
+ # @return [Location]
12
+ attr_reader :location
13
+
14
+ # @sg-ignore Solargraph::Pin::Common#closure return type could not be inferred
15
+ # @return [Pin::Closure, nil]
16
+ def closure
17
+ Solargraph.assert_or_log(:closure, "Closure not set on #{self.class} #{name.inspect} from #{source.inspect}") unless @closure
18
+ @closure
19
+ end
20
+
21
+ # @return [String]
22
+ def name
23
+ @name ||= ''
24
+ end
25
+
26
+ # @return [ComplexType]
27
+ def return_type
28
+ @return_type ||= ComplexType::UNDEFINED
29
+ end
30
+
31
+ # @return [ComplexType]
32
+ def context
33
+ # Get the static context from the nearest namespace
34
+ @context ||= find_context
35
+ end
36
+ alias full_context context
37
+
38
+ # @return [String]
39
+ def namespace
40
+ context.namespace.to_s
41
+ end
42
+
43
+ # @return [ComplexType]
44
+ def binder
45
+ @binder || context
46
+ end
47
+
48
+ # @return [String]
49
+ def comments
50
+ @comments ||= ''
51
+ end
52
+
53
+ # @return [String]
54
+ def path
55
+ @path ||= name.empty? ? context.namespace : "#{context.namespace}::#{name}"
56
+ end
57
+
58
+ protected
59
+
60
+ attr_writer :context
61
+
62
+ private
63
+
64
+ # @return [ComplexType]
65
+ def find_context
66
+ here = closure
67
+ until here.nil?
68
+ if here.is_a?(Pin::Namespace)
69
+ return here.return_type
70
+ elsif here.is_a?(Pin::Method)
71
+ return here.context
72
+ end
73
+ here = here.closure
74
+ end
75
+ ComplexType::ROOT
76
+ end
77
+ end
78
+ end
79
+ end
@@ -1,45 +1,45 @@
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.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,123 +1,123 @@
1
- # frozen_string_literal: true
2
-
3
- require 'cgi'
4
-
5
- module Solargraph
6
- module Pin
7
- # @todo Move this stuff. It should be the responsibility of the language server.
8
- # @todo abstract methods below should be verified to be overridden
9
- # by type checker when mixin included by non-abstract class
10
- module Conversions
11
- # @!parse
12
- # include Documenting
13
- # include Common
14
-
15
- # @return [Integer]
16
- # @abstract
17
- def completion_item_kind
18
- raise NotImplementedError
19
- end
20
-
21
- # @abstract
22
- # @return [Boolean]
23
- def deprecated?
24
- raise NotImplementedError
25
- end
26
-
27
- # @abstract
28
- def probed?
29
- raise NotImplementedError
30
- end
31
-
32
- # @abstract
33
- def proxied?
34
- raise NotImplementedError
35
- end
36
-
37
- # @return [Hash]
38
- def completion_item
39
- @completion_item ||= {
40
- label: name,
41
- kind: completion_item_kind,
42
- detail: detail,
43
- data: {
44
- path: path,
45
- return_type: return_type.tag,
46
- location: (location ? location.to_hash : nil),
47
- deprecated: deprecated?
48
- }
49
- }
50
- end
51
-
52
- # @return [Hash]
53
- def resolve_completion_item
54
- @resolve_completion_item ||= begin
55
- extra = {}
56
- alldoc = ''
57
- # alldoc += link_documentation unless link_documentation.nil?
58
- # alldoc += "\n\n" unless alldoc.empty?
59
- alldoc += documentation unless documentation.nil?
60
- extra[:documentation] = alldoc unless alldoc.empty?
61
- completion_item.merge(extra)
62
- end
63
- end
64
-
65
- # @return [::Array<Hash>]
66
- def signature_help
67
- []
68
- end
69
-
70
- # @return [String, nil]
71
- def detail
72
- # This property is not cached in an instance variable because it can
73
- # change when pins get proxied.
74
- detail = String.new
75
- detail += "=#{probed? ? '~' : (proxied? ? '^' : '>')} #{return_type.to_s}" unless return_type.undefined?
76
- detail.strip!
77
- return nil if detail.empty?
78
- detail
79
- end
80
-
81
- # Get a markdown-flavored link to a documentation page.
82
- #
83
- # @return [String]
84
- def link_documentation
85
- @link_documentation ||= generate_link
86
- end
87
-
88
- # @return [String, nil]
89
- def text_documentation
90
- this_path = path || name || return_type.tag
91
- return nil if this_path == 'undefined'
92
- escape_brackets this_path
93
- end
94
-
95
- # @return [void]
96
- def reset_conversions
97
- @completion_item = nil
98
- @resolve_completion_item = nil
99
- @signature_help = nil
100
- @detail = nil
101
- @link_documentation = nil
102
- end
103
-
104
- private
105
-
106
- # @return [String, nil]
107
- def generate_link
108
- this_path = path || name || return_type.tag
109
- return nil if this_path == 'undefined'
110
- return nil if this_path.nil? || this_path == 'undefined'
111
- return this_path if path.nil?
112
- "[#{escape_brackets(this_path).gsub('_', '\\\\_')}](solargraph:/document?query=#{CGI.escape(this_path)})"
113
- end
114
-
115
- # @param text [String]
116
- # @return [String]
117
- def escape_brackets text
118
- # text.gsub(/(\<|\>)/, "\\#{$1}")
119
- text.gsub("<", '\<').gsub(">", '\>')
120
- end
121
- end
122
- end
123
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'cgi'
4
+
5
+ module Solargraph
6
+ module Pin
7
+ # @todo Move this stuff. It should be the responsibility of the language server.
8
+ # @todo abstract methods below should be verified to be overridden
9
+ # by type checker when mixin included by non-abstract class
10
+ module Conversions
11
+ # @!parse
12
+ # include Documenting
13
+ # include Common
14
+
15
+ # @return [Integer]
16
+ # @abstract
17
+ def completion_item_kind
18
+ raise NotImplementedError
19
+ end
20
+
21
+ # @abstract
22
+ # @return [Boolean]
23
+ def deprecated?
24
+ raise NotImplementedError
25
+ end
26
+
27
+ # @abstract
28
+ def probed?
29
+ raise NotImplementedError
30
+ end
31
+
32
+ # @abstract
33
+ def proxied?
34
+ raise NotImplementedError
35
+ end
36
+
37
+ # @return [Hash]
38
+ def completion_item
39
+ @completion_item ||= {
40
+ label: name,
41
+ kind: completion_item_kind,
42
+ detail: detail,
43
+ data: {
44
+ path: path,
45
+ return_type: return_type.tag,
46
+ location: (location ? location.to_hash : nil),
47
+ deprecated: deprecated?
48
+ }
49
+ }
50
+ end
51
+
52
+ # @return [Hash]
53
+ def resolve_completion_item
54
+ @resolve_completion_item ||= begin
55
+ extra = {}
56
+ alldoc = ''
57
+ # alldoc += link_documentation unless link_documentation.nil?
58
+ # alldoc += "\n\n" unless alldoc.empty?
59
+ alldoc += documentation unless documentation.nil?
60
+ extra[:documentation] = alldoc unless alldoc.empty?
61
+ completion_item.merge(extra)
62
+ end
63
+ end
64
+
65
+ # @return [::Array<Hash>]
66
+ def signature_help
67
+ []
68
+ end
69
+
70
+ # @return [String, nil]
71
+ def detail
72
+ # This property is not cached in an instance variable because it can
73
+ # change when pins get proxied.
74
+ detail = String.new
75
+ detail += "=#{probed? ? '~' : (proxied? ? '^' : '>')} #{return_type.to_s}" unless return_type.undefined?
76
+ detail.strip!
77
+ return nil if detail.empty?
78
+ detail
79
+ end
80
+
81
+ # Get a markdown-flavored link to a documentation page.
82
+ #
83
+ # @return [String]
84
+ def link_documentation
85
+ @link_documentation ||= generate_link
86
+ end
87
+
88
+ # @return [String, nil]
89
+ def text_documentation
90
+ this_path = path || name || return_type.tag
91
+ return nil if this_path == 'undefined'
92
+ escape_brackets this_path
93
+ end
94
+
95
+ # @return [void]
96
+ def reset_conversions
97
+ @completion_item = nil
98
+ @resolve_completion_item = nil
99
+ @signature_help = nil
100
+ @detail = nil
101
+ @link_documentation = nil
102
+ end
103
+
104
+ private
105
+
106
+ # @return [String, nil]
107
+ def generate_link
108
+ this_path = path || name || return_type.tag
109
+ return nil if this_path == 'undefined'
110
+ return nil if this_path.nil? || this_path == 'undefined'
111
+ return this_path if path.nil?
112
+ "[#{escape_brackets(this_path).gsub('_', '\\\\_')}](solargraph:/document?query=#{CGI.escape(this_path)})"
113
+ end
114
+
115
+ # @param text [String]
116
+ # @return [String]
117
+ def escape_brackets text
118
+ # text.gsub(/(\<|\>)/, "\\#{$1}")
119
+ text.gsub("<", '\<').gsub(">", '\>')
120
+ end
121
+ end
122
+ end
123
+ end