solargraph 0.44.2 → 0.46.0

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 (246) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rspec.yml +41 -0
  3. data/.gitignore +9 -9
  4. data/.rspec +2 -2
  5. data/.travis.yml +19 -19
  6. data/CHANGELOG.md +1115 -1088
  7. data/Gemfile +0 -0
  8. data/LICENSE +0 -0
  9. data/README.md +128 -120
  10. data/Rakefile +0 -0
  11. data/SPONSORS.md +18 -15
  12. data/bin/solargraph +0 -0
  13. data/lib/solargraph/api_map/bundler_methods.rb +22 -22
  14. data/lib/solargraph/api_map/cache.rb +70 -70
  15. data/lib/solargraph/api_map/source_to_yard.rb +81 -81
  16. data/lib/solargraph/api_map/store.rb +256 -256
  17. data/lib/solargraph/api_map.rb +686 -681
  18. data/lib/solargraph/bench.rb +27 -27
  19. data/lib/solargraph/compat.rb +37 -37
  20. data/lib/solargraph/complex_type/type_methods.rb +130 -130
  21. data/lib/solargraph/complex_type/unique_type.rb +75 -75
  22. data/lib/solargraph/complex_type.rb +221 -221
  23. data/lib/solargraph/convention/base.rb +33 -33
  24. data/lib/solargraph/convention/gemfile.rb +15 -15
  25. data/lib/solargraph/convention/gemspec.rb +22 -22
  26. data/lib/solargraph/convention/rspec.rb +30 -21
  27. data/lib/solargraph/convention.rb +47 -47
  28. data/lib/solargraph/converters/dd.rb +12 -12
  29. data/lib/solargraph/converters/dl.rb +12 -12
  30. data/lib/solargraph/converters/dt.rb +12 -12
  31. data/lib/solargraph/converters/misc.rb +1 -1
  32. data/lib/solargraph/diagnostics/base.rb +29 -29
  33. data/lib/solargraph/diagnostics/require_not_found.rb +53 -37
  34. data/lib/solargraph/diagnostics/rubocop.rb +98 -98
  35. data/lib/solargraph/diagnostics/rubocop_helpers.rb +63 -63
  36. data/lib/solargraph/diagnostics/severities.rb +15 -15
  37. data/lib/solargraph/diagnostics/type_check.rb +54 -54
  38. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  39. data/lib/solargraph/diagnostics.rb +55 -55
  40. data/lib/solargraph/documentor.rb +76 -76
  41. data/lib/solargraph/environ.rb +45 -45
  42. data/lib/solargraph/language_server/completion_item_kinds.rb +35 -35
  43. data/lib/solargraph/language_server/error_codes.rb +20 -20
  44. data/lib/solargraph/language_server/host/cataloger.rb +56 -56
  45. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  46. data/lib/solargraph/language_server/host/dispatch.rb +111 -111
  47. data/lib/solargraph/language_server/host/message_worker.rb +59 -59
  48. data/lib/solargraph/language_server/host/sources.rb +156 -156
  49. data/lib/solargraph/language_server/host.rb +865 -865
  50. data/lib/solargraph/language_server/message/base.rb +89 -89
  51. data/lib/solargraph/language_server/message/cancel_request.rb +13 -13
  52. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  53. data/lib/solargraph/language_server/message/client.rb +11 -11
  54. data/lib/solargraph/language_server/message/completion_item/resolve.rb +58 -58
  55. data/lib/solargraph/language_server/message/completion_item.rb +11 -11
  56. data/lib/solargraph/language_server/message/exit_notification.rb +13 -13
  57. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +100 -100
  58. data/lib/solargraph/language_server/message/extended/document.rb +20 -20
  59. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  60. data/lib/solargraph/language_server/message/extended/download_core.rb +23 -23
  61. data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
  62. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  63. data/lib/solargraph/language_server/message/extended.rb +21 -21
  64. data/lib/solargraph/language_server/message/initialize.rb +162 -162
  65. data/lib/solargraph/language_server/message/initialized.rb +27 -27
  66. data/lib/solargraph/language_server/message/method_not_found.rb +16 -16
  67. data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -14
  68. data/lib/solargraph/language_server/message/shutdown.rb +13 -13
  69. data/lib/solargraph/language_server/message/text_document/base.rb +19 -19
  70. data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -17
  71. data/lib/solargraph/language_server/message/text_document/completion.rb +59 -59
  72. data/lib/solargraph/language_server/message/text_document/definition.rb +38 -38
  73. data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -15
  74. data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -15
  75. data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -15
  76. data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -17
  77. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  78. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +23 -23
  79. data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -26
  80. data/lib/solargraph/language_server/message/text_document/formatting.rb +126 -126
  81. data/lib/solargraph/language_server/message/text_document/hover.rb +54 -44
  82. data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -34
  83. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  84. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  85. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  86. data/lib/solargraph/language_server/message/text_document/signature_help.rb +29 -29
  87. data/lib/solargraph/language_server/message/text_document.rb +28 -28
  88. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +30 -30
  89. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +33 -33
  90. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
  91. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  92. data/lib/solargraph/language_server/message/workspace.rb +14 -14
  93. data/lib/solargraph/language_server/message.rb +93 -93
  94. data/lib/solargraph/language_server/message_types.rb +14 -14
  95. data/lib/solargraph/language_server/request.rb +24 -24
  96. data/lib/solargraph/language_server/symbol_kinds.rb +36 -36
  97. data/lib/solargraph/language_server/transport/adapter.rb +53 -53
  98. data/lib/solargraph/language_server/transport/data_reader.rb +72 -72
  99. data/lib/solargraph/language_server/transport.rb +13 -13
  100. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  101. data/lib/solargraph/language_server.rb +19 -19
  102. data/lib/solargraph/library.rb +546 -546
  103. data/lib/solargraph/location.rb +37 -37
  104. data/lib/solargraph/logging.rb +27 -27
  105. data/lib/solargraph/page.rb +83 -83
  106. data/lib/solargraph/parser/comment_ripper.rb +52 -52
  107. data/lib/solargraph/parser/legacy/class_methods.rb +135 -140
  108. data/lib/solargraph/parser/legacy/flawed_builder.rb +16 -16
  109. data/lib/solargraph/parser/legacy/node_chainer.rb +148 -148
  110. data/lib/solargraph/parser/legacy/node_methods.rb +325 -325
  111. data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +23 -23
  112. data/lib/solargraph/parser/legacy/node_processors/args_node.rb +35 -35
  113. data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +15 -15
  114. data/lib/solargraph/parser/legacy/node_processors/block_node.rb +42 -42
  115. data/lib/solargraph/parser/legacy/node_processors/casgn_node.rb +25 -25
  116. data/lib/solargraph/parser/legacy/node_processors/cvasgn_node.rb +23 -23
  117. data/lib/solargraph/parser/legacy/node_processors/def_node.rb +63 -63
  118. data/lib/solargraph/parser/legacy/node_processors/defs_node.rb +36 -36
  119. data/lib/solargraph/parser/legacy/node_processors/gvasgn_node.rb +23 -23
  120. data/lib/solargraph/parser/legacy/node_processors/ivasgn_node.rb +38 -38
  121. data/lib/solargraph/parser/legacy/node_processors/lvasgn_node.rb +28 -28
  122. data/lib/solargraph/parser/legacy/node_processors/namespace_node.rb +39 -39
  123. data/lib/solargraph/parser/legacy/node_processors/orasgn_node.rb +16 -16
  124. data/lib/solargraph/parser/legacy/node_processors/resbody_node.rb +36 -36
  125. data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +21 -21
  126. data/lib/solargraph/parser/legacy/node_processors/send_node.rb +257 -257
  127. data/lib/solargraph/parser/legacy/node_processors/sym_node.rb +18 -18
  128. data/lib/solargraph/parser/legacy/node_processors.rb +54 -54
  129. data/lib/solargraph/parser/legacy.rb +12 -12
  130. data/lib/solargraph/parser/node_methods.rb +43 -43
  131. data/lib/solargraph/parser/node_processor/base.rb +77 -77
  132. data/lib/solargraph/parser/node_processor.rb +43 -43
  133. data/lib/solargraph/parser/region.rb +66 -66
  134. data/lib/solargraph/parser/rubyvm/class_methods.rb +144 -155
  135. data/lib/solargraph/parser/rubyvm/node_chainer.rb +160 -160
  136. data/lib/solargraph/parser/rubyvm/node_methods.rb +315 -315
  137. data/lib/solargraph/parser/rubyvm/node_processors/alias_node.rb +23 -23
  138. data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +85 -85
  139. data/lib/solargraph/parser/rubyvm/node_processors/begin_node.rb +15 -15
  140. data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +42 -42
  141. data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +22 -22
  142. data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +23 -23
  143. data/lib/solargraph/parser/rubyvm/node_processors/def_node.rb +63 -64
  144. data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +57 -57
  145. data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +23 -23
  146. data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +38 -38
  147. data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +39 -39
  148. data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +20 -20
  149. data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +27 -27
  150. data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +39 -39
  151. data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +26 -26
  152. data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +15 -15
  153. data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +45 -45
  154. data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +21 -21
  155. data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +15 -15
  156. data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +277 -277
  157. data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +18 -18
  158. data/lib/solargraph/parser/rubyvm/node_processors.rb +63 -62
  159. data/lib/solargraph/parser/rubyvm.rb +40 -40
  160. data/lib/solargraph/parser/snippet.rb +13 -13
  161. data/lib/solargraph/parser.rb +26 -26
  162. data/lib/solargraph/pin/base.rb +296 -296
  163. data/lib/solargraph/pin/base_variable.rb +84 -84
  164. data/lib/solargraph/pin/block.rb +72 -72
  165. data/lib/solargraph/pin/class_variable.rb +8 -8
  166. data/lib/solargraph/pin/closure.rb +37 -37
  167. data/lib/solargraph/pin/common.rb +70 -70
  168. data/lib/solargraph/pin/constant.rb +43 -43
  169. data/lib/solargraph/pin/conversions.rb +96 -96
  170. data/lib/solargraph/pin/documenting.rb +105 -105
  171. data/lib/solargraph/pin/duck_method.rb +16 -16
  172. data/lib/solargraph/pin/global_variable.rb +8 -8
  173. data/lib/solargraph/pin/instance_variable.rb +30 -30
  174. data/lib/solargraph/pin/keyword.rb +15 -15
  175. data/lib/solargraph/pin/keyword_param.rb +8 -8
  176. data/lib/solargraph/pin/local_variable.rb +55 -55
  177. data/lib/solargraph/pin/method.rb +245 -245
  178. data/lib/solargraph/pin/method_alias.rb +31 -31
  179. data/lib/solargraph/pin/namespace.rb +91 -91
  180. data/lib/solargraph/pin/parameter.rb +201 -206
  181. data/lib/solargraph/pin/proxy_type.rb +29 -29
  182. data/lib/solargraph/pin/reference/extend.rb +10 -10
  183. data/lib/solargraph/pin/reference/include.rb +10 -10
  184. data/lib/solargraph/pin/reference/override.rb +29 -29
  185. data/lib/solargraph/pin/reference/prepend.rb +10 -10
  186. data/lib/solargraph/pin/reference/require.rb +14 -14
  187. data/lib/solargraph/pin/reference/superclass.rb +10 -10
  188. data/lib/solargraph/pin/reference.rb +14 -14
  189. data/lib/solargraph/pin/search.rb +56 -0
  190. data/lib/solargraph/pin/singleton.rb +11 -11
  191. data/lib/solargraph/pin/symbol.rb +47 -47
  192. data/lib/solargraph/pin.rb +37 -36
  193. data/lib/solargraph/position.rb +100 -100
  194. data/lib/solargraph/range.rb +95 -95
  195. data/lib/solargraph/server_methods.rb +16 -16
  196. data/lib/solargraph/shell.rb +226 -226
  197. data/lib/solargraph/source/chain/block_variable.rb +13 -13
  198. data/lib/solargraph/source/chain/call.rb +204 -204
  199. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  200. data/lib/solargraph/source/chain/constant.rb +75 -75
  201. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  202. data/lib/solargraph/source/chain/hash.rb +28 -28
  203. data/lib/solargraph/source/chain/head.rb +19 -19
  204. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  205. data/lib/solargraph/source/chain/link.rb +71 -71
  206. data/lib/solargraph/source/chain/literal.rb +23 -23
  207. data/lib/solargraph/source/chain/or.rb +23 -23
  208. data/lib/solargraph/source/chain/q_call.rb +11 -11
  209. data/lib/solargraph/source/chain/variable.rb +13 -13
  210. data/lib/solargraph/source/chain/z_super.rb +30 -30
  211. data/lib/solargraph/source/chain.rb +164 -164
  212. data/lib/solargraph/source/change.rb +79 -79
  213. data/lib/solargraph/source/cursor.rb +164 -164
  214. data/lib/solargraph/source/source_chainer.rb +191 -191
  215. data/lib/solargraph/source/updater.rb +54 -54
  216. data/lib/solargraph/source.rb +522 -522
  217. data/lib/solargraph/source_map/clip.rb +224 -224
  218. data/lib/solargraph/source_map/completion.rb +23 -23
  219. data/lib/solargraph/source_map/mapper.rb +212 -212
  220. data/lib/solargraph/source_map.rb +180 -189
  221. data/lib/solargraph/type_checker/checks.rb +99 -99
  222. data/lib/solargraph/type_checker/param_def.rb +35 -35
  223. data/lib/solargraph/type_checker/problem.rb +32 -32
  224. data/lib/solargraph/type_checker/rules.rb +57 -57
  225. data/lib/solargraph/type_checker.rb +543 -510
  226. data/lib/solargraph/version.rb +5 -5
  227. data/lib/solargraph/views/environment.erb +58 -58
  228. data/lib/solargraph/workspace/config.rb +231 -231
  229. data/lib/solargraph/workspace.rb +215 -214
  230. data/lib/solargraph/yard_map/cache.rb +19 -19
  231. data/lib/solargraph/yard_map/core_docs.rb +170 -170
  232. data/lib/solargraph/yard_map/core_fills.rb +208 -203
  233. data/lib/solargraph/yard_map/core_gen.rb +76 -76
  234. data/lib/solargraph/yard_map/helpers.rb +16 -16
  235. data/lib/solargraph/yard_map/mapper/to_constant.rb +25 -25
  236. data/lib/solargraph/yard_map/mapper/to_method.rb +78 -78
  237. data/lib/solargraph/yard_map/mapper/to_namespace.rb +27 -27
  238. data/lib/solargraph/yard_map/mapper.rb +77 -77
  239. data/lib/solargraph/yard_map/rdoc_to_yard.rb +140 -140
  240. data/lib/solargraph/yard_map/stdlib_fills.rb +43 -43
  241. data/lib/solargraph/yard_map/to_method.rb +79 -79
  242. data/lib/solargraph/yard_map.rb +460 -443
  243. data/lib/solargraph.rb +69 -69
  244. data/lib/yard-solargraph.rb +33 -33
  245. data/solargraph.gemspec +0 -0
  246. metadata +14 -12
