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,5 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- VERSION = '0.45.0'
5
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ VERSION = '0.46.0'
5
+ end
@@ -1,58 +1,58 @@
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: <%= 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,231 +1,231 @@
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
+ # @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