solargraph 0.45.0 → 0.46.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (246) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rspec.yml +41 -41
  3. data/.gitignore +9 -9
  4. data/.rspec +2 -2
  5. data/.travis.yml +19 -19
  6. data/CHANGELOG.md +1115 -1109
  7. data/Gemfile +0 -0
  8. data/LICENSE +0 -0
  9. data/README.md +128 -128
  10. data/Rakefile +0 -0
  11. data/SPONSORS.md +18 -17
  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 -30
  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 -135
  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 -144
  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 -63
  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 -203
  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 -529
  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 -208
  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 -445
  243. data/lib/solargraph.rb +69 -69
  244. data/lib/yard-solargraph.rb +33 -33
  245. data/solargraph.gemspec +0 -0
  246. metadata +13 -12
@@ -1,47 +1,47 @@
1
- # frozen_string_literal: true
2
-
3
- require 'set'
4
-
5
- module Solargraph
6
- # Conventions provide a way to modify an ApiMap based on expectations about
7
- # one of its sources.
8
- #
9
- module Convention
10
- autoload :Base, 'solargraph/convention/base'
11
- autoload :Gemfile, 'solargraph/convention/gemfile'
12
- autoload :Rspec, 'solargraph/convention/rspec'
13
- autoload :Gemspec, 'solargraph/convention/gemspec'
14
-
15
- @@conventions = Set.new
16
-
17
- # @param convention [Class<Convention::Base>]
18
- # @return [void]
19
- def self.register convention
20
- @@conventions.add convention.new
21
- end
22
-
23
- # @param source_map [SourceMap]
24
- # @return [Environ]
25
- def self.for_local(source_map)
26
- result = Environ.new
27
- @@conventions.each do |conv|
28
- result.merge conv.local(source_map)
29
- end
30
- result
31
- end
32
-
33
- # @param yard_map [YardMap]
34
- # @return [Environ]
35
- def self.for_global(yard_map)
36
- result = Environ.new
37
- @@conventions.each do |conv|
38
- result.merge conv.global(yard_map)
39
- end
40
- result
41
- end
42
-
43
- register Gemfile
44
- register Gemspec
45
- register Rspec
46
- end
47
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'set'
4
+
5
+ module Solargraph
6
+ # Conventions provide a way to modify an ApiMap based on expectations about
7
+ # one of its sources.
8
+ #
9
+ module Convention
10
+ autoload :Base, 'solargraph/convention/base'
11
+ autoload :Gemfile, 'solargraph/convention/gemfile'
12
+ autoload :Rspec, 'solargraph/convention/rspec'
13
+ autoload :Gemspec, 'solargraph/convention/gemspec'
14
+
15
+ @@conventions = Set.new
16
+
17
+ # @param convention [Class<Convention::Base>]
18
+ # @return [void]
19
+ def self.register convention
20
+ @@conventions.add convention.new
21
+ end
22
+
23
+ # @param source_map [SourceMap]
24
+ # @return [Environ]
25
+ def self.for_local(source_map)
26
+ result = Environ.new
27
+ @@conventions.each do |conv|
28
+ result.merge conv.local(source_map)
29
+ end
30
+ result
31
+ end
32
+
33
+ # @param yard_map [YardMap]
34
+ # @return [Environ]
35
+ def self.for_global(yard_map)
36
+ result = Environ.new
37
+ @@conventions.each do |conv|
38
+ result.merge conv.global(yard_map)
39
+ end
40
+ result
41
+ end
42
+
43
+ register Gemfile
44
+ register Gemspec
45
+ register Rspec
46
+ end
47
+ end
@@ -1,12 +1,12 @@
1
- module ReverseMarkdown
2
- module Converters
3
- class Dd < Base
4
- def convert node, state = {}
5
- content = treat_children(node, state)
6
- ": #{content.strip}\n"
7
- end
8
- end
9
- end
10
- end
11
-
12
- ReverseMarkdown::Converters.register :dd, ReverseMarkdown::Converters::Dd.new
1
+ module ReverseMarkdown
2
+ module Converters
3
+ class Dd < Base
4
+ def convert node, state = {}
5
+ content = treat_children(node, state)
6
+ ": #{content.strip}\n"
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ ReverseMarkdown::Converters.register :dd, ReverseMarkdown::Converters::Dd.new
@@ -1,12 +1,12 @@
1
- module ReverseMarkdown
2
- module Converters
3
- class Dl < Base
4
- def convert node, state = {}
5
- content = treat_children(node, state).strip
6
- "\n\n#{content}\n"
7
- end
8
- end
9
- end
10
- end
11
-
12
- ReverseMarkdown::Converters.register :dl, ReverseMarkdown::Converters::Dl.new
1
+ module ReverseMarkdown
2
+ module Converters
3
+ class Dl < Base
4
+ def convert node, state = {}
5
+ content = treat_children(node, state).strip
6
+ "\n\n#{content}\n"
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ ReverseMarkdown::Converters.register :dl, ReverseMarkdown::Converters::Dl.new
@@ -1,12 +1,12 @@
1
- module ReverseMarkdown
2
- module Converters
3
- class Dt < Base
4
- def convert node, state = {}
5
- content = treat_children(node, state)
6
- "\n#{content.strip}\n"
7
- end
8
- end
9
- end
10
- end
11
-
12
- ReverseMarkdown::Converters.register :dt, ReverseMarkdown::Converters::Dt.new
1
+ module ReverseMarkdown
2
+ module Converters
3
+ class Dt < Base
4
+ def convert node, state = {}
5
+ content = treat_children(node, state)
6
+ "\n#{content.strip}\n"
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ ReverseMarkdown::Converters.register :dt, ReverseMarkdown::Converters::Dt.new
@@ -1 +1 @@
1
- ReverseMarkdown::Converters.register :tt, ReverseMarkdown::Converters::Code.new
1
+ ReverseMarkdown::Converters.register :tt, ReverseMarkdown::Converters::Code.new
@@ -1,29 +1,29 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Diagnostics
5
- # The base class for diagnostics reporters.
6
- #
7
- class Base
8
- # @return [Array<String>]
9
- attr_reader :args
10
-
11
- def initialize *args
12
- @args = args
13
- end
14
-
15
- # Perform a diagnosis on a Source within the context of an ApiMap.
16
- # The result is an array of hash objects that conform to the LSP's
17
- # Diagnostic specification.
18
- #
19
- # Subclasses should override this method.
20
- #
21
- # @param source [Solargraph::Source]
22
- # @param api_map [Solargraph::ApiMap]
23
- # @return [Array<Hash>]
24
- def diagnose source, api_map
25
- []
26
- end
27
- end
28
- end
29
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Diagnostics
5
+ # The base class for diagnostics reporters.
6
+ #
7
+ class Base
8
+ # @return [Array<String>]
9
+ attr_reader :args
10
+
11
+ def initialize *args
12
+ @args = args
13
+ end
14
+
15
+ # Perform a diagnosis on a Source within the context of an ApiMap.
16
+ # The result is an array of hash objects that conform to the LSP's
17
+ # Diagnostic specification.
18
+ #
19
+ # Subclasses should override this method.
20
+ #
21
+ # @param source [Solargraph::Source]
22
+ # @param api_map [Solargraph::ApiMap]
23
+ # @return [Array<Hash>]
24
+ def diagnose source, api_map
25
+ []
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,37 +1,53 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Diagnostics
5
- # RequireNotFound reports required paths that could not be resolved to
6
- # either a file in the workspace or a gem.
7
- #
8
- class RequireNotFound < Base
9
- def diagnose source, api_map
10
- return [] unless source.parsed? && source.synchronized?
11
- result = []
12
- refs = {}
13
- map = api_map.source_map(source.filename)
14
- map.requires.each { |ref| refs[ref.name] = ref }
15
- api_map.unresolved_requires.each do |r|
16
- next unless refs.key?(r)
17
- result.push require_error(r, refs[r].location)
18
- end
19
- result
20
- end
21
-
22
- private
23
-
24
- # @param path [String]
25
- # @param location [Location]
26
- # @return [Hash]
27
- def require_error path, location
28
- {
29
- range: location.range.to_hash,
30
- severity: Diagnostics::Severities::WARNING,
31
- source: 'RequireNotFound',
32
- message: "Required path #{path} could not be resolved."
33
- }
34
- end
35
- end
36
- end
37
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Diagnostics
5
+ # RequireNotFound reports required paths that could not be resolved to
6
+ # either a file in the workspace or a gem.
7
+ #
8
+ class RequireNotFound < Base
9
+ def diagnose source, api_map
10
+ return [] unless source.parsed? && source.synchronized?
11
+ result = []
12
+ refs = {}
13
+ map = api_map.source_map(source.filename)
14
+ map.requires.each { |ref| refs[ref.name] = ref }
15
+ api_map.missing_docs.each do |r|
16
+ next unless refs.key?(r)
17
+ result.push docs_error(r, refs[r].location)
18
+ end
19
+ api_map.unresolved_requires.each do |r|
20
+ next unless refs.key?(r)
21
+ result.push require_error(r, refs[r].location)
22
+ end
23
+ result
24
+ end
25
+
26
+ private
27
+
28
+ # @param path [String]
29
+ # @param location [Location]
30
+ # @return [Hash]
31
+ def docs_error path, location
32
+ {
33
+ range: location.range.to_hash,
34
+ severity: Diagnostics::Severities::WARNING,
35
+ source: 'RequireNotFound',
36
+ message: "YARD docs not found for #{path}"
37
+ }
38
+ end
39
+
40
+ # @param path [String]
41
+ # @param location [Location]
42
+ # @return [Hash]
43
+ def require_error path, location
44
+ {
45
+ range: location.range.to_hash,
46
+ severity: Diagnostics::Severities::WARNING,
47
+ source: 'RequireNotFound',
48
+ message: "Required path #{path} could not be resolved."
49
+ }
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,98 +1,98 @@
1
- # frozen_string_literal: true
2
-
3
- require 'stringio'
4
-
5
- module Solargraph
6
- module Diagnostics
7
- # This reporter provides linting through RuboCop.
8
- #
9
- class Rubocop < Base
10
- include RubocopHelpers
11
-
12
- # Conversion of RuboCop severity names to LSP constants
13
- SEVERITIES = {
14
- 'refactor' => Severities::HINT,
15
- 'convention' => Severities::INFORMATION,
16
- 'warning' => Severities::WARNING,
17
- 'error' => Severities::ERROR,
18
- 'fatal' => Severities::ERROR
19
- }
20
-
21
- # @param source [Solargraph::Source]
22
- # @param _api_map [Solargraph::ApiMap]
23
- # @return [Array<Hash>]
24
- def diagnose source, _api_map
25
- require_rubocop(rubocop_version)
26
- options, paths = generate_options(source.filename, source.code)
27
- store = RuboCop::ConfigStore.new
28
- runner = RuboCop::Runner.new(options, store)
29
- result = redirect_stdout{ runner.run(paths) }
30
- make_array JSON.parse(result)
31
- rescue RuboCop::ValidationError, RuboCop::ConfigNotFoundError => e
32
- raise DiagnosticsError, "Error in RuboCop configuration: #{e.message}"
33
- rescue JSON::ParserError
34
- raise DiagnosticsError, 'RuboCop returned invalid data'
35
- end
36
-
37
- private
38
-
39
- # Extracts the rubocop version from _args_
40
- #
41
- # @return [String]
42
- def rubocop_version
43
- args.find { |a| a =~ /version=/ }.to_s.split('=').last
44
- end
45
-
46
- # @param resp [Hash]
47
- # @return [Array<Hash>]
48
- def make_array resp
49
- diagnostics = []
50
- resp['files'].each do |file|
51
- file['offenses'].each do |off|
52
- diagnostics.push offense_to_diagnostic(off)
53
- end
54
- end
55
- diagnostics
56
- end
57
-
58
- # Convert a RuboCop offense to an LSP diagnostic
59
- #
60
- # @param off [Hash] Offense received from Rubocop
61
- # @return [Hash] LSP diagnostic
62
- def offense_to_diagnostic off
63
- {
64
- range: offense_range(off).to_hash,
65
- # 1 = Error, 2 = Warning, 3 = Information, 4 = Hint
66
- severity: SEVERITIES[off['severity']],
67
- source: 'rubocop',
68
- code: off['cop_name'],
69
- message: off['message'].gsub(/^#{off['cop_name']}\:/, '')
70
- }
71
- end
72
-
73
- # @param off [Hash]
74
- # @return [Range]
75
- def offense_range off
76
- Range.new(offense_start_position(off), offense_ending_position(off))
77
- end
78
-
79
- # @param off [Hash]
80
- # @return [Position]
81
- def offense_start_position off
82
- Position.new(off['location']['start_line'] - 1, off['location']['start_column'] - 1)
83
- end
84
-
85
- # @param off [Hash]
86
- # @return [Position]
87
- def offense_ending_position off
88
- if off['location']['start_line'] != off['location']['last_line']
89
- Position.new(off['location']['start_line'], 0)
90
- else
91
- Position.new(
92
- off['location']['start_line'] - 1, off['location']['last_column']
93
- )
94
- end
95
- end
96
- end
97
- end
98
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'stringio'
4
+
5
+ module Solargraph
6
+ module Diagnostics
7
+ # This reporter provides linting through RuboCop.
8
+ #
9
+ class Rubocop < Base
10
+ include RubocopHelpers
11
+
12
+ # Conversion of RuboCop severity names to LSP constants
13
+ SEVERITIES = {
14
+ 'refactor' => Severities::HINT,
15
+ 'convention' => Severities::INFORMATION,
16
+ 'warning' => Severities::WARNING,
17
+ 'error' => Severities::ERROR,
18
+ 'fatal' => Severities::ERROR
19
+ }
20
+
21
+ # @param source [Solargraph::Source]
22
+ # @param _api_map [Solargraph::ApiMap]
23
+ # @return [Array<Hash>]
24
+ def diagnose source, _api_map
25
+ require_rubocop(rubocop_version)
26
+ options, paths = generate_options(source.filename, source.code)
27
+ store = RuboCop::ConfigStore.new
28
+ runner = RuboCop::Runner.new(options, store)
29
+ result = redirect_stdout{ runner.run(paths) }
30
+ make_array JSON.parse(result)
31
+ rescue RuboCop::ValidationError, RuboCop::ConfigNotFoundError => e
32
+ raise DiagnosticsError, "Error in RuboCop configuration: #{e.message}"
33
+ rescue JSON::ParserError
34
+ raise DiagnosticsError, 'RuboCop returned invalid data'
35
+ end
36
+
37
+ private
38
+
39
+ # Extracts the rubocop version from _args_
40
+ #
41
+ # @return [String]
42
+ def rubocop_version
43
+ args.find { |a| a =~ /version=/ }.to_s.split('=').last
44
+ end
45
+
46
+ # @param resp [Hash]
47
+ # @return [Array<Hash>]
48
+ def make_array resp
49
+ diagnostics = []
50
+ resp['files'].each do |file|
51
+ file['offenses'].each do |off|
52
+ diagnostics.push offense_to_diagnostic(off)
53
+ end
54
+ end
55
+ diagnostics
56
+ end
57
+
58
+ # Convert a RuboCop offense to an LSP diagnostic
59
+ #
60
+ # @param off [Hash] Offense received from Rubocop
61
+ # @return [Hash] LSP diagnostic
62
+ def offense_to_diagnostic off
63
+ {
64
+ range: offense_range(off).to_hash,
65
+ # 1 = Error, 2 = Warning, 3 = Information, 4 = Hint
66
+ severity: SEVERITIES[off['severity']],
67
+ source: 'rubocop',
68
+ code: off['cop_name'],
69
+ message: off['message'].gsub(/^#{off['cop_name']}\:/, '')
70
+ }
71
+ end
72
+
73
+ # @param off [Hash]
74
+ # @return [Range]
75
+ def offense_range off
76
+ Range.new(offense_start_position(off), offense_ending_position(off))
77
+ end
78
+
79
+ # @param off [Hash]
80
+ # @return [Position]
81
+ def offense_start_position off
82
+ Position.new(off['location']['start_line'] - 1, off['location']['start_column'] - 1)
83
+ end
84
+
85
+ # @param off [Hash]
86
+ # @return [Position]
87
+ def offense_ending_position off
88
+ if off['location']['start_line'] != off['location']['last_line']
89
+ Position.new(off['location']['start_line'], 0)
90
+ else
91
+ Position.new(
92
+ off['location']['start_line'] - 1, off['location']['last_column']
93
+ )
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -1,63 +1,63 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Diagnostics
5
- # Utility methods for the RuboCop diagnostics reporter.
6
- #
7
- module RubocopHelpers
8
- module_function
9
-
10
- # Requires a specific version of rubocop, or the latest installed version
11
- # if _version_ is `nil`.
12
- #
13
- # @param version [String]
14
- # @raise [InvalidRubocopVersionError] if _version_ is not installed
15
- def require_rubocop(version = nil)
16
- begin
17
- gem_path = Gem::Specification.find_by_name('rubocop', version).full_gem_path
18
- gem_lib_path = File.join(gem_path, 'lib')
19
- $LOAD_PATH.unshift(gem_lib_path) unless $LOAD_PATH.include?(gem_lib_path)
20
- rescue Gem::MissingSpecVersionError => e
21
- raise InvalidRubocopVersionError,
22
- "could not find '#{e.name}' (#{e.requirement}) - "\
23
- "did find: [#{e.specs.map { |s| s.version.version }.join(', ')}]"
24
- end
25
- require 'rubocop'
26
- end
27
-
28
- # Generate command-line options for the specified filename and code.
29
- #
30
- # @param filename [String]
31
- # @param code [String]
32
- # @return [Array(Array<String>, Array<String>)]
33
- def generate_options filename, code
34
- args = ['-f', 'j', '--force-exclusion', filename]
35
- base_options = RuboCop::Options.new
36
- options, paths = base_options.parse(args)
37
- options[:stdin] = code
38
- [options, paths]
39
- end
40
-
41
- # RuboCop internally uses capitalized drive letters for Windows paths,
42
- # so we need to convert the paths provided to the command.
43
- #
44
- # @param path [String]
45
- # @return [String]
46
- def fix_drive_letter path
47
- return path unless path.match(/^[a-z]:/)
48
- path[0].upcase + path[1..-1]
49
- end
50
-
51
- # @todo This is a smelly way to redirect output, but the RuboCop specs do
52
- # the same thing.
53
- # @return [String]
54
- def redirect_stdout
55
- redir = StringIO.new
56
- $stdout = redir
57
- yield if block_given?
58
- $stdout = STDOUT
59
- redir.string
60
- end
61
- end
62
- end
63
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Diagnostics
5
+ # Utility methods for the RuboCop diagnostics reporter.
6
+ #
7
+ module RubocopHelpers
8
+ module_function
9
+
10
+ # Requires a specific version of rubocop, or the latest installed version
11
+ # if _version_ is `nil`.
12
+ #
13
+ # @param version [String]
14
+ # @raise [InvalidRubocopVersionError] if _version_ is not installed
15
+ def require_rubocop(version = nil)
16
+ begin
17
+ gem_path = Gem::Specification.find_by_name('rubocop', version).full_gem_path
18
+ gem_lib_path = File.join(gem_path, 'lib')
19
+ $LOAD_PATH.unshift(gem_lib_path) unless $LOAD_PATH.include?(gem_lib_path)
20
+ rescue Gem::MissingSpecVersionError => e
21
+ raise InvalidRubocopVersionError,
22
+ "could not find '#{e.name}' (#{e.requirement}) - "\
23
+ "did find: [#{e.specs.map { |s| s.version.version }.join(', ')}]"
24
+ end
25
+ require 'rubocop'
26
+ end
27
+
28
+ # Generate command-line options for the specified filename and code.
29
+ #
30
+ # @param filename [String]
31
+ # @param code [String]
32
+ # @return [Array(Array<String>, Array<String>)]
33
+ def generate_options filename, code
34
+ args = ['-f', 'j', '--force-exclusion', filename]
35
+ base_options = RuboCop::Options.new
36
+ options, paths = base_options.parse(args)
37
+ options[:stdin] = code
38
+ [options, paths]
39
+ end
40
+
41
+ # RuboCop internally uses capitalized drive letters for Windows paths,
42
+ # so we need to convert the paths provided to the command.
43
+ #
44
+ # @param path [String]
45
+ # @return [String]
46
+ def fix_drive_letter path
47
+ return path unless path.match(/^[a-z]:/)
48
+ path[0].upcase + path[1..-1]
49
+ end
50
+
51
+ # @todo This is a smelly way to redirect output, but the RuboCop specs do
52
+ # the same thing.
53
+ # @return [String]
54
+ def redirect_stdout
55
+ redir = StringIO.new
56
+ $stdout = redir
57
+ yield if block_given?
58
+ $stdout = STDOUT
59
+ redir.string
60
+ end
61
+ end
62
+ end
63
+ end