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
@@ -1,37 +1,58 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- # A section of text identified by its filename and range.
5
- #
6
- class Location
7
- # @return [String]
8
- attr_reader :filename
9
-
10
- # @return [Solargraph::Range]
11
- attr_reader :range
12
-
13
- # @param filename [String]
14
- # @param range [Solargraph::Range]
15
- def initialize filename, range
16
- @filename = filename
17
- @range = range
18
- end
19
-
20
- # @return [Hash]
21
- def to_hash
22
- {
23
- filename: filename,
24
- range: range.to_hash
25
- }
26
- end
27
-
28
- def == other
29
- return false unless other.is_a?(Location)
30
- filename == other.filename and range == other.range
31
- end
32
-
33
- def inspect
34
- "#<#{self.class} #{filename}, #{range.inspect}>"
35
- end
36
- end
37
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ # A pointer to a section of source text identified by its filename
5
+ # and Range.
6
+ #
7
+ class Location
8
+ include Equality
9
+
10
+ # @return [String]
11
+ attr_reader :filename
12
+
13
+ # @return [Solargraph::Range]
14
+ attr_reader :range
15
+
16
+ # @param filename [String]
17
+ # @param range [Solargraph::Range]
18
+ def initialize filename, range
19
+ @filename = filename
20
+ @range = range
21
+ end
22
+
23
+ # @sg-ignore Fix "Not enough arguments to Module#protected"
24
+ protected def equality_fields
25
+ [filename, range]
26
+ end
27
+
28
+ # @param location [self]
29
+ def contain? location
30
+ range.contain?(location.range.start) && range.contain?(location.range.ending) && filename == location.filename
31
+ end
32
+
33
+ # @return [Hash]
34
+ def to_hash
35
+ {
36
+ filename: filename,
37
+ range: range.to_hash
38
+ }
39
+ end
40
+
41
+ # @param node [Parser::AST::Node, nil]
42
+ def self.from_node(node)
43
+ return nil if node.nil? || node.loc.nil?
44
+ range = Range.from_node(node)
45
+ self.new(node.loc.expression.source_buffer.name, range)
46
+ end
47
+
48
+ # @param other [BasicObject]
49
+ def == other
50
+ return false unless other.is_a?(Location)
51
+ filename == other.filename and range == other.range
52
+ end
53
+
54
+ def inspect
55
+ "#<#{self.class} #{filename}, #{range.inspect}>"
56
+ end
57
+ end
58
+ end
@@ -1,27 +1,27 @@
1
- # frozen_string_literal: true
2
-
3
- require 'logger'
4
-
5
- module Solargraph
6
- module Logging
7
- DEFAULT_LOG_LEVEL = Logger::WARN
8
-
9
- LOG_LEVELS = {
10
- 'warn' => Logger::WARN,
11
- 'info' => Logger::INFO,
12
- 'debug' => Logger::DEBUG
13
- }
14
-
15
- @@logger = Logger.new(STDERR, level: DEFAULT_LOG_LEVEL)
16
- @@logger.formatter = proc do |severity, datetime, progname, msg|
17
- "[#{severity}] #{msg}\n"
18
- end
19
-
20
- module_function
21
-
22
- # @return [Logger]
23
- def logger
24
- @@logger
25
- end
26
- end
27
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+
5
+ module Solargraph
6
+ module Logging
7
+ DEFAULT_LOG_LEVEL = Logger::WARN
8
+
9
+ LOG_LEVELS = {
10
+ 'warn' => Logger::WARN,
11
+ 'info' => Logger::INFO,
12
+ 'debug' => Logger::DEBUG
13
+ }
14
+
15
+ @@logger = Logger.new(STDERR, level: DEFAULT_LOG_LEVEL)
16
+ @@logger.formatter = proc do |severity, datetime, progname, msg|
17
+ "[#{severity}] #{msg}\n"
18
+ end
19
+
20
+ module_function
21
+
22
+ # @return [Logger]
23
+ def logger
24
+ @@logger
25
+ end
26
+ end
27
+ end
@@ -1,83 +1,89 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ostruct'
4
- require 'tilt'
5
- require 'yard'
6
- require 'cgi'
7
-
8
- module Solargraph
9
- class Page
10
- class Binder < OpenStruct
11
- # @param locals [Hash]
12
- # @param render_method [Proc]
13
- def initialize locals, render_method
14
- super(locals)
15
- define_singleton_method :render do |template, layout: false, locals: {}|
16
- render_method.call(template, layout: layout, locals: locals)
17
- end
18
- define_singleton_method :erb do |template, layout: false, locals: {}|
19
- render_method.call(template, layout: layout, locals: locals)
20
- end
21
- end
22
-
23
- # @param text [String]
24
- # @return [String]
25
- def htmlify text
26
- YARD::Templates::Helpers::Markup::RDocMarkup.new(text).to_html
27
- end
28
-
29
- # @param text [String]
30
- # @return [String]
31
- def escape text
32
- CGI.escapeHTML(text)
33
- end
34
-
35
- # @param code [String]
36
- # @return [String]
37
- def ruby_to_html code
38
- code
39
- end
40
- end
41
- private_constant :Binder
42
-
43
- # @param directory [String]
44
- def initialize directory = VIEWS_PATH
45
- directory = VIEWS_PATH if directory.nil? or !File.directory?(directory)
46
- directories = [directory]
47
- directories.push VIEWS_PATH if directory != VIEWS_PATH
48
- # @type [Proc]
49
- # @param template [String]
50
- # @param layout [Boolean]
51
- # @param locals [Hash]
52
- @render_method = proc { |template, layout: false, locals: {}|
53
- binder = Binder.new(locals, @render_method)
54
- if layout
55
- Tilt::ERBTemplate.new(Page.select_template(directories, 'layout')).render(binder) do
56
- Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
57
- end
58
- else
59
- Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
60
- end
61
- }
62
- end
63
-
64
- # @param template [String]
65
- # @param layout [Boolean]
66
- # @param locals [Hash]
67
- # @return [String]
68
- def render template, layout: true, locals: {}
69
- @render_method.call(template, layout: layout, locals: locals)
70
- end
71
-
72
- # @param directories [Array<String>]
73
- # @param name [String]
74
- # @return [String]
75
- def self.select_template directories, name
76
- directories.each do |dir|
77
- path = File.join(dir, "#{name}.erb")
78
- return path if File.file?(path)
79
- end
80
- raise FileNotFoundError, "Template not found: #{name}"
81
- end
82
- end
83
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'ostruct'
4
+ require 'tilt'
5
+ require 'yard'
6
+ require 'cgi'
7
+
8
+ module Solargraph
9
+ class Page
10
+ # @todo This method directive is necessary because OpenStruct.new confuses
11
+ # the typechecker.
12
+ # @!method self.new(locals, render_method)
13
+ # @param locals[Hash]
14
+ # @param render_method [Proc]
15
+ # @return [Binder]
16
+ class Binder < OpenStruct
17
+ # @param locals [Hash]
18
+ # @param render_method [Proc]
19
+ def initialize locals, render_method
20
+ super(locals)
21
+ define_singleton_method :render do |template, layout: false, locals: {}|
22
+ render_method.call(template, layout: layout, locals: locals)
23
+ end
24
+ define_singleton_method :erb do |template, layout: false, locals: {}|
25
+ render_method.call(template, layout: layout, locals: locals)
26
+ end
27
+ end
28
+
29
+ # @param text [String]
30
+ # @return [String]
31
+ def htmlify text
32
+ YARD::Templates::Helpers::Markup::RDocMarkup.new(text).to_html
33
+ end
34
+
35
+ # @param text [String]
36
+ # @return [String]
37
+ def escape text
38
+ CGI.escapeHTML(text)
39
+ end
40
+
41
+ # @param code [String]
42
+ # @return [String]
43
+ def ruby_to_html code
44
+ code
45
+ end
46
+ end
47
+ private_constant :Binder
48
+
49
+ # @param directory [String]
50
+ def initialize directory = VIEWS_PATH
51
+ directory = VIEWS_PATH if directory.nil? or !File.directory?(directory)
52
+ directories = [directory]
53
+ directories.push VIEWS_PATH if directory != VIEWS_PATH
54
+ # @type [Proc]
55
+ # @param template [String]
56
+ # @param layout [Boolean]
57
+ # @param locals [Hash]
58
+ @render_method = proc { |template, layout: false, locals: {}|
59
+ binder = Binder.new(locals, @render_method)
60
+ if layout
61
+ Tilt::ERBTemplate.new(Page.select_template(directories, 'layout')).render(binder) do
62
+ Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
63
+ end
64
+ else
65
+ Tilt::ERBTemplate.new(Page.select_template(directories, template)).render(binder)
66
+ end
67
+ }
68
+ end
69
+
70
+ # @param template [String]
71
+ # @param layout [Boolean]
72
+ # @param locals [Hash]
73
+ # @return [String]
74
+ def render template, layout: true, locals: {}
75
+ @render_method.call(template, layout: layout, locals: locals)
76
+ end
77
+
78
+ # @param directories [Array<String>]
79
+ # @param name [String]
80
+ # @return [String]
81
+ def self.select_template directories, name
82
+ directories.each do |dir|
83
+ path = File.join(dir, "#{name}.erb")
84
+ return path if File.file?(path)
85
+ end
86
+ raise FileNotFoundError, "Template not found: #{name}"
87
+ end
88
+ end
89
+ end
@@ -1,52 +1,56 @@
1
- require 'ripper'
2
-
3
- module Solargraph
4
- module Parser
5
- class CommentRipper < Ripper::SexpBuilderPP
6
- def initialize src, filename = '(ripper)', lineno = 0
7
- super
8
- @buffer = src
9
- @buffer_lines = @buffer.lines
10
- end
11
-
12
- def on_comment *args
13
- result = super
14
- if @buffer_lines[result[2][0]][0..result[2][1]].strip =~ /^#/
15
- chomped = result[1].chomp
16
- if result[2][0] == 0 && chomped.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '').match(/^#\s*frozen_string_literal:/)
17
- chomped = '#'
18
- end
19
- @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
20
- end
21
- result
22
- end
23
-
24
- def on_embdoc_beg *args
25
- result = super
26
- chomped = result[1].chomp
27
- @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
28
- result
29
- end
30
-
31
- def on_embdoc *args
32
- result = super
33
- chomped = result[1].chomp
34
- @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
35
- result
36
- end
37
-
38
- def on_embdoc_end *args
39
- result = super
40
- chomped = result[1].chomp
41
- @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
42
- result
43
- end
44
-
45
- def parse
46
- @comments = {}
47
- super
48
- @comments
49
- end
50
- end
51
- end
52
- end
1
+ require 'ripper'
2
+
3
+ module Solargraph
4
+ module Parser
5
+ class CommentRipper < Ripper::SexpBuilderPP
6
+ # @param src [String]
7
+ # @param filename [String]
8
+ # @param lineno [Integer]
9
+ def initialize src, filename = '(ripper)', lineno = 0
10
+ super
11
+ @buffer = src
12
+ @buffer_lines = @buffer.lines
13
+ end
14
+
15
+ def on_comment *args
16
+ result = super
17
+ if @buffer_lines[result[2][0]][0..result[2][1]].strip =~ /^#/
18
+ chomped = result[1].chomp
19
+ if result[2][0] == 0 && chomped.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '').match(/^#\s*frozen_string_literal:/)
20
+ chomped = '#'
21
+ end
22
+ @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
23
+ end
24
+ result
25
+ end
26
+
27
+ def on_embdoc_beg *args
28
+ result = super
29
+ chomped = result[1].chomp
30
+ @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
31
+ result
32
+ end
33
+
34
+ def on_embdoc *args
35
+ result = super
36
+ chomped = result[1].chomp
37
+ @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
38
+ result
39
+ end
40
+
41
+ def on_embdoc_end *args
42
+ result = super
43
+ chomped = result[1].chomp
44
+ @comments[result[2][0]] = Snippet.new(Range.from_to(result[2][0], result[2][1], result[2][0], result[2][1] + chomped.length), chomped)
45
+ result
46
+ end
47
+
48
+ # @return [Hash{Integer => String}]
49
+ def parse
50
+ @comments = {}
51
+ super
52
+ @comments
53
+ end
54
+ end
55
+ end
56
+ end
@@ -1,43 +1,83 @@
1
- module Solargraph
2
- module Parser
3
- class NodeMethods
4
- module_function
5
-
6
- def unpack_name node
7
- raise NotImplementedError
8
- end
9
-
10
- def infer_literal_type node
11
- raise NotImplementedError
12
- end
13
-
14
- def calls_from node
15
- raise NotImplementedError
16
- end
17
-
18
- def returns_from node
19
- raise NotImplementedError
20
- end
21
-
22
- def process node
23
- raise NotImplementedError
24
- end
25
-
26
- def references node
27
- raise NotImplementedError
28
- end
29
-
30
- def chain node, filename = nil, in_block = false
31
- raise NotImplementedError
32
- end
33
-
34
- def node? node
35
- raise NotImplementedError
36
- end
37
-
38
- def convert_hash node
39
- raise NotImplementedError
40
- end
41
- end
42
- end
43
- end
1
+ module Solargraph
2
+ module Parser
3
+ class NodeMethods
4
+ module_function
5
+
6
+ # @abstract
7
+ # @param node [Parser::AST::Node]
8
+ # @return [String]
9
+ def unpack_name node
10
+ raise NotImplementedError
11
+ end
12
+
13
+ # @abstract
14
+ # @todo Temporarily here for testing. Move to Solargraph::Parser.
15
+ # @param node [Parser::AST::Node]
16
+ # @return [Array<Parser::AST::Node>]
17
+ def call_nodes_from node
18
+ raise NotImplementedError
19
+ end
20
+
21
+ # Find all the nodes within the provided node that potentially return a
22
+ # value.
23
+ #
24
+ # The node parameter typically represents a method's logic, e.g., the
25
+ # second child (after the :args node) of a :def node. A simple one-line
26
+ # method would typically return itself, while a node with conditions
27
+ # would return the resulting node from each conditional branch. Nodes
28
+ # that follow a :return node are assumed to be unreachable. Nil values
29
+ # are converted to nil node types.
30
+ #
31
+ # @abstract
32
+ # @param node [Parser::AST::Node]
33
+ # @return [Array<Parser::AST::Node>]
34
+ def returns_from_method_body node
35
+ raise NotImplementedError
36
+ end
37
+
38
+ # @abstract
39
+ # @param node [Parser::AST::Node]
40
+ #
41
+ # @return [Array<Parser::AST::Node>]
42
+ def const_nodes_from node
43
+ raise NotImplementedError
44
+ end
45
+
46
+ # @abstract
47
+ # @param cursor [Solargraph::Source::Cursor]
48
+ # @return [Parser::AST::Node, nil]
49
+ def find_recipient_node cursor
50
+ raise NotImplementedError
51
+ end
52
+
53
+ # @abstract
54
+ # @param node [Parser::AST::Node]
55
+ # @return [Array<AST::Node>] low-level value nodes in
56
+ # value position. Does not include explicit return
57
+ # statements
58
+ def value_position_nodes_only(node)
59
+ raise NotImplementedError
60
+ end
61
+
62
+ # @abstract
63
+ # @param nodes [Enumerable<Parser::AST::Node>]
64
+ def any_splatted_call?(nodes)
65
+ raise NotImplementedError
66
+ end
67
+
68
+ # @abstract
69
+ # @param node [Parser::AST::Node]
70
+ # @return [void]
71
+ def process node
72
+ raise NotImplementedError
73
+ end
74
+
75
+ # @abstract
76
+ # @param node [Parser::AST::Node]
77
+ # @return [Hash{Parser::AST::Node => Source::Chain}]
78
+ def convert_hash node
79
+ raise NotImplementedError
80
+ end
81
+ end
82
+ end
83
+ end