solargraph 0.46.0 → 0.54.5

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 (279) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.github/workflows/plugins.yml +40 -0
  4. data/.github/workflows/rspec.yml +37 -41
  5. data/.github/workflows/typecheck.yml +34 -0
  6. data/.gitignore +9 -9
  7. data/.rspec +2 -2
  8. data/.yardopts +2 -2
  9. data/CHANGELOG.md +1338 -1115
  10. data/Gemfile +0 -0
  11. data/LICENSE +1 -1
  12. data/README.md +131 -128
  13. data/Rakefile +0 -0
  14. data/SPONSORS.md +10 -18
  15. data/bin/solargraph +0 -0
  16. data/lib/solargraph/api_map/cache.rb +109 -70
  17. data/lib/solargraph/api_map/index.rb +167 -0
  18. data/lib/solargraph/api_map/source_to_yard.rb +88 -81
  19. data/lib/solargraph/api_map/store.rb +260 -256
  20. data/lib/solargraph/api_map.rb +870 -686
  21. data/lib/solargraph/bench.rb +44 -27
  22. data/lib/solargraph/cache.rb +77 -0
  23. data/lib/solargraph/complex_type/type_methods.rb +217 -130
  24. data/lib/solargraph/complex_type/unique_type.rb +386 -75
  25. data/lib/solargraph/complex_type.rb +394 -221
  26. data/lib/solargraph/convention/base.rb +33 -33
  27. data/lib/solargraph/convention/gemfile.rb +15 -15
  28. data/lib/solargraph/convention/gemspec.rb +22 -22
  29. data/lib/solargraph/convention/rakefile.rb +17 -0
  30. data/lib/solargraph/convention.rb +47 -47
  31. data/lib/solargraph/converters/dd.rb +17 -12
  32. data/lib/solargraph/converters/dl.rb +15 -12
  33. data/lib/solargraph/converters/dt.rb +15 -12
  34. data/lib/solargraph/converters/misc.rb +1 -1
  35. data/lib/solargraph/diagnostics/base.rb +29 -29
  36. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  37. data/lib/solargraph/diagnostics/rubocop.rb +113 -98
  38. data/lib/solargraph/diagnostics/rubocop_helpers.rb +66 -63
  39. data/lib/solargraph/diagnostics/severities.rb +15 -15
  40. data/lib/solargraph/diagnostics/type_check.rb +55 -54
  41. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  42. data/lib/solargraph/diagnostics.rb +55 -55
  43. data/lib/solargraph/doc_map.rb +188 -0
  44. data/lib/solargraph/environ.rb +45 -45
  45. data/lib/solargraph/equality.rb +33 -0
  46. data/lib/solargraph/gem_pins.rb +72 -0
  47. data/lib/solargraph/language_server/completion_item_kinds.rb +35 -35
  48. data/lib/solargraph/language_server/error_codes.rb +20 -20
  49. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  50. data/lib/solargraph/language_server/host/dispatch.rb +128 -111
  51. data/lib/solargraph/language_server/host/message_worker.rb +106 -59
  52. data/lib/solargraph/language_server/host/sources.rb +99 -156
  53. data/lib/solargraph/language_server/host.rb +861 -865
  54. data/lib/solargraph/language_server/message/base.rb +96 -89
  55. data/lib/solargraph/language_server/message/cancel_request.rb +13 -13
  56. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  57. data/lib/solargraph/language_server/message/client.rb +11 -11
  58. data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -58
  59. data/lib/solargraph/language_server/message/completion_item.rb +11 -11
  60. data/lib/solargraph/language_server/message/exit_notification.rb +13 -13
  61. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +112 -100
  62. data/lib/solargraph/language_server/message/extended/document.rb +20 -20
  63. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  64. data/lib/solargraph/language_server/message/extended/download_core.rb +19 -23
  65. data/lib/solargraph/language_server/message/extended/environment.rb +25 -25
  66. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  67. data/lib/solargraph/language_server/message/extended.rb +21 -21
  68. data/lib/solargraph/language_server/message/initialize.rb +191 -162
  69. data/lib/solargraph/language_server/message/initialized.rb +28 -27
  70. data/lib/solargraph/language_server/message/method_not_found.rb +16 -16
  71. data/lib/solargraph/language_server/message/method_not_implemented.rb +14 -14
  72. data/lib/solargraph/language_server/message/shutdown.rb +13 -13
  73. data/lib/solargraph/language_server/message/text_document/base.rb +19 -19
  74. data/lib/solargraph/language_server/message/text_document/code_action.rb +17 -17
  75. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -59
  76. data/lib/solargraph/language_server/message/text_document/definition.rb +38 -38
  77. data/lib/solargraph/language_server/message/text_document/did_change.rb +15 -15
  78. data/lib/solargraph/language_server/message/text_document/did_close.rb +15 -15
  79. data/lib/solargraph/language_server/message/text_document/did_open.rb +15 -15
  80. data/lib/solargraph/language_server/message/text_document/did_save.rb +17 -17
  81. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  82. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -23
  83. data/lib/solargraph/language_server/message/text_document/folding_range.rb +26 -26
  84. data/lib/solargraph/language_server/message/text_document/formatting.rb +131 -126
  85. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -54
  86. data/lib/solargraph/language_server/message/text_document/on_type_formatting.rb +34 -34
  87. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  88. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  89. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  90. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -29
  91. data/lib/solargraph/language_server/message/text_document/type_definition.rb +24 -0
  92. data/lib/solargraph/language_server/message/text_document.rb +28 -28
  93. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -30
  94. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -33
  95. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +24 -24
  96. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  97. data/lib/solargraph/language_server/message/workspace.rb +14 -14
  98. data/lib/solargraph/language_server/message.rb +94 -93
  99. data/lib/solargraph/language_server/message_types.rb +14 -14
  100. data/lib/solargraph/language_server/progress.rb +135 -0
  101. data/lib/solargraph/language_server/request.rb +24 -24
  102. data/lib/solargraph/language_server/symbol_kinds.rb +36 -36
  103. data/lib/solargraph/language_server/transport/adapter.rb +68 -53
  104. data/lib/solargraph/language_server/transport/data_reader.rb +74 -72
  105. data/lib/solargraph/language_server/transport.rb +13 -13
  106. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  107. data/lib/solargraph/language_server.rb +20 -19
  108. data/lib/solargraph/library.rb +663 -546
  109. data/lib/solargraph/location.rb +58 -37
  110. data/lib/solargraph/logging.rb +27 -27
  111. data/lib/solargraph/page.rb +89 -83
  112. data/lib/solargraph/parser/comment_ripper.rb +56 -52
  113. data/lib/solargraph/parser/node_methods.rb +83 -43
  114. data/lib/solargraph/parser/node_processor/base.rb +87 -77
  115. data/lib/solargraph/parser/node_processor.rb +45 -43
  116. data/lib/solargraph/parser/{legacy → parser_gem}/class_methods.rb +153 -135
  117. data/lib/solargraph/parser/{legacy → parser_gem}/flawed_builder.rb +18 -16
  118. data/lib/solargraph/parser/{legacy → parser_gem}/node_chainer.rb +164 -148
  119. data/lib/solargraph/parser/parser_gem/node_methods.rb +495 -0
  120. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/alias_node.rb +23 -23
  121. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +57 -0
  122. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/begin_node.rb +15 -15
  123. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/block_node.rb +43 -42
  124. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/casgn_node.rb +35 -25
  125. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/cvasgn_node.rb +23 -23
  126. data/lib/solargraph/parser/{rubyvm → parser_gem}/node_processors/def_node.rb +50 -63
  127. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/defs_node.rb +36 -36
  128. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/gvasgn_node.rb +23 -23
  129. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/ivasgn_node.rb +38 -38
  130. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/lvasgn_node.rb +28 -28
  131. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +53 -0
  132. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/namespace_node.rb +39 -39
  133. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/orasgn_node.rb +16 -16
  134. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/resbody_node.rb +36 -36
  135. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +42 -0
  136. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/send_node.rb +259 -257
  137. data/lib/solargraph/parser/{legacy → parser_gem}/node_processors/sym_node.rb +18 -18
  138. data/lib/solargraph/parser/parser_gem/node_processors.rb +56 -0
  139. data/lib/solargraph/parser/parser_gem.rb +12 -0
  140. data/lib/solargraph/parser/region.rb +66 -66
  141. data/lib/solargraph/parser/snippet.rb +15 -13
  142. data/lib/solargraph/parser.rb +22 -26
  143. data/lib/solargraph/pin/base.rb +378 -296
  144. data/lib/solargraph/pin/base_variable.rb +118 -84
  145. data/lib/solargraph/pin/block.rb +101 -72
  146. data/lib/solargraph/pin/callable.rb +147 -0
  147. data/lib/solargraph/pin/class_variable.rb +8 -8
  148. data/lib/solargraph/pin/closure.rb +57 -37
  149. data/lib/solargraph/pin/common.rb +70 -70
  150. data/lib/solargraph/pin/constant.rb +43 -43
  151. data/lib/solargraph/pin/conversions.rb +123 -96
  152. data/lib/solargraph/pin/delegated_method.rb +101 -0
  153. data/lib/solargraph/pin/documenting.rb +98 -105
  154. data/lib/solargraph/pin/duck_method.rb +16 -16
  155. data/lib/solargraph/pin/global_variable.rb +8 -8
  156. data/lib/solargraph/pin/instance_variable.rb +34 -30
  157. data/lib/solargraph/pin/keyword.rb +15 -15
  158. data/lib/solargraph/pin/keyword_param.rb +8 -8
  159. data/lib/solargraph/pin/local_variable.rb +67 -55
  160. data/lib/solargraph/pin/method.rb +527 -245
  161. data/lib/solargraph/pin/method_alias.rb +31 -31
  162. data/lib/solargraph/pin/namespace.rb +107 -91
  163. data/lib/solargraph/pin/parameter.rb +212 -201
  164. data/lib/solargraph/pin/proxy_type.rb +29 -29
  165. data/lib/solargraph/pin/reference/extend.rb +10 -10
  166. data/lib/solargraph/pin/reference/include.rb +10 -10
  167. data/lib/solargraph/pin/reference/override.rb +29 -29
  168. data/lib/solargraph/pin/reference/prepend.rb +10 -10
  169. data/lib/solargraph/pin/reference/require.rb +14 -14
  170. data/lib/solargraph/pin/reference/superclass.rb +10 -10
  171. data/lib/solargraph/pin/reference.rb +22 -14
  172. data/lib/solargraph/pin/search.rb +56 -56
  173. data/lib/solargraph/pin/signature.rb +17 -0
  174. data/lib/solargraph/pin/singleton.rb +11 -11
  175. data/lib/solargraph/pin/symbol.rb +47 -47
  176. data/lib/solargraph/pin.rb +41 -37
  177. data/lib/solargraph/position.rb +107 -100
  178. data/lib/solargraph/range.rb +98 -95
  179. data/lib/solargraph/rbs_map/conversions.rb +646 -0
  180. data/lib/solargraph/rbs_map/core_fills.rb +50 -0
  181. data/lib/solargraph/rbs_map/core_map.rb +28 -0
  182. data/lib/solargraph/rbs_map/stdlib_map.rb +33 -0
  183. data/lib/solargraph/rbs_map.rb +93 -0
  184. data/lib/solargraph/server_methods.rb +16 -16
  185. data/lib/solargraph/shell.rb +269 -226
  186. data/lib/solargraph/source/chain/array.rb +33 -0
  187. data/lib/solargraph/source/chain/block_symbol.rb +13 -0
  188. data/lib/solargraph/source/chain/block_variable.rb +13 -13
  189. data/lib/solargraph/source/chain/call.rb +303 -204
  190. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  191. data/lib/solargraph/source/chain/constant.rb +89 -75
  192. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  193. data/lib/solargraph/source/chain/hash.rb +33 -28
  194. data/lib/solargraph/source/chain/head.rb +19 -19
  195. data/lib/solargraph/source/chain/if.rb +28 -0
  196. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  197. data/lib/solargraph/source/chain/link.rb +98 -71
  198. data/lib/solargraph/source/chain/literal.rb +28 -23
  199. data/lib/solargraph/source/chain/or.rb +23 -23
  200. data/lib/solargraph/source/chain/q_call.rb +11 -11
  201. data/lib/solargraph/source/chain/variable.rb +13 -13
  202. data/lib/solargraph/source/chain/z_super.rb +30 -30
  203. data/lib/solargraph/source/chain.rb +252 -164
  204. data/lib/solargraph/source/change.rb +82 -79
  205. data/lib/solargraph/source/cursor.rb +167 -164
  206. data/lib/solargraph/source/source_chainer.rb +194 -191
  207. data/lib/solargraph/source/updater.rb +55 -54
  208. data/lib/solargraph/source.rb +495 -522
  209. data/lib/solargraph/source_map/clip.rb +232 -224
  210. data/lib/solargraph/source_map/completion.rb +23 -23
  211. data/lib/solargraph/source_map/data.rb +30 -0
  212. data/lib/solargraph/source_map/mapper.rb +255 -212
  213. data/lib/solargraph/source_map.rb +217 -180
  214. data/lib/solargraph/type_checker/checks.rb +120 -99
  215. data/lib/solargraph/type_checker/param_def.rb +35 -35
  216. data/lib/solargraph/type_checker/problem.rb +32 -32
  217. data/lib/solargraph/type_checker/rules.rb +62 -57
  218. data/lib/solargraph/type_checker.rb +672 -543
  219. data/lib/solargraph/version.rb +5 -5
  220. data/lib/solargraph/views/environment.erb +56 -58
  221. data/lib/solargraph/workspace/config.rb +239 -231
  222. data/lib/solargraph/workspace.rb +239 -215
  223. data/lib/solargraph/yard_map/cache.rb +25 -19
  224. data/lib/solargraph/yard_map/helpers.rb +16 -16
  225. data/lib/solargraph/yard_map/mapper/to_constant.rb +26 -25
  226. data/lib/solargraph/yard_map/mapper/to_method.rb +94 -78
  227. data/lib/solargraph/yard_map/mapper/to_namespace.rb +28 -27
  228. data/lib/solargraph/yard_map/mapper.rb +78 -77
  229. data/lib/solargraph/yard_map/to_method.rb +86 -79
  230. data/lib/solargraph/yard_map.rb +18 -460
  231. data/lib/solargraph/yard_tags.rb +20 -0
  232. data/lib/solargraph/yardoc.rb +52 -0
  233. data/lib/solargraph.rb +72 -69
  234. data/solargraph.gemspec +21 -10
  235. metadata +184 -115
  236. data/.travis.yml +0 -19
  237. data/lib/solargraph/api_map/bundler_methods.rb +0 -22
  238. data/lib/solargraph/compat.rb +0 -37
  239. data/lib/solargraph/convention/rspec.rb +0 -30
  240. data/lib/solargraph/documentor.rb +0 -76
  241. data/lib/solargraph/language_server/host/cataloger.rb +0 -56
  242. data/lib/solargraph/parser/legacy/node_methods.rb +0 -325
  243. data/lib/solargraph/parser/legacy/node_processors/alias_node.rb +0 -23
  244. data/lib/solargraph/parser/legacy/node_processors/args_node.rb +0 -35
  245. data/lib/solargraph/parser/legacy/node_processors/begin_node.rb +0 -15
  246. data/lib/solargraph/parser/legacy/node_processors/def_node.rb +0 -63
  247. data/lib/solargraph/parser/legacy/node_processors/sclass_node.rb +0 -21
  248. data/lib/solargraph/parser/legacy/node_processors.rb +0 -54
  249. data/lib/solargraph/parser/legacy.rb +0 -12
  250. data/lib/solargraph/parser/rubyvm/class_methods.rb +0 -144
  251. data/lib/solargraph/parser/rubyvm/node_chainer.rb +0 -160
  252. data/lib/solargraph/parser/rubyvm/node_methods.rb +0 -315
  253. data/lib/solargraph/parser/rubyvm/node_processors/args_node.rb +0 -85
  254. data/lib/solargraph/parser/rubyvm/node_processors/block_node.rb +0 -42
  255. data/lib/solargraph/parser/rubyvm/node_processors/casgn_node.rb +0 -22
  256. data/lib/solargraph/parser/rubyvm/node_processors/cvasgn_node.rb +0 -23
  257. data/lib/solargraph/parser/rubyvm/node_processors/defs_node.rb +0 -57
  258. data/lib/solargraph/parser/rubyvm/node_processors/gvasgn_node.rb +0 -23
  259. data/lib/solargraph/parser/rubyvm/node_processors/ivasgn_node.rb +0 -38
  260. data/lib/solargraph/parser/rubyvm/node_processors/kw_arg_node.rb +0 -39
  261. data/lib/solargraph/parser/rubyvm/node_processors/lit_node.rb +0 -20
  262. data/lib/solargraph/parser/rubyvm/node_processors/lvasgn_node.rb +0 -27
  263. data/lib/solargraph/parser/rubyvm/node_processors/namespace_node.rb +0 -39
  264. data/lib/solargraph/parser/rubyvm/node_processors/opt_arg_node.rb +0 -26
  265. data/lib/solargraph/parser/rubyvm/node_processors/orasgn_node.rb +0 -15
  266. data/lib/solargraph/parser/rubyvm/node_processors/resbody_node.rb +0 -45
  267. data/lib/solargraph/parser/rubyvm/node_processors/sclass_node.rb +0 -21
  268. data/lib/solargraph/parser/rubyvm/node_processors/scope_node.rb +0 -15
  269. data/lib/solargraph/parser/rubyvm/node_processors/send_node.rb +0 -277
  270. data/lib/solargraph/parser/rubyvm/node_processors/sym_node.rb +0 -18
  271. data/lib/solargraph/parser/rubyvm/node_processors.rb +0 -63
  272. data/lib/solargraph/parser/rubyvm.rb +0 -40
  273. data/lib/solargraph/yard_map/core_docs.rb +0 -170
  274. data/lib/solargraph/yard_map/core_fills.rb +0 -208
  275. data/lib/solargraph/yard_map/core_gen.rb +0 -76
  276. data/lib/solargraph/yard_map/rdoc_to_yard.rb +0 -140
  277. data/lib/solargraph/yard_map/stdlib_fills.rb +0 -43
  278. data/lib/yard-solargraph.rb +0 -33
  279. data/yardoc/2.2.2.tar.gz +0 -0