@@ -1,96 +1,96 @@
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
- module Conversions
9
- # @return [Hash]
10
- def completion_item
11
- @completion_item ||= {
12
- label: name,
13
- kind: completion_item_kind,
14
- detail: detail,
15
- data: {
16
- path: path,
17
- return_type: return_type.tag,
18
- location: (location ? location.to_hash : nil),
19
- deprecated: deprecated?
20
- }
21
- }
22
- end
23
-
24
- # @return [Hash]
25
- def resolve_completion_item
26
- @resolve_completion_item ||= begin
27
- extra = {}
28
- alldoc = ''
29
- # alldoc += link_documentation unless link_documentation.nil?
30
- # alldoc += "\n\n" unless alldoc.empty?
31
- alldoc += documentation unless documentation.nil?
32
- extra[:documentation] = alldoc unless alldoc.empty?
33
- completion_item.merge(extra)
34
- end
35
- end
36
-
37
- # @return [Hash]
38
- def signature_help
39
- @signature_help ||= {
40
- label: name + '(' + parameters.map(&:full).join(', ') + ')',
41
- documentation: documentation
42
- }
43
- end
44
-
45
- # @return [String]
46
- def detail
47
- # This property is not cached in an instance variable because it can
48
- # change when pins get proxied.
49
- detail = String.new
50
- detail += "(#{parameters.map(&:full).join(', ')}) " unless !is_a?(Pin::Method) || parameters.empty?
51
- detail += "=#{probed? ? '~' : (proxied? ? '^' : '>')} #{return_type.to_s}" unless return_type.undefined?
52
- detail.strip!
53
- return nil if detail.empty?
54
- detail
55
- end
56
-
57
- # Get a markdown-flavored link to a documentation page.
58
- #
59
- # @return [String]
60
- def link_documentation
61
- @link_documentation ||= generate_link
62
- end
63
-
64
- def text_documentation
65
- this_path = path || return_type.tag
66
- return nil if this_path == 'undefined'
67
- escape_brackets this_path
68
- end
69
-
70
- def reset_conversions
71
- @completion_item = nil
72
- @resolve_completion_item = nil
73
- @signature_help = nil
74
- @detail = nil
75
- @link_documentation = nil
76
- end
77
-
78
- private
79
-
80
- # @return [String]
81
- def generate_link
82
- this_path = path || return_type.tag
83
- return nil if this_path == 'undefined'
84
- return nil if this_path.nil? || this_path == 'undefined'
85
- "[#{escape_brackets(this_path).gsub('_', '\\\\_')}](solargraph:/document?query=#{CGI.escape(this_path)})"
86
- end
87
-
88
- # @param text [String]
89
- # @return [String]
90
- def escape_brackets text
91
- # text.gsub(/(\<|\>)/, "\\#{$1}")
92
- text.gsub("<", '\<').gsub(">", '\>')
93
- end
94
- end
95
- end
96
- 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
+ module Conversions
9
+ # @return [Hash]
10
+ def completion_item
11
+ @completion_item ||= {
12
+ label: name,
13
+ kind: completion_item_kind,
14
+ detail: detail,
15
+ data: {
16
+ path: path,
17
+ return_type: return_type.tag,
18
+ location: (location ? location.to_hash : nil),
19
+ deprecated: deprecated?
20
+ }
21
+ }
22
+ end
23
+
24
+ # @return [Hash]
25
+ def resolve_completion_item
26
+ @resolve_completion_item ||= begin
27
+ extra = {}
28
+ alldoc = ''
29
+ # alldoc += link_documentation unless link_documentation.nil?
30
+ # alldoc += "\n\n" unless alldoc.empty?
31
+ alldoc += documentation unless documentation.nil?
32
+ extra[:documentation] = alldoc unless alldoc.empty?
33
+ completion_item.merge(extra)
34
+ end
35
+ end
36
+
37
+ # @return [Hash]
38
+ def signature_help
39
+ @signature_help ||= {
40
+ label: name + '(' + parameters.map(&:full).join(', ') + ')',
41
+ documentation: documentation
42
+ }
43
+ end
44
+
45
+ # @return [String]
46
+ def detail
47
+ # This property is not cached in an instance variable because it can
48
+ # change when pins get proxied.
49
+ detail = String.new
50
+ detail += "(#{parameters.map(&:full).join(', ')}) " unless !is_a?(Pin::Method) || parameters.empty?
51
+ detail += "=#{probed? ? '~' : (proxied? ? '^' : '>')} #{return_type.to_s}" unless return_type.undefined?
52
+ detail.strip!
53
+ return nil if detail.empty?
54
+ detail
55
+ end
56
+
57
+ # Get a markdown-flavored link to a documentation page.
58
+ #
59
+ # @return [String]
60
+ def link_documentation
61
+ @link_documentation ||= generate_link
62
+ end
63
+
64
+ def text_documentation
65
+ this_path = path || return_type.tag
66
+ return nil if this_path == 'undefined'
67
+ escape_brackets this_path
68
+ end
69
+
70
+ def reset_conversions
71
+ @completion_item = nil
72
+ @resolve_completion_item = nil
73
+ @signature_help = nil
74
+ @detail = nil
75
+ @link_documentation = nil
76
+ end
77
+
78
+ private
79
+
80
+ # @return [String]
81
+ def generate_link
82
+ this_path = path || return_type.tag
83
+ return nil if this_path == 'undefined'
84
+ return nil if this_path.nil? || this_path == 'undefined'
85
+ "[#{escape_brackets(this_path).gsub('_', '\\\\_')}](solargraph:/document?query=#{CGI.escape(this_path)})"
86
+ end
87
+
88
+ # @param text [String]
89
+ # @return [String]
90
+ def escape_brackets text
91
+ # text.gsub(/(\<|\>)/, "\\#{$1}")
92
+ text.gsub("<", '\<').gsub(">", '\>')
93
+ end
94
+ end
95
+ end
96
+ end
@@ -1,105 +1,105 @@
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
- module Solargraph
13
- module Pin
14
- # A module to add the Pin::Base#documentation method.
15
- #
16
- module Documenting
17
- # A documentation formatter that either performs Markdown conversion for
18
- # text, or applies backticks for code blocks.
19
- #
20
- class DocSection
21
- # @return [String]
22
- attr_reader :plaintext
23
-
24
- # @param code [Boolean] True if this section is a code block
25
- def initialize code
26
- @plaintext = String.new('')
27
- @code = code
28
- end
29
-
30
- def code?
31
- @code
32
- end
33
-
34
- # @param text [String]
35
- # @return [String]
36
- def concat text
37
- @plaintext.concat text
38
- end
39
-
40
- def to_s
41
- return "\n```ruby\n#{@plaintext}#{@plaintext.end_with?("\n") ? '' : "\n"}```\n\n" if code?
42
- ReverseMarkdown.convert unescape_brackets(Kramdown::Document.new(escape_brackets(@plaintext), input: 'GFM').to_html)
43
- end
44
-
45
- private
46
-
47
- # @param text [String]
48
- # @return [String]
49
- def escape_brackets text
50
- # text.gsub(/(\[[^\]]*\])([^\(]|\z)/, '!!!^\1^!!!\2')
51
- text.gsub('[', '!!!!b').gsub(']', 'e!!!!')
52
- end
53
-
54
- # @param text [String]
55
- # @return [String]
56
- def unescape_brackets text
57
- text.gsub('!!!!b', '[').gsub('e!!!!', ']')
58
- end
59
- end
60
-
61
- # @return [String]
62
- def documentation
63
- @documentation ||= begin
64
- # Using DocSections allows for code blocks that start with an empty
65
- # line and at least two spaces of indentation. This is a common
66
- # convention in Ruby core documentation, e.g., String#split.
67
- sections = [DocSection.new(false)]
68
- normalize_indentation(docstring.to_s).gsub(/\t/, ' ').lines.each do |l|
69
- if l.strip.empty?
70
- sections.last.concat l
71
- else
72
- if (l =~ /^ [^\s]/ && sections.last.plaintext =~ /(\r?\n[ \t]*?){2,}$/) || (l.start_with?(' ') && sections.last.code?)
73
- # Code block
74
- sections.push DocSection.new(true) unless sections.last.code?
75
- sections.last.concat l[2..-1]
76
- else
77
- # Regular documentation
78
- sections.push DocSection.new(false) if sections.last.code?
79
- sections.last.concat l
80
- end
81
- end
82
- end
83
- sections.map(&:to_s).join.strip
84
- end
85
- end
86
-
87
- private
88
-
89
- # @param text [String]
90
- # @return [String]
91
- def normalize_indentation text
92
- text.lines.map { |l| remove_odd_spaces(l) }.join
93
- end
94
-
95
- # @param line [String]
96
- # @return [String]
97
- def remove_odd_spaces line
98
- return line unless line.start_with?(' ')
99
- spaces = line.match(/^ +/)[0].length
100
- return line unless spaces.odd?
101
- line[1..-1]
102
- end
103
- end
104
- end
105
- 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
+ module Solargraph
13
+ module Pin
14
+ # A module to add the Pin::Base#documentation method.
15
+ #
16
+ module Documenting
17
+ # A documentation formatter that either performs Markdown conversion for
18
+ # text, or applies backticks for code blocks.
19
+ #
20
+ class DocSection
21
+ # @return [String]
22
+ attr_reader :plaintext
23
+
24
+ # @param code [Boolean] True if this section is a code block
25
+ def initialize code
26
+ @plaintext = String.new('')
27
+ @code = code
28
+ end
29
+
30
+ def code?
31
+ @code
32
+ end
33
+
34
+ # @param text [String]
35
+ # @return [String]
36
+ def concat text
37
+ @plaintext.concat text
38
+ end
39
+
40
+ def to_s
41
+ return "\n```ruby\n#{@plaintext}#{@plaintext.end_with?("\n") ? '' : "\n"}```\n\n" if code?
42
+ ReverseMarkdown.convert unescape_brackets(Kramdown::Document.new(escape_brackets(@plaintext), input: 'GFM').to_html)
43
+ end
44
+
45
+ private
46
+
47
+ # @param text [String]
48
+ # @return [String]
49
+ def escape_brackets text
50
+ # text.gsub(/(\[[^\]]*\])([^\(]|\z)/, '!!!^\1^!!!\2')
51
+ text.gsub('[', '!!!!b').gsub(']', 'e!!!!')
52
+ end
53
+
54
+ # @param text [String]
55
+ # @return [String]
56
+ def unescape_brackets text
57
+ text.gsub('!!!!b', '[').gsub('e!!!!', ']')
58
+ end
59
+ end
60
+
61
+ # @return [String]
62
+ def documentation
63
+ @documentation ||= begin
64
+ # Using DocSections allows for code blocks that start with an empty
65
+ # line and at least two spaces of indentation. This is a common
66
+ # convention in Ruby core documentation, e.g., String#split.
67
+ sections = [DocSection.new(false)]
68
+ normalize_indentation(docstring.to_s).gsub(/\t/, ' ').lines.each do |l|
69
+ if l.strip.empty?
70
+ sections.last.concat l
71
+ else
72
+ if (l =~ /^ [^\s]/ && sections.last.plaintext =~ /(\r?\n[ \t]*?){2,}$/) || (l.start_with?(' ') && sections.last.code?)
73
+ # Code block
74
+ sections.push DocSection.new(true) unless sections.last.code?
75
+ sections.last.concat l[2..-1]
76
+ else
77
+ # Regular documentation
78
+ sections.push DocSection.new(false) if sections.last.code?
79
+ sections.last.concat l
80
+ end
81
+ end
82
+ end
83
+ sections.map(&:to_s).join.strip
84
+ end
85
+ end
86
+
87
+ private
88
+
89
+ # @param text [String]
90
+ # @return [String]
91
+ def normalize_indentation text
92
+ text.lines.map { |l| remove_odd_spaces(l) }.join
93
+ end
94
+
95
+ # @param line [String]
96
+ # @return [String]
97
+ def remove_odd_spaces line
98
+ return line unless line.start_with?(' ')
99
+ spaces = line.match(/^ +/)[0].length
100
+ return line unless spaces.odd?
101
+ line[1..-1]
102
+ end
103
+ end
104
+ end
105
+ end
@@ -1,16 +1,16 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- # DuckMethod pins are used to add completion items for type tags that
6
- # use duck typing, e.g., `@param file [#read]`.
7
- #
8
- class DuckMethod < Pin::Method
9
- # @param location [Solargraph::Location]
10
- # @param name [String]
11
- # def initialize location, name
12
- # # super(location, '', name, nil, :instance, :public, [])
13
- # end
14
- end
15
- end
16
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ # DuckMethod pins are used to add completion items for type tags that
6
+ # use duck typing, e.g., `@param file [#read]`.
7
+ #
8
+ class DuckMethod < Pin::Method
9
+ # @param location [Solargraph::Location]
10
+ # @param name [String]
11
+ # def initialize location, name
12
+ # # super(location, '', name, nil, :instance, :public, [])
13
+ # end
14
+ end
15
+ end
16
+ end
@@ -1,8 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class GlobalVariable < BaseVariable
6
- end
7
- end
8
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class GlobalVariable < BaseVariable
6
+ end
7
+ end
8
+ end
@@ -1,30 +1,30 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class InstanceVariable < BaseVariable
6
- def binder
7
- closure.binder
8
- end
9
-
10
- def scope
11
- closure.binder.scope
12
- end
13
-
14
- def context
15
- @context ||= begin
16
- result = super
17
- if scope == :class
18
- ComplexType.parse("Class<#{result.namespace}>")
19
- else
20
- ComplexType.parse("#{result.namespace}")
21
- end
22
- end
23
- end
24
-
25
- def nearly? other
26
- super && binder == other.binder
27
- end
28
- end
29
- end
30
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class InstanceVariable < BaseVariable
6
+ def binder
7
+ closure.binder
8
+ end
9
+
10
+ def scope
11
+ closure.binder.scope
12
+ end
13
+
14
+ def context
15
+ @context ||= begin
16
+ result = super
17
+ if scope == :class
18
+ ComplexType.parse("Class<#{result.namespace}>")
19
+ else
20
+ ComplexType.parse("#{result.namespace}")
21
+ end
22
+ end
23
+ end
24
+
25
+ def nearly? other
26
+ super && binder == other.binder
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,15 +1,15 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Keyword < Base
6
- def initialize name
7
- super(name: name)
8
- end
9
-
10
- def name
11
- @name
12
- end
13
- end
14
- end
15
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Keyword < Base
6
+ def initialize name
7
+ super(name: name)
8
+ end
9
+
10
+ def name
11
+ @name
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,8 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class KeywordParam < Symbol
6
- end
7
- end
8
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class KeywordParam < Symbol
6
+ end
7
+ end
8
+ end
@@ -1,55 +1,55 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class LocalVariable < BaseVariable
6
- # @return [Range]
7
- attr_reader :presence
8
-
9
- def initialize assignment: nil, presence: nil, **splat
10
- super(**splat)
11
- @assignment = assignment
12
- @presence = presence
13
- end
14
-
15
- def try_merge! pin
16
- return false unless super
17
- @presence = pin.presence
18
- true
19
- end
20
-
21
- # @param other_closure [Pin::Closure]
22
- # @param other_loc [Location]
23
- def visible_at?(other_closure, other_loc)
24
- return true if location.filename == other_loc.filename &&
25
- presence.include?(other_loc.range.start) &&
26
- match_named_closure(other_closure, closure)
27
- end
28
-
29
- private
30
-
31
- # @param tag1 [String]
32
- # @param tag2 [String]
33
- # @return [Boolean]
34
- def match_tags tag1, tag2
35
- # @todo This is an unfortunate hack made necessary by a discrepancy in
36
- # how tags indicate the root namespace. The long-term solution is to
37
- # standardize it, whether it's `Class<>`, an empty string, or
38
- # something else.
39
- tag1 == tag2 ||
40
- (['', 'Class<>'].include?(tag1) && ['', 'Class<>'].include?(tag2))
41
- end
42
-
43
- def match_named_closure needle, haystack
44
- return true if needle == haystack || haystack.is_a?(Pin::Block)
45
- cursor = haystack
46
- until cursor.nil?
47
- return true if needle.path == cursor.path
48
- return false if cursor.path && !cursor.path.empty?
49
- cursor = cursor.closure
50
- end
51
- false
52
- end
53
- end
54
- end
55
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class LocalVariable < BaseVariable
6
+ # @return [Range]
7
+ attr_reader :presence
8
+
9
+ def initialize assignment: nil, presence: nil, **splat
10
+ super(**splat)
11
+ @assignment = assignment
12
+ @presence = presence
13
+ end
14
+
15
+ def try_merge! pin
16
+ return false unless super
17
+ @presence = pin.presence
18
+ true
19
+ end
20
+
21
+ # @param other_closure [Pin::Closure]
22
+ # @param other_loc [Location]
23
+ def visible_at?(other_closure, other_loc)
24
+ return true if location.filename == other_loc.filename &&
25
+ presence.include?(other_loc.range.start) &&
26
+ match_named_closure(other_closure, closure)
27
+ end
28
+
29
+ private
30
+
31
+ # @param tag1 [String]
32
+ # @param tag2 [String]
33
+ # @return [Boolean]
34
+ def match_tags tag1, tag2
35
+ # @todo This is an unfortunate hack made necessary by a discrepancy in
36
+ # how tags indicate the root namespace. The long-term solution is to
37
+ # standardize it, whether it's `Class<>`, an empty string, or
38
+ # something else.
39
+ tag1 == tag2 ||
40
+ (['', 'Class<>'].include?(tag1) && ['', 'Class<>'].include?(tag2))
41
+ end
42
+
43
+ def match_named_closure needle, haystack
44
+ return true if needle == haystack || haystack.is_a?(Pin::Block)
45
+ cursor = haystack
46
+ until cursor.nil?
47
+ return true if needle.path == cursor.path
48
+ return false if cursor.path && !cursor.path.empty?
49
+ cursor = cursor.closure
50
+ end
51
+ false
52
+ end
53
+ end
54
+ end
55
+ end