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
data/Gemfile CHANGED
File without changes
data/LICENSE CHANGED
File without changes
data/README.md CHANGED
@@ -1,128 +1,128 @@
1
- # Solargraph
2
-
3
- [![RSpec](https://github.com/castwide/solargraph/actions/workflows/rspec.yml/badge.svg)](https://github.com/castwide/solargraph/actions/workflows/rspec.yml)
4
-
5
- ## A Ruby Language Server
6
-
7
- Solargraph provides a comprehensive suite of tools for Ruby programming: intellisense, diagnostics, inline documentation, and type checking.
8
-
9
- ## Online Demo
10
-
11
- A web-based demonstration of Solargraph's autocomplete is available at https://solargraph.org/demo.
12
-
13
- ## Installation
14
-
15
- Install the gem from the command line:
16
-
17
- gem install solargraph
18
-
19
- Or add it to your Gemfile:
20
-
21
- gem 'solargraph', group: :development
22
-
23
- ## Using Solargraph
24
-
25
- Plug-ins and extensions are available for the following editors:
26
-
27
- * **Visual Studio Code**
28
- * Extension: https://marketplace.visualstudio.com/items?itemName=castwide.solargraph
29
- * GitHub: https://github.com/castwide/vscode-solargraph
30
-
31
- * **Atom**
32
- * Package: https://atom.io/packages/ruby-solargraph
33
- * GitHub: https://github.com/castwide/atom-solargraph
34
-
35
- * **Vim**
36
- * GitHub: `LanguageClient-neovim`, https://github.com/autozimu/LanguageClient-neovim
37
- * GitHub: `coc`, https://github.com/neoclide/coc-solargraph
38
- * GitHub: `Vim-EasyComplete`, https://github.com/jayli/vim-easycomplete
39
-
40
- * **Emacs**
41
- * GitHub: `eglot.el`, https://github.com/joaotavora/eglot
42
- * GitHub: `lsp-mode.el`, https://github.com/emacs-lsp/lsp-mode
43
-
44
- * **Eclipse**
45
- * Plugin: https://marketplace.eclipse.org/content/ruby-solargraph
46
- * GitHub: https://github.com/PyvesB/eclipse-solargraph
47
-
48
- ### Configuration
49
-
50
- Solargraph's behavior can be controlled via optional [configuration](https://solargraph.org/guides/configuration) files. The highest priority file is a `.solargraph.yml` file at the root of the project. If not present, any global configuration at `~/.config/solargraph/config.yml` will apply. The path to the global configuration can be overridden with the `SOLARGRAPH_GLOBAL_CONFIG` environment variable.
51
-
52
- ### Gem Support
53
-
54
- Solargraph is capable of providing code completion and documentation for gems that have YARD documentation. You can make sure your gems are documented by running `yard gems` from the command line. (YARD is included as one of Solargraph's gem dependencies. The first time you run it might take a while if you have a lot of gems installed).
55
-
56
- When editing code, a `require` call that references a gem will pull the documentation into the code maps and include the gem's API in code completion and intellisense.
57
-
58
- If your project automatically requires bundled gems (e.g., `require 'bundler/require'`), Solargraph will add all of the Gemfile's default dependencies to the map.
59
-
60
- ### Type Checking
61
-
62
- As of version 0.33.0, Solargraph includes a [type checker](https://github.com/castwide/solargraph/issues/192) that uses a combination of YARD tags and code analysis to report missing type definitions. In strict mode, it performs type inference to determine whether the tags match the types it detects from code.
63
-
64
- ### Updating Core Documentation
65
-
66
- The Solargraph gem ships with documentation for Ruby 2.2.2. You can download documentation for other Ruby versions from the command line.
67
-
68
- $ solargraph list-cores # List the installed documentation versions
69
- $ solargraph available-cores # List the versions available for download
70
- $ solargraph download-core # Install the best match for your Ruby version
71
- $ solargraph clear # Reset the documentation cache
72
-
73
- ### The Documentation Cache
74
-
75
- Solargraph uses a cache directory to store documentation for the Ruby core and customized documentation for certain gems. The default location is `~/.solargraph/cache`, e.g., `/home/<username>/.solargraph/cache` on Linux or `C:\Users\<username>\.solargraph` on Windows.
76
-
77
- You can change the location of the cache directory with the `SOLARGRAPH_CACHE` environment variable. This can be useful if you want the cache to comply with the XDG Base Directory Specification.
78
-
79
- ### Solargraph and Bundler
80
-
81
- If you're using the language server with a project that uses Bundler, the most comprehensive way to use your bundled gems is to bundle Solargraph.
82
-
83
- In the Gemfile:
84
-
85
- gem 'solargraph', group: :development
86
-
87
- Run `bundle install` and use `bundle exec yard gems` to generate the documentation. This process documents cached or vendored gems, or even gems that are installed from a local path.
88
-
89
- In order to make sure you're using the correct dependencies, you can start the language server with Bundler. In VS Code, there's a `solargraph.useBundler` option. Other clients will vary, but the command you probably want to run is `bundle exec solargraph socket` or `bundle exec solargraph stdio`.
90
-
91
- ### Rubocop Version
92
-
93
- If you have multiple versions of [`rubocop`](https://rubygems.org/gems/rubocop) installed and you would like to choose a version other than the latest to use, this specific version can be configured.
94
-
95
- In `.solargraph.yml`:
96
-
97
- ```yaml
98
- ---
99
- reporters:
100
- - rubocop:version=0.61.0 # diagnostics
101
- formatter:
102
- rubocop:
103
- version: 0.61.0 # formatting
104
- ```
105
-
106
- ### Integrating Other Editors
107
-
108
- The [language server protocol](https://microsoft.github.io/language-server-protocol/specification) is the recommended way for integrating Solargraph into editors and IDEs. Clients can connect using either stdio or TCP. Language client developers should refer to [https://solargraph.org/guides/language-server](https://solargraph.org/guides/language-server).
109
-
110
- ### More Information
111
-
112
- See [https://solargraph.org/guides](https://solargraph.org/guides) for more tips and tutorials about Solargraph.
113
-
114
- ## Contributing to Solargraph
115
-
116
- ### Bug Reports and Feature Requests
117
-
118
- [GitHub Issues](https://github.com/castwide/solargraph/issues) are the best place to ask questions, report problems, and suggest improvements.
119
-
120
- ### Development
121
-
122
- Code contributions are always appreciated. Feel free to fork the repo and submit pull requests. Check for open issues that could use help. Start new issues to discuss changes that have a major impact on the code or require large time commitments.
123
-
124
- ### Sponsorship and Donation
125
-
126
- Use Patreon to support ongoing development of Solargraph at [https://www.patreon.com/castwide](https://www.patreon.com/castwide).
127
-
128
- You can also make one-time donations via PayPal at [https://www.paypal.me/castwide](https://www.paypal.me/castwide).
1
+ # Solargraph
2
+
3
+ [![RSpec](https://github.com/castwide/solargraph/actions/workflows/rspec.yml/badge.svg)](https://github.com/castwide/solargraph/actions/workflows/rspec.yml)
4
+
5
+ ## A Ruby Language Server
6
+
7
+ Solargraph provides a comprehensive suite of tools for Ruby programming: intellisense, diagnostics, inline documentation, and type checking.
8
+
9
+ ## Online Demo
10
+
11
+ A web-based demonstration of Solargraph's autocomplete is available at https://solargraph.org/demo.
12
+
13
+ ## Installation
14
+
15
+ Install the gem from the command line:
16
+
17
+ gem install solargraph
18
+
19
+ Or add it to your Gemfile:
20
+
21
+ gem 'solargraph', group: :development
22
+
23
+ ## Using Solargraph
24
+
25
+ Plug-ins and extensions are available for the following editors:
26
+
27
+ * **Visual Studio Code**
28
+ * Extension: https://marketplace.visualstudio.com/items?itemName=castwide.solargraph
29
+ * GitHub: https://github.com/castwide/vscode-solargraph
30
+
31
+ * **Atom**
32
+ * Package: https://atom.io/packages/ruby-solargraph
33
+ * GitHub: https://github.com/castwide/atom-solargraph
34
+
35
+ * **Vim**
36
+ * GitHub: `LanguageClient-neovim`, https://github.com/autozimu/LanguageClient-neovim
37
+ * GitHub: `coc`, https://github.com/neoclide/coc-solargraph
38
+ * GitHub: `Vim-EasyComplete`, https://github.com/jayli/vim-easycomplete
39
+
40
+ * **Emacs**
41
+ * GitHub: `eglot.el`, https://github.com/joaotavora/eglot
42
+ * GitHub: `lsp-mode.el`, https://github.com/emacs-lsp/lsp-mode
43
+
44
+ * **Eclipse**
45
+ * Plugin: https://marketplace.eclipse.org/content/ruby-solargraph
46
+ * GitHub: https://github.com/PyvesB/eclipse-solargraph
47
+
48
+ ### Configuration
49
+
50
+ Solargraph's behavior can be controlled via optional [configuration](https://solargraph.org/guides/configuration) files. The highest priority file is a `.solargraph.yml` file at the root of the project. If not present, any global configuration at `~/.config/solargraph/config.yml` will apply. The path to the global configuration can be overridden with the `SOLARGRAPH_GLOBAL_CONFIG` environment variable.
51
+
52
+ ### Gem Support
53
+
54
+ Solargraph is capable of providing code completion and documentation for gems that have YARD documentation. You can make sure your gems are documented by running `yard gems` from the command line. (YARD is included as one of Solargraph's gem dependencies. The first time you run it might take a while if you have a lot of gems installed).
55
+
56
+ When editing code, a `require` call that references a gem will pull the documentation into the code maps and include the gem's API in code completion and intellisense.
57
+
58
+ If your project automatically requires bundled gems (e.g., `require 'bundler/require'`), Solargraph will add all of the Gemfile's default dependencies to the map.
59
+
60
+ ### Type Checking
61
+
62
+ As of version 0.33.0, Solargraph includes a [type checker](https://github.com/castwide/solargraph/issues/192) that uses a combination of YARD tags and code analysis to report missing type definitions. In strict mode, it performs type inference to determine whether the tags match the types it detects from code.
63
+
64
+ ### Updating Core Documentation
65
+
66
+ The Solargraph gem ships with documentation for Ruby 2.2.2. You can download documentation for other Ruby versions from the command line.
67
+
68
+ $ solargraph list-cores # List the installed documentation versions
69
+ $ solargraph available-cores # List the versions available for download
70
+ $ solargraph download-core # Install the best match for your Ruby version
71
+ $ solargraph clear # Reset the documentation cache
72
+
73
+ ### The Documentation Cache
74
+
75
+ Solargraph uses a cache directory to store documentation for the Ruby core and customized documentation for certain gems. The default location is `~/.solargraph/cache`, e.g., `/home/<username>/.solargraph/cache` on Linux or `C:\Users\<username>\.solargraph` on Windows.
76
+
77
+ You can change the location of the cache directory with the `SOLARGRAPH_CACHE` environment variable. This can be useful if you want the cache to comply with the XDG Base Directory Specification.
78
+
79
+ ### Solargraph and Bundler
80
+
81
+ If you're using the language server with a project that uses Bundler, the most comprehensive way to use your bundled gems is to bundle Solargraph.
82
+
83
+ In the Gemfile:
84
+
85
+ gem 'solargraph', group: :development
86
+
87
+ Run `bundle install` and use `bundle exec yard gems` to generate the documentation. This process documents cached or vendored gems, or even gems that are installed from a local path.
88
+
89
+ In order to make sure you're using the correct dependencies, you can start the language server with Bundler. In VS Code, there's a `solargraph.useBundler` option. Other clients will vary, but the command you probably want to run is `bundle exec solargraph socket` or `bundle exec solargraph stdio`.
90
+
91
+ ### Rubocop Version
92
+
93
+ If you have multiple versions of [`rubocop`](https://rubygems.org/gems/rubocop) installed and you would like to choose a version other than the latest to use, this specific version can be configured.
94
+
95
+ In `.solargraph.yml`:
96
+
97
+ ```yaml
98
+ ---
99
+ reporters:
100
+ - rubocop:version=0.61.0 # diagnostics
101
+ formatter:
102
+ rubocop:
103
+ version: 0.61.0 # formatting
104
+ ```
105
+
106
+ ### Integrating Other Editors
107
+
108
+ The [language server protocol](https://microsoft.github.io/language-server-protocol/specification) is the recommended way for integrating Solargraph into editors and IDEs. Clients can connect using either stdio or TCP. Language client developers should refer to [https://solargraph.org/guides/language-server](https://solargraph.org/guides/language-server).
109
+
110
+ ### More Information
111
+
112
+ See [https://solargraph.org/guides](https://solargraph.org/guides) for more tips and tutorials about Solargraph.
113
+
114
+ ## Contributing to Solargraph
115
+
116
+ ### Bug Reports and Feature Requests
117
+
118
+ [GitHub Issues](https://github.com/castwide/solargraph/issues) are the best place to ask questions, report problems, and suggest improvements.
119
+
120
+ ### Development
121
+
122
+ Code contributions are always appreciated. Feel free to fork the repo and submit pull requests. Check for open issues that could use help. Start new issues to discuss changes that have a major impact on the code or require large time commitments.
123
+
124
+ ### Sponsorship and Donation
125
+
126
+ Use Patreon to support ongoing development of Solargraph at [https://www.patreon.com/castwide](https://www.patreon.com/castwide).
127
+
128
+ You can also make one-time donations via PayPal at [https://www.paypal.me/castwide](https://www.paypal.me/castwide).
data/Rakefile CHANGED
File without changes
data/SPONSORS.md CHANGED
@@ -1,17 +1,18 @@
1
- # Sponsors
2
-
3
- Solargraph is developed and maintained by [Castwide Technologies](https://castwide.com).
4
-
5
- The following people and organizations provide funding or other resources. [Become a sponsor](https://patreon.com/castwide)
6
-
7
- ## Linked Sponsors
8
-
9
- - **[Calyptix Security](https://www.calyptix.com/)**
10
-
11
- ## Named Sponsors
12
-
13
- - Emily Strickland
14
- - Tom de Grunt
15
- - Akira Yamada
16
- - Erlend Finvåg
17
- - Matt Massicotte
1
+ # Sponsors
2
+
3
+ Solargraph is developed and maintained by [Castwide Technologies](https://castwide.com).
4
+
5
+ The following people and organizations provide funding or other resources. [Become a sponsor](https://patreon.com/castwide)
6
+
7
+ ## Linked Sponsors
8
+
9
+ - **[Calyptix Security](https://www.calyptix.com/)**
10
+
11
+ ## Named Sponsors
12
+
13
+ - Tom de Grunt
14
+ - Akira Yamada
15
+ - Erlend Finvåg
16
+ - Matt Massicotte
17
+ - Hasan Kumar
18
+ - Oscar Rivas
data/bin/solargraph CHANGED
File without changes
@@ -1,22 +1,22 @@
1
- require 'bundler'
2
- require 'shellwords'
3
-
4
- module Solargraph
5
- class ApiMap
6
- module BundlerMethods
7
- module_function
8
-
9
- # @param directory [String]
10
- # @return [Hash]
11
- def require_from_bundle directory
12
- begin
13
- Solargraph.logger.info "Loading gems for bundler/require"
14
- Documentor.specs_from_bundle(directory)
15
- rescue BundleNotFoundError => e
16
- Solargraph.logger.warn e.message
17
- {}
18
- end
19
- end
20
- end
21
- end
22
- end
1
+ require 'bundler'
2
+ require 'shellwords'
3
+
4
+ module Solargraph
5
+ class ApiMap
6
+ module BundlerMethods
7
+ module_function
8
+
9
+ # @param directory [String]
10
+ # @return [Hash]
11
+ def require_from_bundle directory
12
+ begin
13
+ Solargraph.logger.info "Loading gems for bundler/require"
14
+ Documentor.specs_from_bundle(directory)
15
+ rescue BundleNotFoundError => e
16
+ Solargraph.logger.warn e.message
17
+ {}
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,70 +1,70 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class ApiMap
5
- class Cache
6
- def initialize
7
- @methods = {}
8
- @constants = {}
9
- @qualified_namespaces = {}
10
- @receiver_definitions = {}
11
- end
12
-
13
- # @return [Array<Pin::Method>]
14
- def get_methods fqns, scope, visibility, deep
15
- @methods[[fqns, scope, visibility.sort, deep]]
16
- end
17
-
18
- def set_methods fqns, scope, visibility, deep, value
19
- @methods[[fqns, scope, visibility.sort, deep]] = value
20
- end
21
-
22
- # @return [Array<Pin::Base>]
23
- def get_constants namespace, context
24
- @constants[[namespace, context]]
25
- end
26
-
27
- def set_constants namespace, context, value
28
- @constants[[namespace, context]] = value
29
- end
30
-
31
- # @return [String]
32
- def get_qualified_namespace name, context
33
- @qualified_namespaces[[name, context]]
34
- end
35
-
36
- def set_qualified_namespace name, context, value
37
- @qualified_namespaces[[name, context]] = value
38
- end
39
-
40
- def receiver_defined? path
41
- @receiver_definitions.key? path
42
- end
43
-
44
- # @return [Pin::Method]
45
- def get_receiver_definition path
46
- @receiver_definitions[path]
47
- end
48
-
49
- def set_receiver_definition path, pin
50
- @receiver_definitions[path] = pin
51
- end
52
-
53
- # @return [void]
54
- def clear
55
- @methods.clear
56
- @constants.clear
57
- @qualified_namespaces.clear
58
- @receiver_definitions.clear
59
- end
60
-
61
- # @return [Boolean]
62
- def empty?
63
- @methods.empty? &&
64
- @constants.empty? &&
65
- @qualified_namespaces.empty? &&
66
- @receiver_definitions.empty?
67
- end
68
- end
69
- end
70
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class ApiMap
5
+ class Cache
6
+ def initialize
7
+ @methods = {}
8
+ @constants = {}
9
+ @qualified_namespaces = {}
10
+ @receiver_definitions = {}
11
+ end
12
+
13
+ # @return [Array<Pin::Method>]
14
+ def get_methods fqns, scope, visibility, deep
15
+ @methods[[fqns, scope, visibility.sort, deep]]
16
+ end
17
+
18
+ def set_methods fqns, scope, visibility, deep, value
19
+ @methods[[fqns, scope, visibility.sort, deep]] = value
20
+ end
21
+
22
+ # @return [Array<Pin::Base>]
23
+ def get_constants namespace, context
24
+ @constants[[namespace, context]]
25
+ end
26
+
27
+ def set_constants namespace, context, value
28
+ @constants[[namespace, context]] = value
29
+ end
30
+
31
+ # @return [String]
32
+ def get_qualified_namespace name, context
33
+ @qualified_namespaces[[name, context]]
34
+ end
35
+
36
+ def set_qualified_namespace name, context, value
37
+ @qualified_namespaces[[name, context]] = value
38
+ end
39
+
40
+ def receiver_defined? path
41
+ @receiver_definitions.key? path
42
+ end
43
+
44
+ # @return [Pin::Method]
45
+ def get_receiver_definition path
46
+ @receiver_definitions[path]
47
+ end
48
+
49
+ def set_receiver_definition path, pin
50
+ @receiver_definitions[path] = pin
51
+ end
52
+
53
+ # @return [void]
54
+ def clear
55
+ @methods.clear
56
+ @constants.clear
57
+ @qualified_namespaces.clear
58
+ @receiver_definitions.clear
59
+ end
60
+
61
+ # @return [Boolean]
62
+ def empty?
63
+ @methods.empty? &&
64
+ @constants.empty? &&
65
+ @qualified_namespaces.empty? &&
66
+ @receiver_definitions.empty?
67
+ end
68
+ end
69
+ end
70
+ end
@@ -1,81 +1,81 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- class ApiMap
5
- module SourceToYard
6
-
7
- # Get the YARD CodeObject at the specified path.
8
- #
9
- # @param path [String]
10
- # @return [YARD::CodeObjects::Base]
11
- def code_object_at path
12
- code_object_map[path]
13
- end
14
-
15
- # @return [Array<String>]
16
- def code_object_paths
17
- code_object_map.keys
18
- end
19
-
20
- # @param store [ApiMap::Store] ApiMap pin store
21
- # @return [void]
22
- def rake_yard store
23
- YARD::Registry.clear
24
- code_object_map.clear
25
- store.namespace_pins.each do |pin|
26
- next if pin.path.nil? || pin.path.empty?
27
- if pin.code_object
28
- code_object_map[pin.path] ||= pin.code_object
29
- next
30
- end
31
- if pin.type == :class
32
- code_object_map[pin.path] ||= YARD::CodeObjects::ClassObject.new(root_code_object, pin.path) { |obj|
33
- next if pin.location.nil? || pin.location.filename.nil?
34
- obj.add_file(pin.location.filename, pin.location.range.start.line, !pin.comments.empty?)
35
- }
36
- else
37
- code_object_map[pin.path] ||= YARD::CodeObjects::ModuleObject.new(root_code_object, pin.path) { |obj|
38
- next if pin.location.nil? || pin.location.filename.nil?
39
- obj.add_file(pin.location.filename, pin.location.range.start.line, !pin.comments.empty?)
40
- }
41
- end
42
- code_object_map[pin.path].docstring = pin.docstring
43
- store.get_includes(pin.path).each do |ref|
44
- code_object_map[pin.path].instance_mixins.push code_object_map[ref] unless code_object_map[ref].nil? or code_object_map[pin.path].nil?
45
- end
46
- store.get_extends(pin.path).each do |ref|
47
- code_object_map[pin.path].instance_mixins.push code_object_map[ref] unless code_object_map[ref].nil? or code_object_map[pin.path].nil?
48
- code_object_map[pin.path].class_mixins.push code_object_map[ref] unless code_object_map[ref].nil? or code_object_map[pin.path].nil?
49
- end
50
- end
51
- store.method_pins.each do |pin|
52
- if pin.code_object
53
- code_object_map[pin.path] ||= pin.code_object
54
- next
55
- end
56
- code_object_map[pin.path] ||= YARD::CodeObjects::MethodObject.new(code_object_at(pin.namespace), pin.name, pin.scope) { |obj|
57
- next if pin.location.nil? || pin.location.filename.nil?
58
- obj.add_file pin.location.filename, pin.location.range.start.line
59
- }
60
- code_object_map[pin.path].docstring = pin.docstring
61
- code_object_map[pin.path].visibility = pin.visibility || :public
62
- code_object_map[pin.path].parameters = pin.parameters.map do |p|
63
- [p.name, p.asgn_code]
64
- end
65
- end
66
- end
67
-
68
- private
69
-
70
- # @return [Hash{String => YARD::CodeObjects::Base}]
71
- def code_object_map
72
- @code_object_map ||= {}
73
- end
74
-
75
- # @return [YARD::CodeObjects::RootObject]
76
- def root_code_object
77
- @root_code_object ||= YARD::CodeObjects::RootObject.new(nil, 'root')
78
- end
79
- end
80
- end
81
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ class ApiMap
5
+ module SourceToYard
6
+
7
+ # Get the YARD CodeObject at the specified path.
8
+ #
9
+ # @param path [String]
10
+ # @return [YARD::CodeObjects::Base]
11
+ def code_object_at path
12
+ code_object_map[path]
13
+ end
14
+
15
+ # @return [Array<String>]
16
+ def code_object_paths
17
+ code_object_map.keys
18
+ end
19
+
20
+ # @param store [ApiMap::Store] ApiMap pin store
21
+ # @return [void]
22
+ def rake_yard store
23
+ YARD::Registry.clear
24
+ code_object_map.clear
25
+ store.namespace_pins.each do |pin|
26
+ next if pin.path.nil? || pin.path.empty?
27
+ if pin.code_object
28
+ code_object_map[pin.path] ||= pin.code_object
29
+ next
30
+ end
31
+ if pin.type == :class
32
+ code_object_map[pin.path] ||= YARD::CodeObjects::ClassObject.new(root_code_object, pin.path) { |obj|
33
+ next if pin.location.nil? || pin.location.filename.nil?
34
+ obj.add_file(pin.location.filename, pin.location.range.start.line, !pin.comments.empty?)
35
+ }
36
+ else
37
+ code_object_map[pin.path] ||= YARD::CodeObjects::ModuleObject.new(root_code_object, pin.path) { |obj|
38
+ next if pin.location.nil? || pin.location.filename.nil?
39
+ obj.add_file(pin.location.filename, pin.location.range.start.line, !pin.comments.empty?)
40
+ }
41
+ end
42
+ code_object_map[pin.path].docstring = pin.docstring
43
+ store.get_includes(pin.path).each do |ref|
44
+ code_object_map[pin.path].instance_mixins.push code_object_map[ref] unless code_object_map[ref].nil? or code_object_map[pin.path].nil?
45
+ end
46
+ store.get_extends(pin.path).each do |ref|
47
+ code_object_map[pin.path].instance_mixins.push code_object_map[ref] unless code_object_map[ref].nil? or code_object_map[pin.path].nil?
48
+ code_object_map[pin.path].class_mixins.push code_object_map[ref] unless code_object_map[ref].nil? or code_object_map[pin.path].nil?
49
+ end
50
+ end
51
+ store.method_pins.each do |pin|
52
+ if pin.code_object
53
+ code_object_map[pin.path] ||= pin.code_object
54
+ next
55
+ end
56
+ code_object_map[pin.path] ||= YARD::CodeObjects::MethodObject.new(code_object_at(pin.namespace), pin.name, pin.scope) { |obj|
57
+ next if pin.location.nil? || pin.location.filename.nil?
58
+ obj.add_file pin.location.filename, pin.location.range.start.line
59
+ }
60
+ code_object_map[pin.path].docstring = pin.docstring
61
+ code_object_map[pin.path].visibility = pin.visibility || :public
62
+ code_object_map[pin.path].parameters = pin.parameters.map do |p|
63
+ [p.name, p.asgn_code]
64
+ end
65
+ end
66
+ end
67
+
68
+ private
69
+
70
+ # @return [Hash{String => YARD::CodeObjects::Base}]
71
+ def code_object_map
72
+ @code_object_map ||= {}
73
+ end
74
+
75
+ # @return [YARD::CodeObjects::RootObject]
76
+ def root_code_object
77
+ @root_code_object ||= YARD::CodeObjects::RootObject.new(nil, 'root')
78
+ end
79
+ end
80
+ end
81
+ end