@@ -0,0 +1,135 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+
5
+ module Solargraph
6
+ module LanguageServer
7
+ # Progress notification handling for language server hosts.
8
+ #
9
+ class Progress
10
+ WAITING = :waiting
11
+ CREATED = :created
12
+ FINISHED = :finished
13
+
14
+ # @return [String]
15
+ attr_reader :uuid
16
+
17
+ # @return [String]
18
+ attr_reader :title
19
+
20
+ # @return [String, nil]
21
+ attr_reader :kind
22
+
23
+ # @return [String, nil]
24
+ attr_reader :message
25
+
26
+ # @return [Integer]
27
+ attr_reader :percentage
28
+
29
+ # @return [Symbol]
30
+ attr_reader :status
31
+
32
+ # @param title [String]
33
+ def initialize title
34
+ @title = title
35
+ @uuid = SecureRandom.uuid
36
+ @percentage = 0
37
+ @status = WAITING
38
+ end
39
+
40
+ # @param message [String]
41
+ # @param percentage [Integer]
42
+ def begin message, percentage
43
+ @kind = 'begin'
44
+ @message = message
45
+ @percentage = percentage
46
+ end
47
+
48
+ # @param message [String]
49
+ # @param percentage [Integer]
50
+ def report message, percentage
51
+ @kind = 'report'
52
+ @message = message
53
+ @percentage = percentage
54
+ end
55
+
56
+ # @param message [String]
57
+ def finish message
58
+ @kind = 'end'
59
+ @message = message
60
+ @percentage = 100
61
+ true
62
+ end
63
+
64
+ # @param host [Solargraph::LanguageServer::Host]
65
+ def send host
66
+ return unless host.client_supports_progress? && !finished?
67
+
68
+ message = build
69
+ create(host)
70
+ host.send_notification '$/progress', message
71
+ @status = FINISHED if kind == 'end'
72
+ keep_alive host
73
+ end
74
+
75
+ def created?
76
+ [CREATED, FINISHED].include?(status)
77
+ end
78
+
79
+ def finished?
80
+ status == FINISHED
81
+ end
82
+
83
+ private
84
+
85
+ # @param host [Solargraph::LanguageServer::Host]
86
+ # @return [void]
87
+ def create host
88
+ return if created?
89
+
90
+ host.send_request 'window/workDoneProgress/create', { token: uuid }
91
+ @status = CREATED
92
+ end
93
+
94
+ def build
95
+ {
96
+ token: uuid,
97
+ value: {
98
+ kind: kind,
99
+ cancellable: false
100
+ }.merge(build_value)
101
+ }
102
+ end
103
+
104
+ def build_value
105
+ case kind
106
+ when 'begin'
107
+ { title: title, message: message, percentage: percentage }
108
+ when 'report'
109
+ { message: message, percentage: percentage }
110
+ when 'end'
111
+ { message: message }
112
+ else
113
+ raise "Invalid progress kind #{kind}"
114
+ end
115
+ end
116
+
117
+ # @param host [Host]
118
+ def keep_alive host
119
+ mutex.synchronize { @last = Time.now }
120
+ @keep_alive ||= Thread.new do
121
+ until finished?
122
+ sleep 10
123
+ break if finished?
124
+ next if mutex.synchronize { Time.now - @last < 10 }
125
+ send host
126
+ end
127
+ end
128
+ end
129
+
130
+ def mutex
131
+ @mutex ||= Mutex.new
132
+ end
133
+ end
134
+ end
135
+ end
@@ -1,24 +1,24 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- class Request
6
- # @param id [Integer]
7
- # @param &block The block that processes the client's response
8
- def initialize id, &block
9
- @id = id
10
- @block = block
11
- end
12
-
13
- # @param result [Object]
14
- # @return [void]
15
- def process result
16
- @block.call(result) unless @block.nil?
17
- end
18
-
19
- def send_response
20
- # noop
21
- end
22
- end
23
- end
24
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ class Request
6
+ # @param id [Integer]
7
+ # @param &block The block that processes the client's response
8
+ def initialize id, &block
9
+ @id = id
10
+ @block = block
11
+ end
12
+
13
+ # @param result [Object]
14
+ # @return [void]
15
+ def process result
16
+ @block.call(result) unless @block.nil?
17
+ end
18
+
19
+ def send_response
20
+ # noop
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,36 +1,36 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- # The SymbolKind constants for the language server protocol.
6
- #
7
- module SymbolKinds
8
- FILE = 1
9
- MODULE = 2
10
- NAMESPACE = 3
11
- PACKAGE = 4
12
- CLASS = 5
13
- METHOD = 6
14
- PROPERTY = 7
15
- FIELD = 8
16
- CONSTRUCTOR = 9
17
- ENUM = 10
18
- INTERFACE = 11
19
- FUNCTION = 12
20
- VARIABLE = 13
21
- CONSTANT = 14
22
- STRING = 15
23
- NUMBER = 16
24
- BOOLEAN = 17
25
- ARRAY = 18
26
- OBJECT = 19
27
- KEY = 20
28
- NULL = 21
29
- ENUM_MEMBER = 22
30
- STRUCT = 23
31
- EVENT = 24
32
- OPERATOR = 25
33
- TYPE_PARAMETER = 26
34
- end
35
- end
36
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ # The SymbolKind constants for the language server protocol.
6
+ #
7
+ module SymbolKinds
8
+ FILE = 1
9
+ MODULE = 2
10
+ NAMESPACE = 3
11
+ PACKAGE = 4
12
+ CLASS = 5
13
+ METHOD = 6
14
+ PROPERTY = 7
15
+ FIELD = 8
16
+ CONSTRUCTOR = 9
17
+ ENUM = 10
18
+ INTERFACE = 11
19
+ FUNCTION = 12
20
+ VARIABLE = 13
21
+ CONSTANT = 14
22
+ STRING = 15
23
+ NUMBER = 16
24
+ BOOLEAN = 17
25
+ ARRAY = 18
26
+ OBJECT = 19
27
+ KEY = 20
28
+ NULL = 21
29
+ ENUM_MEMBER = 22
30
+ STRUCT = 23
31
+ EVENT = 24
32
+ OPERATOR = 25
33
+ TYPE_PARAMETER = 26
34
+ end
35
+ end
36
+ end
@@ -1,53 +1,68 @@
1
- # frozen_string_literal: true
2
-
3
- require 'backport'
4
-
5
- module Solargraph
6
- module LanguageServer
7
- module Transport
8
- # A common module for running language servers in Backport.
9
- #
10
- module Adapter
11
- def opening
12
- @host = Solargraph::LanguageServer::Host.new
13
- @host.add_observer self
14
- @host.start
15
- @data_reader = Solargraph::LanguageServer::Transport::DataReader.new
16
- @data_reader.set_message_handler do |message|
17
- process message
18
- end
19
- end
20
-
21
- def closing
22
- @host.stop
23
- end
24
-
25
- # @param data [String]
26
- def receiving data
27
- @data_reader.receive data
28
- end
29
-
30
- def update
31
- if @host.stopped?
32
- shutdown
33
- else
34
- tmp = @host.flush
35
- write tmp unless tmp.empty?
36
- end
37
- end
38
-
39
- private
40
-
41
- # @param request [String]
42
- # @return [void]
43
- def process request
44
- @host.process(request)
45
- end
46
-
47
- def shutdown
48
- Backport.stop unless @host.options['transport'] == 'external'
49
- end
50
- end
51
- end
52
- end
53
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'backport'
4
+
5
+ module Solargraph
6
+ module LanguageServer
7
+ module Transport
8
+ # A common module for running language servers in Backport.
9
+ #
10
+ module Adapter
11
+ # This runs in the context of Backport::Adapter, which
12
+ # provides write() - but if we didn't hide this behind a parse
13
+ # tag, it would override the one in the class.
14
+ #
15
+ # @!method write(text)
16
+ # @abstract
17
+ # Write the change to the specified text.
18
+ # @param text [String] The text to be changed.
19
+ # @return [String] The updated text.
20
+
21
+ # @return [void]
22
+ def opening
23
+ @host = Solargraph::LanguageServer::Host.new
24
+ @host.add_observer self
25
+ @host.start
26
+ @data_reader = Solargraph::LanguageServer::Transport::DataReader.new
27
+ @data_reader.set_message_handler do |message|
28
+ process message
29
+ end
30
+ end
31
+
32
+ # @return [void]
33
+ def closing
34
+ @host.stop
35
+ end
36
+
37
+ # @param data [String]
38
+ # @return [void]
39
+ def receiving data
40
+ @data_reader.receive data
41
+ end
42
+
43
+ # @return [void]
44
+ def update
45
+ if @host.stopped?
46
+ shutdown
47
+ else
48
+ tmp = @host.flush
49
+ write tmp unless tmp.empty?
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ # @param request [Hash]
56
+ # @return [void]
57
+ def process request
58
+ @host.process(request)
59
+ end
60
+
61
+ # @return [void]
62
+ def shutdown
63
+ Backport.stop unless @host.options['transport'] == 'external'
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -1,72 +1,74 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- module Solargraph
6
- module LanguageServer
7
- module Transport
8
- class DataReader
9
- def initialize
10
- @in_header = true
11
- @content_length = 0
12
- @buffer = String.new
13
- end
14
-
15
- # Declare a block to be executed for each message received from the
16
- # client.
17
- #
18
- # @yieldparam [Hash] The message received from the client
19
- def set_message_handler &block
20
- @message_handler = block
21
- end
22
-
23
- # Process raw data received from the client. The data will be parsed
24
- # into messages based on the JSON-RPC protocol. Each message will be
25
- # passed to the block declared via set_message_handler. Incomplete data
26
- # will be buffered and subsequent data will be appended to the buffer.
27
- #
28
- # @param data [String]
29
- def receive data
30
- data.each_char do |char|
31
- @buffer.concat char
32
- if @in_header
33
- prepare_to_parse_message if @buffer.end_with?("\r\n\r\n")
34
- else
35
- parse_message_from_buffer if @buffer.bytesize == @content_length
36
- end
37
- end
38
- end
39
-
40
- private
41
-
42
- # @return [void]
43
- def prepare_to_parse_message
44
- @in_header = false
45
- @buffer.each_line do |line|
46
- parts = line.split(':').map(&:strip)
47
- if parts[0] == 'Content-Length'
48
- @content_length = parts[1].to_i
49
- break
50
- end
51
- end
52
- @buffer.clear
53
- end
54
-
55
- # @return [void]
56
- def parse_message_from_buffer
57
- begin
58
- msg = JSON.parse(@buffer)
59
- @message_handler.call msg unless @message_handler.nil?
60
- rescue JSON::ParserError => e
61
- Solargraph::Logging.logger.warn "Failed to parse request: #{e.message}"
62
- Solargraph::Logging.logger.debug "Buffer: #{@buffer}"
63
- ensure
64
- @buffer.clear
65
- @in_header = true
66
- @content_length = 0
67
- end
68
- end
69
- end
70
- end
71
- end
72
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Solargraph
6
+ module LanguageServer
7
+ module Transport
8
+ class DataReader
9
+ def initialize
10
+ @in_header = true
11
+ @content_length = 0
12
+ @buffer = String.new
13
+ end
14
+
15
+ # Declare a block to be executed for each message received from the
16
+ # client.
17
+ #
18
+ # @yieldparam [Hash] The message received from the client
19
+ # @return [void]
20
+ def set_message_handler &block
21
+ @message_handler = block
22
+ end
23
+
24
+ # Process raw data received from the client. The data will be parsed
25
+ # into messages based on the JSON-RPC protocol. Each message will be
26
+ # passed to the block declared via set_message_handler. Incomplete data
27
+ # will be buffered and subsequent data will be appended to the buffer.
28
+ #
29
+ # @param data [String]
30
+ # @return [void]
31
+ def receive data
32
+ data.each_char do |char|
33
+ @buffer.concat char
34
+ if @in_header
35
+ prepare_to_parse_message if @buffer.end_with?("\r\n\r\n")
36
+ else
37
+ parse_message_from_buffer if @buffer.bytesize == @content_length
38
+ end
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ # @return [void]
45
+ def prepare_to_parse_message
46
+ @in_header = false
47
+ @buffer.each_line do |line|
48
+ parts = line.split(':').map(&:strip)
49
+ if parts[0] == 'Content-Length'
50
+ @content_length = parts[1].to_i
51
+ break
52
+ end
53
+ end
54
+ @buffer.clear
55
+ end
56
+
57
+ # @return [void]
58
+ def parse_message_from_buffer
59
+ begin
60
+ msg = JSON.parse(@buffer)
61
+ @message_handler.call msg unless @message_handler.nil?
62
+ rescue JSON::ParserError => e
63
+ Solargraph::Logging.logger.warn "Failed to parse request: #{e.message}"
64
+ Solargraph::Logging.logger.debug "Buffer: #{@buffer}"
65
+ ensure
66
+ @buffer.clear
67
+ @in_header = true
68
+ @content_length = 0
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -1,13 +1,13 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- # The Transport namespace contains concrete implementations of
6
- # communication protocols for language servers.
7
- #
8
- module Transport
9
- autoload :Adapter, 'solargraph/language_server/transport/adapter'
10
- autoload :DataReader, 'solargraph/language_server/transport/data_reader'
11
- end
12
- end
13
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ # The Transport namespace contains concrete implementations of
6
+ # communication protocols for language servers.
7
+ #
8
+ module Transport
9
+ autoload :Adapter, 'solargraph/language_server/transport/adapter'
10
+ autoload :DataReader, 'solargraph/language_server/transport/data_reader'
11
+ end
12
+ end
13
+ end
@@ -1,49 +1,49 @@
1
- # frozen_string_literal: true
2
-
3
- require 'cgi'
4
-
5
- module Solargraph
6
- module LanguageServer
7
- # Methods to handle conversions between file URIs and paths.
8
- #
9
- module UriHelpers
10
- module_function
11
-
12
- # Convert a file URI to a path.
13
- #
14
- # @param uri [String]
15
- # @return [String]
16
- def uri_to_file uri
17
- decode(uri).sub(/^file\:(?:\/\/)?/, '').sub(/^\/([a-z]\:)/i, '\1')
18
- end
19
-
20
- # Convert a file path to a URI.
21
- #
22
- # @param file [String]
23
- # @return [String]
24
- def file_to_uri file
25
- "file://#{encode(file.gsub(/^([a-z]\:)/i, '/\1'))}"
26
- end
27
-
28
- # Encode text to be used as a URI path component in LSP.
29
- #
30
- # @param text [String]
31
- # @return [String]
32
- def encode text
33
- CGI.escape(text)
34
- .gsub('%3A', ':')
35
- .gsub('%5C', '\\')
36
- .gsub('%2F', '/')
37
- .gsub('+', '%20')
38
- end
39
-
40
- # Decode text from a URI path component in LSP.
41
- #
42
- # @param text [String]
43
- # @return [String]
44
- def decode text
45
- CGI.unescape(text)
46
- end
47
- end
48
- end
49
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'cgi'
4
+
5
+ module Solargraph
6
+ module LanguageServer
7
+ # Methods to handle conversions between file URIs and paths.
8
+ #
9
+ module UriHelpers
10
+ module_function
11
+
12
+ # Convert a file URI to a path.
13
+ #
14
+ # @param uri [String]
15
+ # @return [String]
16
+ def uri_to_file uri
17
+ decode(uri).sub(/^file\:(?:\/\/)?/, '').sub(/^\/([a-z]\:)/i, '\1')
18
+ end
19
+
20
+ # Convert a file path to a URI.
21
+ #
22
+ # @param file [String]
23
+ # @return [String]
24
+ def file_to_uri file
25
+ "file://#{encode(file.gsub(/^([a-z]\:)/i, '/\1'))}"
26
+ end
27
+
28
+ # Encode text to be used as a URI path component in LSP.
29
+ #
30
+ # @param text [String]
31
+ # @return [String]
32
+ def encode text
33
+ CGI.escape(text)
34
+ .gsub('%3A', ':')
35
+ .gsub('%5C', '\\')
36
+ .gsub('%2F', '/')
37
+ .gsub('+', '%20')
38
+ end
39
+
40
+ # Decode text from a URI path component in LSP.
41
+ #
42
+ # @param text [String]
43
+ # @return [String]
44
+ def decode text
45
+ CGI.unescape(text)
46
+ end
47
+ end
48
+ end
49
+ end