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,121 +1,120 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- # A DelegatedMethod is a more complicated version of a MethodAlias that
6
- # allows aliasing a method from a different closure (class/module etc).
7
- class DelegatedMethod < Pin::Method
8
- # A DelegatedMethod can be constructed with either a :resolved_method
9
- # pin, or a :receiver_chain. When a :receiver_chain is supplied, it
10
- # will be used to *dynamically* resolve a receiver type within the
11
- # given closure/scope, and the delegated method will then be resolved
12
- # to a method pin on that type.
13
- #
14
- # @param method [Method, nil] an already resolved method pin.
15
- # @param receiver [Source::Chain, nil] the source code used to resolve the receiver for this delegated method.
16
- # @param name [String]
17
- # @param receiver_method_name [String] the method name that will be called on the receiver (defaults to :name).
18
- def initialize(method: nil, receiver: nil, name: method&.name, receiver_method_name: name, **splat)
19
- raise ArgumentError, 'either :method or :receiver is required' if (method && receiver) || (!method && !receiver)
20
- super(name: name, **splat)
21
-
22
- @receiver_chain = receiver
23
- @resolved_method = method
24
- @receiver_method_name = receiver_method_name
25
- end
26
-
27
- def inner_desc
28
- "#{name} => #{@receiver_chain}##{@receiver_method_name}"
29
- end
30
-
31
- def location
32
- return super if super
33
-
34
- @resolved_method&.send(:location)
35
- end
36
-
37
-
38
- def type_location
39
- return super if super
40
-
41
- @resolved_method&.send(:type_location)
42
- end
43
-
44
- %i[comments parameters return_type signatures].each do |method|
45
- define_method(method) do
46
- # @sg-ignore Need to set context correctly in define_method blocks
47
- @resolved_method ? @resolved_method.send(method) : super()
48
- end
49
- end
50
-
51
- %i[typify realize infer probe].each do |method|
52
- # @param api_map [ApiMap]
53
- define_method(method) do |api_map|
54
- # @sg-ignore Unresolved call to resolve_method
55
- resolve_method(api_map)
56
- # @sg-ignore Need to set context correctly in define_method blocks
57
- @resolved_method ? @resolved_method.send(method, api_map) : super(api_map)
58
- end
59
- end
60
-
61
- # @param api_map [ApiMap]
62
- def resolvable?(api_map)
63
- resolve_method(api_map)
64
- !!@resolved_method
65
- end
66
-
67
- private
68
-
69
- # Resolves the receiver chain and method name to a method pin, resetting any previously resolution.
70
- #
71
- # @param api_map [ApiMap]
72
- # @return [Pin::Method, nil]
73
- def resolve_method api_map
74
- return if @resolved_method
75
-
76
- resolver = @receiver_chain.define(api_map, self, []).first
77
-
78
- unless resolver
79
- Solargraph.logger.warn \
80
- "Delegated receiver for #{path} was resolved to nil from `#{print_chain(@receiver_chain)}'"
81
- return
82
- end
83
-
84
- receiver_type = resolver.return_type
85
-
86
- return if receiver_type.undefined?
87
-
88
- receiver_path, method_scope =
89
- if @receiver_chain.constant?
90
- # HACK: the `return_type` of a constant is Class<Whatever>, but looking up a method expects
91
- # the arguments `"Whatever"` and `scope: :class`.
92
- [receiver_type.to_s.sub(/^Class<(.+)>$/, '\1'), :class]
93
- else
94
- [receiver_type.to_s, :instance]
95
- end
96
-
97
- method_stack = api_map.get_method_stack(receiver_path, @receiver_method_name, scope: method_scope)
98
- @resolved_method = method_stack.first
99
- end
100
-
101
- # helper to print a source chain as code, probably not 100% correct.
102
- #
103
- # @param chain [Source::Chain]
104
- # @return [String]
105
- def print_chain(chain)
106
- out = +''
107
- chain.links.each_with_index do |link, index|
108
- if index > 0
109
- if Source::Chain::Constant
110
- out << '::' unless link.word.start_with?('::')
111
- else
112
- out << '.'
113
- end
114
- end
115
- out << link.word
116
- end
117
- out
118
- end
119
- end
120
- end
121
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ # A DelegatedMethod is a more complicated version of a MethodAlias that
6
+ # allows aliasing a method from a different closure (class/module etc).
7
+ class DelegatedMethod < Pin::Method
8
+ # A DelegatedMethod can be constructed with either a :resolved_method
9
+ # pin, or a :receiver_chain. When a :receiver_chain is supplied, it
10
+ # will be used to *dynamically* resolve a receiver type within the
11
+ # given closure/scope, and the delegated method will then be resolved
12
+ # to a method pin on that type.
13
+ #
14
+ # @param method [Method, nil] an already resolved method pin.
15
+ # @param receiver [Source::Chain, nil] the source code used to resolve the receiver for this delegated method.
16
+ # @param name [String]
17
+ # @param receiver_method_name [String] the method name that will be called on the receiver (defaults to :name).
18
+ def initialize(method: nil, receiver: nil, name: method&.name, receiver_method_name: name, **splat)
19
+ raise ArgumentError, 'either :method or :receiver is required' if (method && receiver) || (!method && !receiver)
20
+ super(name: name, **splat)
21
+
22
+ @receiver_chain = receiver
23
+ @resolved_method = method
24
+ @receiver_method_name = receiver_method_name
25
+ end
26
+
27
+ def inner_desc
28
+ "#{name} => #{@receiver_chain}##{@receiver_method_name}"
29
+ end
30
+
31
+ def location
32
+ return super if super
33
+
34
+ @resolved_method&.send(:location)
35
+ end
36
+
37
+
38
+ def type_location
39
+ return super if super
40
+
41
+ @resolved_method&.send(:type_location)
42
+ end
43
+
44
+ %i[comments parameters return_type signatures].each do |method|
45
+ define_method(method) do
46
+ # @sg-ignore Need to set context correctly in define_method blocks
47
+ @resolved_method ? @resolved_method.send(method) : super()
48
+ end
49
+ end
50
+
51
+ %i[typify realize infer probe].each do |method|
52
+ # @param api_map [ApiMap]
53
+ define_method(method) do |api_map|
54
+ resolve_method(api_map)
55
+ # @sg-ignore Need to set context correctly in define_method blocks
56
+ @resolved_method ? @resolved_method.send(method, api_map) : super(api_map)
57
+ end
58
+ end
59
+
60
+ # @param api_map [ApiMap]
61
+ def resolvable?(api_map)
62
+ resolve_method(api_map)
63
+ !!@resolved_method
64
+ end
65
+
66
+ private
67
+
68
+ # Resolves the receiver chain and method name to a method pin, resetting any previously resolution.
69
+ #
70
+ # @param api_map [ApiMap]
71
+ # @return [Pin::Method, nil]
72
+ def resolve_method api_map
73
+ return if @resolved_method
74
+
75
+ resolver = @receiver_chain.define(api_map, self, []).first
76
+
77
+ unless resolver
78
+ Solargraph.logger.warn \
79
+ "Delegated receiver for #{path} was resolved to nil from `#{print_chain(@receiver_chain)}'"
80
+ return
81
+ end
82
+
83
+ receiver_type = resolver.return_type
84
+
85
+ return if receiver_type.undefined?
86
+
87
+ receiver_path, method_scope =
88
+ if @receiver_chain.constant?
89
+ # HACK: the `return_type` of a constant is Class<Whatever>, but looking up a method expects
90
+ # the arguments `"Whatever"` and `scope: :class`.
91
+ [receiver_type.to_s.sub(/^Class<(.+)>$/, '\1'), :class]
92
+ else
93
+ [receiver_type.to_s, :instance]
94
+ end
95
+
96
+ method_stack = api_map.get_method_stack(receiver_path, @receiver_method_name, scope: method_scope)
97
+ @resolved_method = method_stack.first
98
+ end
99
+
100
+ # helper to print a source chain as code, probably not 100% correct.
101
+ #
102
+ # @param chain [Source::Chain]
103
+ # @return [String]
104
+ def print_chain(chain)
105
+ out = +''
106
+ chain.links.each_with_index do |link, index|
107
+ if index > 0
108
+ if Source::Chain::Constant
109
+ out << '::' unless link.word.start_with?('::')
110
+ else
111
+ out << '.'
112
+ end
113
+ end
114
+ out << link.word
115
+ end
116
+ out
117
+ end
118
+ end
119
+ end
120
+ end
@@ -1,114 +1,114 @@
1
- # frozen_string_literal: true
2
-
3
- require 'kramdown'
4
- require 'kramdown-parser-gfm'
5
- require 'yard'
6
- require 'reverse_markdown'
7
- require 'solargraph/converters/dl'
8
- require 'solargraph/converters/dt'
9
- require 'solargraph/converters/dd'
10
- require 'solargraph/converters/misc'
11
-
12
- # @todo upstream this definition
13
-
14
- # @!parse
15
- # module ::Kramdown
16
- # class Document
17
- # # @return [String]
18
- # def to_html; end
19
- # end
20
- # end
21
- # module ReverseMarkdown
22
- # # @param input [String]
23
- # # @param options [Hash]
24
- # # @return [String]
25
- # def self.convert(input, options = {}); end
26
- # end
27
-
28
- module Solargraph
29
- module Pin
30
- # A module to add the Pin::Base#documentation method.
31
- #
32
- module Documenting
33
- # A documentation formatter that either performs Markdown conversion for
34
- # text, or applies backticks for code blocks.
35
- #
36
- class DocSection
37
- # @return [String]
38
- attr_reader :plaintext
39
-
40
- # @param code [Boolean] True if this section is a code block
41
- def initialize code
42
- @plaintext = String.new('')
43
- @code = code
44
- end
45
-
46
- def code?
47
- @code
48
- end
49
-
50
- # @param text [String]
51
- # @return [String]
52
- def concat text
53
- @plaintext.concat text
54
- end
55
-
56
- def to_s
57
- return to_code if code?
58
- to_markdown
59
- end
60
-
61
- private
62
-
63
- # @return [String]
64
- def to_code
65
- "\n```ruby\n#{Documenting.normalize_indentation(@plaintext)}#{@plaintext.end_with?("\n") ? '' : "\n"}```\n\n"
66
- end
67
-
68
- # @return [String]
69
- def to_markdown
70
- ReverseMarkdown.convert Kramdown::Document.new(@plaintext, input: 'GFM').to_html
71
- end
72
- end
73
-
74
- # @return [String]
75
- def documentation
76
- @documentation ||= begin
77
- # Using DocSections allows for code blocks that start with an empty
78
- # line and at least two spaces of indentation. This is a common
79
- # convention in Ruby core documentation, e.g., String#split.
80
- sections = [DocSection.new(false)]
81
- Documenting.normalize_indentation(Documenting.strip_html_comments(docstring.to_s.gsub("\t", ' '))).lines.each do |l|
82
- if l.start_with?(' ')
83
- # Code block
84
- sections.push DocSection.new(true) unless sections.last.code?
85
- elsif sections.last.code?
86
- # Regular documentation
87
- sections.push DocSection.new(false)
88
- end
89
- sections.last.concat l
90
- end
91
- sections.map(&:to_s).join.strip
92
- end
93
- end
94
-
95
- # @param text [String]
96
- # @return [String]
97
- def self.strip_html_comments text
98
- text.gsub(/<!--([\s\S]*?)-->/, '').strip
99
- end
100
-
101
- # @param text [String]
102
- # @return [String]
103
- def self.normalize_indentation text
104
- left = text.lines.map do |line|
105
- match = line.match(/^ +/)
106
- next 0 unless match
107
- match[0].length
108
- end.min
109
- return text if left.nil? || left.zero?
110
- text.lines.map { |line| line[left..] }.join
111
- end
112
- end
113
- end
114
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'kramdown'
4
+ require 'kramdown-parser-gfm'
5
+ require 'yard'
6
+ require 'reverse_markdown'
7
+ require 'solargraph/converters/dl'
8
+ require 'solargraph/converters/dt'
9
+ require 'solargraph/converters/dd'
10
+ require 'solargraph/converters/misc'
11
+
12
+ # @todo upstream this definition
13
+
14
+ # @!parse
15
+ # module ::Kramdown
16
+ # class Document
17
+ # # @return [String]
18
+ # def to_html; end
19
+ # end
20
+ # end
21
+ # module ReverseMarkdown
22
+ # # @param input [String]
23
+ # # @param options [Hash]
24
+ # # @return [String]
25
+ # def self.convert(input, options = {}); end
26
+ # end
27
+
28
+ module Solargraph
29
+ module Pin
30
+ # A module to add the Pin::Base#documentation method.
31
+ #
32
+ module Documenting
33
+ # A documentation formatter that either performs Markdown conversion for
34
+ # text, or applies backticks for code blocks.
35
+ #
36
+ class DocSection
37
+ # @return [String]
38
+ attr_reader :plaintext
39
+
40
+ # @param code [Boolean] True if this section is a code block
41
+ def initialize code
42
+ @plaintext = String.new('')
43
+ @code = code
44
+ end
45
+
46
+ def code?
47
+ @code
48
+ end
49
+
50
+ # @param text [String]
51
+ # @return [String]
52
+ def concat text
53
+ @plaintext.concat text
54
+ end
55
+
56
+ def to_s
57
+ return to_code if code?
58
+ to_markdown
59
+ end
60
+
61
+ private
62
+
63
+ # @return [String]
64
+ def to_code
65
+ "\n```ruby\n#{Documenting.normalize_indentation(@plaintext)}#{@plaintext.end_with?("\n") ? '' : "\n"}```\n\n"
66
+ end
67
+
68
+ # @return [String]
69
+ def to_markdown
70
+ ReverseMarkdown.convert Kramdown::Document.new(@plaintext, input: 'GFM').to_html
71
+ end
72
+ end
73
+
74
+ # @return [String]
75
+ def documentation
76
+ @documentation ||= begin
77
+ # Using DocSections allows for code blocks that start with an empty
78
+ # line and at least two spaces of indentation. This is a common
79
+ # convention in Ruby core documentation, e.g., String#split.
80
+ sections = [DocSection.new(false)]
81
+ Documenting.normalize_indentation(Documenting.strip_html_comments(docstring.to_s.gsub("\t", ' '))).lines.each do |l|
82
+ if l.start_with?(' ')
83
+ # Code block
84
+ sections.push DocSection.new(true) unless sections.last.code?
85
+ elsif sections.last.code?
86
+ # Regular documentation
87
+ sections.push DocSection.new(false)
88
+ end
89
+ sections.last.concat l
90
+ end
91
+ sections.map(&:to_s).join.strip
92
+ end
93
+ end
94
+
95
+ # @param text [String]
96
+ # @return [String]
97
+ def self.strip_html_comments text
98
+ text.gsub(/<!--([\s\S]*?)-->/, '').strip
99
+ end
100
+
101
+ # @param text [String]
102
+ # @return [String]
103
+ def self.normalize_indentation text
104
+ left = text.lines.map do |line|
105
+ match = line.match(/^ +/)
106
+ next 0 unless match
107
+ match[0].length
108
+ end.min
109
+ return text if left.nil? || left.zero?
110
+ text.lines.map { |line| line[left..] }.join
111
+ end
112
+ end
113
+ end
114
+ end
@@ -1,34 +1,34 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class InstanceVariable < BaseVariable
6
- # @return [ComplexType]
7
- def binder
8
- closure.binder
9
- end
10
-
11
- # @return [::Symbol]
12
- def scope
13
- closure.binder.scope
14
- end
15
-
16
- # @return [ComplexType]
17
- def context
18
- @context ||= begin
19
- result = super
20
- if scope == :class
21
- ComplexType.parse("::Class<#{result.rooted_namespace}>")
22
- else
23
- result.reduce_class_type
24
- end
25
- end
26
- end
27
-
28
- # @param other [InstanceVariable]
29
- def nearly? other
30
- super && binder == other.binder
31
- end
32
- end
33
- end
34
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class InstanceVariable < BaseVariable
6
+ # @return [ComplexType]
7
+ def binder
8
+ closure.binder
9
+ end
10
+
11
+ # @return [::Symbol]
12
+ def scope
13
+ closure.binder.scope
14
+ end
15
+
16
+ # @return [ComplexType]
17
+ def context
18
+ @context ||= begin
19
+ result = super
20
+ if scope == :class
21
+ ComplexType.parse("::Class<#{result.rooted_namespace}>")
22
+ else
23
+ result.reduce_class_type
24
+ end
25
+ end
26
+ end
27
+
28
+ # @param other [InstanceVariable]
29
+ def nearly? other
30
+ super && binder == other.binder
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,20 +1,20 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Keyword < Base
6
- def initialize(name, **kwargs)
7
- # @sg-ignore "Unrecognized keyword argument kwargs to Solargraph::Pin::Base#initialize"
8
- super(name: name, **kwargs)
9
- end
10
-
11
- def closure
12
- @closure ||= Pin::ROOT_PIN
13
- end
14
-
15
- def name
16
- @name
17
- end
18
- end
19
- end
20
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Keyword < Base
6
+ def initialize(name, **kwargs)
7
+ # @sg-ignore "Unrecognized keyword argument kwargs to Solargraph::Pin::Base#initialize"
8
+ super(name: name, **kwargs)
9
+ end
10
+
11
+ def closure
12
+ @closure ||= Pin::ROOT_PIN
13
+ end
14
+
15
+ def name
16
+ @name
17
+ end
18
+ end
19
+ end
20
+ end