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,5 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- VERSION = '0.46.0'
5
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ VERSION = '0.54.5'
5
+ end
@@ -1,58 +1,56 @@
1
- <html>
2
- <head>
3
- <title>Solargraph Environment</title>
4
- </head>
5
- <h1>
6
- Solargraph Environment Info
7
- </h1>
8
- <h2>
9
- System
10
- </h2>
11
- <ul>
12
- <li>
13
- Platform: <%= RUBY_PLATFORM %>
14
- </li>
15
- <li>
16
- Shell: <%= ENV['SHELL'] %>
17
- </li>
18
- <li>
19
- Ruby Version: <%= RUBY_VERSION %>
20
- </li>
21
- <li>
22
- RuboCop Version: <%= RuboCop::Version::STRING %>
23
- </li>
24
- </ul>
25
- <h2>
26
- Solargraph
27
- </h2>
28
- <ul>
29
- <li>
30
- Solargraph Version: <%= Solargraph::VERSION %>
31
- </li>
32
- <li>
33
- Core Documentation Version: <%= Solargraph::YardMap::CoreDocs.best_match %>
34
- </li>
35
- <li>
36
- Core Cache Directory: <%= Solargraph::YardMap::CoreDocs.cache_dir %>
37
- </li>
38
- <% unless Solargraph::Parser.rubyvm? %>
39
- <li>
40
- Parser Target Version: <%= Solargraph::Parser.version %>
41
- </li>
42
- <% end %>
43
- <li>
44
- Using Bundler: <%= ENV.key?('BUNDLE_BIN_PATH') %>
45
- </li>
46
- </ul>
47
- <h2>
48
- Project
49
- </h2>
50
- <ul>
51
- <li>
52
- Config: <%= config %>
53
- </li>
54
- <li>
55
- Workspace folders: <%= folders %>
56
- </li>
57
- </ul>
58
- </html>
1
+ <html>
2
+ <head>
3
+ <title>Solargraph Environment</title>
4
+ </head>
5
+ <h1>
6
+ Solargraph Environment Info
7
+ </h1>
8
+ <h2>
9
+ System
10
+ </h2>
11
+ <ul>
12
+ <li>
13
+ Platform: <%= RUBY_PLATFORM %>
14
+ </li>
15
+ <li>
16
+ Shell: <%= ENV['SHELL'] %>
17
+ </li>
18
+ <li>
19
+ Ruby Version: <%= RUBY_VERSION %>
20
+ </li>
21
+ <li>
22
+ RuboCop Version: <%= RuboCop::Version::STRING %>
23
+ </li>
24
+ </ul>
25
+ <h2>
26
+ Solargraph
27
+ </h2>
28
+ <ul>
29
+ <li>
30
+ Solargraph Version: <%= Solargraph::VERSION %>
31
+ </li>
32
+ <li>
33
+ Core Documentation Version: N/A <%# @todo Fix %>
34
+ </li>
35
+ <li>
36
+ Core Cache Directory: N/A <%# @todo Fix %>
37
+ </li>
38
+ <li>
39
+ Parser Target Version: <%= Solargraph::Parser.version %>
40
+ </li>
41
+ <li>
42
+ Using Bundler: <%= ENV.key?('BUNDLE_BIN_PATH') %>
43
+ </li>
44
+ </ul>
45
+ <h2>
46
+ Project
47
+ </h2>
48
+ <ul>
49
+ <li>
50
+ Config: <%= config %>
51
+ </li>
52
+ <li>
53
+ Workspace folders: <%= folders %>
54
+ </li>
55
+ </ul>
56
+ </html>
@@ -1,231 +1,239 @@
1
- # frozen_string_literal: true
2
-
3
- require 'yaml'
4
-
5
- module Solargraph
6
- class Workspace
7
- # Configuration data for a workspace.
8
- #
9
- class Config
10
- # The maximum number of files that can be added to a workspace.
11
- # The workspace's .solargraph.yml can override this value.
12
- MAX_FILES = 5000
13
-
14
- # @return [String]
15
- attr_reader :directory
16
-
17
- # @return [Hash]
18
- attr_reader :raw_data
19
-
20
- # @param directory [String]
21
- def initialize directory = ''
22
- @directory = directory
23
- @raw_data = config_data
24
- included
25
- excluded
26
- end
27
-
28
- # An array of files included in the workspace (before calculating excluded files).
29
- #
30
- # @return [Array<String>]
31
- def included
32
- return [] if directory.empty? || directory == '*'
33
- @included ||= process_globs(@raw_data['include'])
34
- end
35
-
36
- # An array of files excluded from the workspace.
37
- #
38
- # @return [Array<String>]
39
- def excluded
40
- return [] if directory.empty? || directory == '*'
41
- @excluded ||= process_exclusions(@raw_data['exclude'])
42
- end
43
-
44
- def allow? filename
45
- filename.start_with?(directory) &&
46
- !excluded.include?(filename) &&
47
- excluded_directories.none? { |d| filename.start_with?(d) }
48
- end
49
-
50
- # The calculated array of (included - excluded) files in the workspace.
51
- #
52
- # @return [Array<String>]
53
- def calculated
54
- Solargraph.logger.info "Indexing workspace files in #{directory}" unless @calculated || directory.empty? || directory == '*'
55
- @calculated ||= included - excluded
56
- end
57
-
58
- # An array of domains configured for the workspace.
59
- # A domain is a namespace that the ApiMap should include in the global
60
- # namespace. It's typically used to identify available DSLs.
61
- #
62
- # @return [Array<String>]
63
- def domains
64
- raw_data['domains']
65
- end
66
-
67
- # An array of required paths to add to the workspace.
68
- #
69
- # @return [Array<String>]
70
- def required
71
- raw_data['require']
72
- end
73
-
74
- # An array of load paths for required paths.
75
- #
76
- # @return [Array<String>]
77
- def require_paths
78
- raw_data['require_paths'] || []
79
- end
80
-
81
- # An array of reporters to use for diagnostics.
82
- #
83
- # @return [Array<String>]
84
- def reporters
85
- raw_data['reporters']
86
- end
87
-
88
- # A hash of options supported by the formatter
89
- #
90
- # @return [Hash]
91
- def formatter
92
- raw_data['formatter']
93
- end
94
-
95
- # An array of plugins to require.
96
- #
97
- # @return [Array<String>]
98
- def plugins
99
- raw_data['plugins']
100
- end
101
-
102
- # The maximum number of files to parse from the workspace.
103
- #
104
- # @return [Integer]
105
- def max_files
106
- raw_data['max_files']
107
- end
108
-
109
- private
110
-
111
- # @return [String]
112
- def global_config_path
113
- ENV['SOLARGRAPH_GLOBAL_CONFIG'] ||
114
- File.join(Dir.home, '.config', 'solargraph', 'config.yml')
115
- end
116
-
117
- # @return [String]
118
- def workspace_config_path
119
- return '' if @directory.empty?
120
- File.join(@directory, '.solargraph.yml')
121
- end
122
-
123
- # @return [Hash]
124
- def config_data
125
- workspace_config = read_config(workspace_config_path)
126
- global_config = read_config(global_config_path)
127
-
128
- defaults = default_config
129
- defaults.merge({'exclude' => []}) unless workspace_config.nil?
130
-
131
- defaults
132
- .merge(global_config || {})
133
- .merge(workspace_config || {})
134
- end
135
-
136
- # Read a .solargraph yaml config
137
- #
138
- # @param directory [String]
139
- # @return [Hash, nil]
140
- def read_config config_path = ''
141
- return nil if config_path.empty?
142
- return nil unless File.file?(config_path)
143
- YAML.safe_load(File.read(config_path))
144
- end
145
-
146
- # @return [Hash]
147
- def default_config
148
- {
149
- 'include' => ['**/*.rb'],
150
- 'exclude' => ['spec/**/*', 'test/**/*', 'vendor/**/*', '.bundle/**/*'],
151
- 'require' => [],
152
- 'domains' => [],
153
- 'reporters' => %w[rubocop require_not_found],
154
- 'formatter' => {
155
- 'rubocop' => {
156
- 'cops' => 'safe',
157
- 'except' => [],
158
- 'only' => [],
159
- 'extra_args' =>[]
160
- }
161
- },
162
- 'require_paths' => [],
163
- 'plugins' => [],
164
- 'max_files' => MAX_FILES
165
- }
166
- end
167
-
168
- # Get an array of files from the provided globs.
169
- #
170
- # @param globs [Array<String>]
171
- # @return [Array<String>]
172
- def process_globs globs
173
- result = globs.flat_map do |glob|
174
- Dir[File.join directory, glob]
175
- .map{ |f| f.gsub(/\\/, '/') }
176
- .select { |f| File.file?(f) }
177
- end
178
- result
179
- end
180
-
181
- # Modify the included files based on excluded directories and get an
182
- # array of additional files to exclude.
183
- #
184
- # @param globs [Array<String>]
185
- # @return [Array<String>]
186
- def process_exclusions globs
187
- remainder = globs.select do |glob|
188
- if glob_is_directory?(glob)
189
- exdir = File.join(directory, glob_to_directory(glob))
190
- included.delete_if { |file| file.start_with?(exdir) }
191
- false
192
- else
193
- true
194
- end
195
- end
196
- process_globs remainder
197
- end
198
-
199
- # True if the glob translates to a whole directory.
200
- #
201
- # @example
202
- # glob_is_directory?('path/to/dir') # => true
203
- # glob_is_directory?('path/to/dir/**/*) # => true
204
- # glob_is_directory?('path/to/file.txt') # => false
205
- # glob_is_directory?('path/to/*.txt') # => false
206
- #
207
- # @param glob [String]
208
- # @return [Boolean]
209
- def glob_is_directory? glob
210
- File.directory?(glob) || File.directory?(glob_to_directory(glob))
211
- end
212
-
213
- # Translate a glob to a base directory if applicable
214
- #
215
- # @example
216
- # glob_to_directory('path/to/dir/**/*') # => 'path/to/dir'
217
- #
218
- # @param glob [String]
219
- # @return [String]
220
- def glob_to_directory glob
221
- glob.gsub(/(\/\*|\/\*\*\/\*\*?)$/, '')
222
- end
223
-
224
- def excluded_directories
225
- @raw_data['exclude']
226
- .select { |g| glob_is_directory?(g) }
227
- .map { |g| File.join(directory, glob_to_directory(g)) }
228
- end
229
- end
230
- end
231
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+
5
+ module Solargraph
6
+ class Workspace
7
+ # Configuration data for a workspace.
8
+ #
9
+ class Config
10
+ # The maximum number of files that can be added to a workspace.
11
+ # The workspace's .solargraph.yml can override this value.
12
+ MAX_FILES = 5000
13
+
14
+ # @return [String]
15
+ attr_reader :directory
16
+
17
+ # @todo To make this strongly typed we'll need a record syntax
18
+ # @return [Hash{String => Array, Hash, Integer, nil}]
19
+ attr_reader :raw_data
20
+
21
+ # @param directory [String]
22
+ def initialize directory = ''
23
+ @directory = File.absolute_path(directory)
24
+ @raw_data = config_data
25
+ included
26
+ excluded
27
+ end
28
+
29
+ # An array of files included in the workspace (before calculating excluded files).
30
+ #
31
+ # @return [Array<String>]
32
+ def included
33
+ return [] if directory.empty? || directory == '*'
34
+ @included ||= process_globs(@raw_data['include'])
35
+ end
36
+
37
+ # An array of files excluded from the workspace.
38
+ #
39
+ # @return [Array<String>]
40
+ def excluded
41
+ return [] if directory.empty? || directory == '*'
42
+ @excluded ||= process_exclusions(@raw_data['exclude'])
43
+ end
44
+
45
+ # @param filename [String]
46
+ def allow? filename
47
+ filename = File.absolute_path(filename, directory)
48
+ filename.start_with?(directory) &&
49
+ !excluded.include?(filename) &&
50
+ excluded_directories.none? { |d| filename.start_with?(d) }
51
+ end
52
+
53
+ # The calculated array of (included - excluded) files in the workspace.
54
+ #
55
+ # @return [Array<String>]
56
+ def calculated
57
+ Solargraph.logger.info "Indexing workspace files in #{directory}" unless @calculated || directory.empty? || directory == '*'
58
+ @calculated ||= included - excluded
59
+ end
60
+
61
+ # An array of domains configured for the workspace.
62
+ # A domain is a namespace that the ApiMap should include in the global
63
+ # namespace. It's typically used to identify available DSLs.
64
+ #
65
+ # @return [Array<String>]
66
+ def domains
67
+ raw_data['domains']
68
+ end
69
+
70
+ # An array of required paths to add to the workspace.
71
+ #
72
+ # @return [Array<String>]
73
+ def required
74
+ raw_data['require']
75
+ end
76
+
77
+ # An array of load paths for required paths.
78
+ #
79
+ # @return [Array<String>]
80
+ def require_paths
81
+ raw_data['require_paths'] || []
82
+ end
83
+
84
+ # An array of reporters to use for diagnostics.
85
+ #
86
+ # @return [Array<String>]
87
+ def reporters
88
+ raw_data['reporters']
89
+ end
90
+
91
+ # A hash of options supported by the formatter
92
+ #
93
+ # @sg-ignore pending https://github.com/castwide/solargraph/pull/905
94
+ # @return [Hash]
95
+ def formatter
96
+ raw_data['formatter']
97
+ end
98
+
99
+ # An array of plugins to require.
100
+ #
101
+ # @return [Array<String>]
102
+ def plugins
103
+ raw_data['plugins']
104
+ end
105
+
106
+ # The maximum number of files to parse from the workspace.
107
+ #
108
+ # @sg-ignore pending https://github.com/castwide/solargraph/pull/905
109
+ # @return [Integer]
110
+ def max_files
111
+ raw_data['max_files']
112
+ end
113
+
114
+ private
115
+
116
+ # @return [String]
117
+ def global_config_path
118
+ ENV['SOLARGRAPH_GLOBAL_CONFIG'] ||
119
+ File.join(Dir.home, '.config', 'solargraph', 'config.yml')
120
+ end
121
+
122
+ # @return [String]
123
+ def workspace_config_path
124
+ return '' if @directory.empty?
125
+ File.join(@directory, '.solargraph.yml')
126
+ end
127
+
128
+ # @return [Hash{String => Array<undefined>, Hash{String => undefined}, Integer}]
129
+ def config_data
130
+ workspace_config = read_config(workspace_config_path)
131
+ global_config = read_config(global_config_path)
132
+
133
+ defaults = default_config
134
+ defaults.merge({'exclude' => []}) unless workspace_config.nil?
135
+
136
+ defaults
137
+ .merge(global_config || {})
138
+ .merge(workspace_config || {})
139
+ end
140
+
141
+ # Read a .solargraph yaml config
142
+ #
143
+ # @param config_path [String]
144
+ # @return [Hash{String => Array, Hash, Integer}, nil]
145
+ def read_config config_path = ''
146
+ return nil if config_path.empty?
147
+ return nil unless File.file?(config_path)
148
+ YAML.safe_load(File.read(config_path))
149
+ end
150
+
151
+ # @return [Hash{String => Array, Hash, Integer}]
152
+ def default_config
153
+ {
154
+ 'include' => ['**/*.rb'],
155
+ 'exclude' => ['spec/**/*', 'test/**/*', 'vendor/**/*', '.bundle/**/*'],
156
+ 'require' => [],
157
+ 'domains' => [],
158
+ 'reporters' => %w[rubocop require_not_found],
159
+ 'formatter' => {
160
+ 'rubocop' => {
161
+ 'cops' => 'safe',
162
+ 'except' => [],
163
+ 'only' => [],
164
+ 'extra_args' =>[]
165
+ }
166
+ },
167
+ 'require_paths' => [],
168
+ 'plugins' => [],
169
+ 'max_files' => MAX_FILES
170
+ }
171
+ end
172
+
173
+ # Get an array of files from the provided globs.
174
+ #
175
+ # @param globs [Array<String>]
176
+ # @return [Array<String>]
177
+ def process_globs globs
178
+ result = globs.flat_map do |glob|
179
+ Dir[File.absolute_path(glob, directory)]
180
+ .map{ |f| f.gsub(/\\/, '/') }
181
+ .select { |f| File.file?(f) }
182
+ end
183
+ result
184
+ end
185
+
186
+ # Modify the included files based on excluded directories and get an
187
+ # array of additional files to exclude.
188
+ #
189
+ # @param globs [Array<String>]
190
+ # @return [Array<String>]
191
+ def process_exclusions globs
192
+ remainder = globs.select do |glob|
193
+ if glob_is_directory?(glob)
194
+ exdir = File.absolute_path(glob_to_directory(glob), directory)
195
+ included.delete_if { |file| file.start_with?(exdir) }
196
+ false
197
+ else
198
+ true
199
+ end
200
+ end
201
+ process_globs remainder
202
+ end
203
+
204
+ # True if the glob translates to a whole directory.
205
+ #
206
+ # @example
207
+ # glob_is_directory?('path/to/dir') # => true
208
+ # glob_is_directory?('path/to/dir/**/*) # => true
209
+ # glob_is_directory?('path/to/file.txt') # => false
210
+ # glob_is_directory?('path/to/*.txt') # => false
211
+ #
212
+ # @param glob [String]
213
+ # @return [Boolean]
214
+ def glob_is_directory? glob
215
+ File.directory?(glob) || File.directory?(glob_to_directory(glob))
216
+ end
217
+
218
+ # Translate a glob to a base directory if applicable
219
+ #
220
+ # @example
221
+ # glob_to_directory('path/to/dir/**/*') # => 'path/to/dir'
222
+ #
223
+ # @param glob [String]
224
+ # @return [String]
225
+ def glob_to_directory glob
226
+ glob.gsub(/(\/\*|\/\*\*\/\*\*?)$/, '')
227
+ end
228
+
229
+ # @return [Array<String>]
230
+ def excluded_directories
231
+ # @type [Array<String>]
232
+ excluded = @raw_data['exclude']
233
+ excluded
234
+ .select { |g| glob_is_directory?(g) }
235
+ .map { |g| File.absolute_path(glob_to_directory(g), directory) }
236
+ end
237
+ end
238
+ end
239
+ end