solargraph 0.54.4 → 0.58.3

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 (238) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.github/workflows/linting.yml +127 -0
  4. data/.github/workflows/plugins.yml +185 -6
  5. data/.github/workflows/rspec.yml +55 -5
  6. data/.github/workflows/typecheck.yml +8 -3
  7. data/.gitignore +8 -0
  8. data/.overcommit.yml +72 -0
  9. data/.rspec +1 -0
  10. data/.rubocop.yml +66 -0
  11. data/.rubocop_todo.yml +1279 -0
  12. data/.yardopts +1 -0
  13. data/CHANGELOG.md +143 -0
  14. data/README.md +20 -6
  15. data/Rakefile +125 -13
  16. data/bin/solargraph +3 -0
  17. data/lib/solargraph/api_map/cache.rb +110 -109
  18. data/lib/solargraph/api_map/constants.rb +279 -0
  19. data/lib/solargraph/api_map/index.rb +193 -167
  20. data/lib/solargraph/api_map/source_to_yard.rb +97 -88
  21. data/lib/solargraph/api_map/store.rb +384 -241
  22. data/lib/solargraph/api_map.rb +945 -875
  23. data/lib/solargraph/bench.rb +45 -28
  24. data/lib/solargraph/complex_type/type_methods.rb +228 -217
  25. data/lib/solargraph/complex_type/unique_type.rb +482 -386
  26. data/lib/solargraph/complex_type.rb +444 -394
  27. data/lib/solargraph/convention/active_support_concern.rb +111 -0
  28. data/lib/solargraph/convention/base.rb +20 -3
  29. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -0
  30. data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -0
  31. data/lib/solargraph/convention/data_definition.rb +105 -0
  32. data/lib/solargraph/convention/gemfile.rb +15 -15
  33. data/lib/solargraph/convention/gemspec.rb +23 -22
  34. data/lib/solargraph/convention/rakefile.rb +17 -17
  35. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -0
  36. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -0
  37. data/lib/solargraph/convention/struct_definition.rb +164 -0
  38. data/lib/solargraph/convention.rb +78 -47
  39. data/lib/solargraph/converters/dd.rb +17 -17
  40. data/lib/solargraph/converters/dl.rb +15 -15
  41. data/lib/solargraph/converters/dt.rb +15 -15
  42. data/lib/solargraph/converters/misc.rb +1 -1
  43. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  44. data/lib/solargraph/diagnostics/rubocop.rb +118 -113
  45. data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -66
  46. data/lib/solargraph/diagnostics/type_check.rb +55 -55
  47. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  48. data/lib/solargraph/doc_map.rb +439 -188
  49. data/lib/solargraph/environ.rb +9 -2
  50. data/lib/solargraph/equality.rb +34 -33
  51. data/lib/solargraph/gem_pins.rb +98 -72
  52. data/lib/solargraph/language_server/error_codes.rb +20 -20
  53. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  54. data/lib/solargraph/language_server/host/dispatch.rb +130 -128
  55. data/lib/solargraph/language_server/host/message_worker.rb +112 -106
  56. data/lib/solargraph/language_server/host/sources.rb +99 -99
  57. data/lib/solargraph/language_server/host.rb +878 -861
  58. data/lib/solargraph/language_server/message/base.rb +97 -96
  59. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  60. data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
  61. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -112
  62. data/lib/solargraph/language_server/message/extended/document.rb +23 -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 -19
  65. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  66. data/lib/solargraph/language_server/message/initialize.rb +191 -191
  67. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
  68. data/lib/solargraph/language_server/message/text_document/definition.rb +40 -38
  69. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  70. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
  71. data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -131
  72. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
  73. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  74. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  75. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  76. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
  77. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -24
  78. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
  79. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
  80. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -24
  81. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  82. data/lib/solargraph/language_server/message.rb +94 -94
  83. data/lib/solargraph/language_server/progress.rb +8 -0
  84. data/lib/solargraph/language_server/request.rb +27 -24
  85. data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
  86. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  87. data/lib/solargraph/library.rb +683 -662
  88. data/lib/solargraph/location.rb +82 -58
  89. data/lib/solargraph/logging.rb +37 -27
  90. data/lib/solargraph/page.rb +92 -89
  91. data/lib/solargraph/parser/comment_ripper.rb +69 -56
  92. data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -0
  93. data/lib/solargraph/parser/node_processor/base.rb +92 -87
  94. data/lib/solargraph/parser/node_processor.rb +62 -45
  95. data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -157
  96. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -18
  97. data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -164
  98. data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -495
  99. data/lib/solargraph/parser/parser_gem/node_processors/alias_node.rb +2 -1
  100. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -0
  101. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -57
  102. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
  103. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -43
  104. data/lib/solargraph/parser/parser_gem/node_processors/casgn_node.rb +2 -1
  105. data/lib/solargraph/parser/parser_gem/node_processors/cvasgn_node.rb +2 -1
  106. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -50
  107. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -36
  108. data/lib/solargraph/parser/parser_gem/node_processors/gvasgn_node.rb +2 -1
  109. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -0
  110. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -38
  111. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -28
  112. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -53
  113. data/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb +8 -7
  114. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -0
  115. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -16
  116. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -36
  117. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -42
  118. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -259
  119. data/lib/solargraph/parser/parser_gem/node_processors/sym_node.rb +3 -1
  120. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -0
  121. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -0
  122. data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -56
  123. data/lib/solargraph/parser/parser_gem.rb +12 -12
  124. data/lib/solargraph/parser/region.rb +69 -66
  125. data/lib/solargraph/parser/snippet.rb +17 -15
  126. data/lib/solargraph/parser.rb +23 -22
  127. data/lib/solargraph/pin/base.rb +729 -378
  128. data/lib/solargraph/pin/base_variable.rb +126 -118
  129. data/lib/solargraph/pin/block.rb +104 -101
  130. data/lib/solargraph/pin/breakable.rb +9 -0
  131. data/lib/solargraph/pin/callable.rb +231 -147
  132. data/lib/solargraph/pin/closure.rb +72 -57
  133. data/lib/solargraph/pin/common.rb +79 -70
  134. data/lib/solargraph/pin/constant.rb +45 -43
  135. data/lib/solargraph/pin/conversions.rb +123 -123
  136. data/lib/solargraph/pin/delegated_method.rb +120 -101
  137. data/lib/solargraph/pin/documenting.rb +114 -98
  138. data/lib/solargraph/pin/instance_variable.rb +34 -34
  139. data/lib/solargraph/pin/keyword.rb +20 -15
  140. data/lib/solargraph/pin/local_variable.rb +75 -67
  141. data/lib/solargraph/pin/method.rb +672 -527
  142. data/lib/solargraph/pin/method_alias.rb +34 -31
  143. data/lib/solargraph/pin/namespace.rb +115 -107
  144. data/lib/solargraph/pin/parameter.rb +275 -212
  145. data/lib/solargraph/pin/proxy_type.rb +39 -29
  146. data/lib/solargraph/pin/reference/override.rb +47 -29
  147. data/lib/solargraph/pin/reference/require.rb +2 -2
  148. data/lib/solargraph/pin/reference/superclass.rb +15 -10
  149. data/lib/solargraph/pin/reference.rb +39 -22
  150. data/lib/solargraph/pin/search.rb +61 -56
  151. data/lib/solargraph/pin/signature.rb +61 -17
  152. data/lib/solargraph/pin/singleton.rb +1 -1
  153. data/lib/solargraph/pin/symbol.rb +53 -47
  154. data/lib/solargraph/pin/until.rb +18 -0
  155. data/lib/solargraph/pin/while.rb +18 -0
  156. data/lib/solargraph/pin.rb +44 -41
  157. data/lib/solargraph/pin_cache.rb +245 -0
  158. data/lib/solargraph/position.rb +132 -107
  159. data/lib/solargraph/range.rb +112 -98
  160. data/lib/solargraph/rbs_map/conversions.rb +823 -646
  161. data/lib/solargraph/rbs_map/core_fills.rb +84 -50
  162. data/lib/solargraph/rbs_map/core_map.rb +58 -28
  163. data/lib/solargraph/rbs_map/stdlib_map.rb +43 -33
  164. data/lib/solargraph/rbs_map.rb +163 -93
  165. data/lib/solargraph/server_methods.rb +16 -16
  166. data/lib/solargraph/shell.rb +363 -269
  167. data/lib/solargraph/source/chain/array.rb +37 -33
  168. data/lib/solargraph/source/chain/block_symbol.rb +1 -1
  169. data/lib/solargraph/source/chain/block_variable.rb +1 -1
  170. data/lib/solargraph/source/chain/call.rb +337 -303
  171. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  172. data/lib/solargraph/source/chain/constant.rb +26 -89
  173. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  174. data/lib/solargraph/source/chain/hash.rb +34 -33
  175. data/lib/solargraph/source/chain/head.rb +1 -1
  176. data/lib/solargraph/source/chain/if.rb +28 -28
  177. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  178. data/lib/solargraph/source/chain/link.rb +109 -98
  179. data/lib/solargraph/source/chain/literal.rb +48 -28
  180. data/lib/solargraph/source/chain/or.rb +23 -23
  181. data/lib/solargraph/source/chain/q_call.rb +11 -11
  182. data/lib/solargraph/source/chain/variable.rb +13 -13
  183. data/lib/solargraph/source/chain/z_super.rb +30 -30
  184. data/lib/solargraph/source/chain.rb +291 -252
  185. data/lib/solargraph/source/change.rb +82 -82
  186. data/lib/solargraph/source/cursor.rb +166 -167
  187. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  188. data/lib/solargraph/source/source_chainer.rb +194 -194
  189. data/lib/solargraph/source/updater.rb +55 -55
  190. data/lib/solargraph/source.rb +498 -495
  191. data/lib/solargraph/source_map/clip.rb +226 -232
  192. data/lib/solargraph/source_map/data.rb +34 -30
  193. data/lib/solargraph/source_map/mapper.rb +259 -255
  194. data/lib/solargraph/source_map.rb +212 -217
  195. data/lib/solargraph/type_checker/checks.rb +124 -120
  196. data/lib/solargraph/type_checker/param_def.rb +37 -35
  197. data/lib/solargraph/type_checker/problem.rb +32 -32
  198. data/lib/solargraph/type_checker/rules.rb +84 -62
  199. data/lib/solargraph/type_checker.rb +814 -672
  200. data/lib/solargraph/version.rb +5 -5
  201. data/lib/solargraph/views/_method.erb +10 -10
  202. data/lib/solargraph/views/_namespace.erb +3 -3
  203. data/lib/solargraph/views/document.erb +10 -10
  204. data/lib/solargraph/workspace/config.rb +255 -239
  205. data/lib/solargraph/workspace/require_paths.rb +97 -0
  206. data/lib/solargraph/workspace.rb +220 -239
  207. data/lib/solargraph/yard_map/helpers.rb +44 -16
  208. data/lib/solargraph/yard_map/mapper/to_constant.rb +7 -5
  209. data/lib/solargraph/yard_map/mapper/to_method.rb +130 -94
  210. data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -28
  211. data/lib/solargraph/yard_map/mapper.rb +79 -78
  212. data/lib/solargraph/yard_map/to_method.rb +89 -86
  213. data/lib/solargraph/yard_tags.rb +20 -20
  214. data/lib/solargraph/yardoc.rb +87 -52
  215. data/lib/solargraph.rb +105 -72
  216. data/rbs/fills/bundler/0/bundler.rbs +4271 -0
  217. data/rbs/fills/open3/0/open3.rbs +172 -0
  218. data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
  219. data/rbs/fills/rubygems/0/errors.rbs +364 -0
  220. data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
  221. data/rbs/fills/rubygems/0/specification.rbs +1753 -0
  222. data/rbs/fills/tuple/tuple.rbs +149 -0
  223. data/rbs/shims/ast/0/node.rbs +5 -0
  224. data/rbs/shims/ast/2.4/.rbs_meta.yaml +9 -0
  225. data/rbs/shims/ast/2.4/ast.rbs +73 -0
  226. data/rbs/shims/parser/3.2.0.1/builders/default.rbs +195 -0
  227. data/rbs/shims/parser/3.2.0.1/manifest.yaml +7 -0
  228. data/rbs/shims/parser/3.2.0.1/parser.rbs +201 -0
  229. data/rbs/shims/parser/3.2.0.1/polyfill.rbs +4 -0
  230. data/rbs/shims/thor/1.2.0.1/.rbs_meta.yaml +9 -0
  231. data/rbs/shims/thor/1.2.0.1/manifest.yaml +7 -0
  232. data/rbs/shims/thor/1.2.0.1/thor.rbs +17 -0
  233. data/rbs_collection.yaml +19 -0
  234. data/solargraph.gemspec +27 -5
  235. metadata +215 -18
  236. data/lib/.rubocop.yml +0 -22
  237. data/lib/solargraph/cache.rb +0 -77
  238. data/lib/solargraph/parser/node_methods.rb +0 -83
@@ -1,20 +1,20 @@
1
- # frozen_string_literal: true
2
-
3
- require 'yard'
4
-
5
- # Change YARD log IO to avoid sending unexpected messages to STDOUT
6
- YARD::Logger.instance.io = File.new(File::NULL, 'w')
7
-
8
- module Solargraph
9
- # A placeholder for the @!domain directive. It doesn't need to do anything
10
- # for yardocs. It's only used for Solargraph API maps.
11
- class DomainDirective < YARD::Tags::Directive
12
- def call; end
13
- end
14
- end
15
-
16
- # Define a @type tag for documenting variables
17
- YARD::Tags::Library.define_tag("Type", :type, :with_types_and_name)
18
-
19
- # Define an @!override directive for overriding method tags
20
- YARD::Tags::Library.define_directive("override", :with_name, Solargraph::DomainDirective)
1
+ # frozen_string_literal: true
2
+
3
+ require 'yard'
4
+
5
+ # Change YARD log IO to avoid sending unexpected messages to STDOUT
6
+ YARD::Logger.instance.io = File.new(File::NULL, 'w')
7
+
8
+ module Solargraph
9
+ # A placeholder for the @!domain directive. It doesn't need to do anything
10
+ # for yardocs. It's only used for Solargraph API maps.
11
+ class DomainDirective < YARD::Tags::Directive
12
+ def call; end
13
+ end
14
+ end
15
+
16
+ # Define a @type tag for documenting variables
17
+ YARD::Tags::Library.define_tag("Type", :type, :with_types_and_name)
18
+
19
+ # Define an @!override directive for overriding method tags
20
+ YARD::Tags::Library.define_directive("override", :with_name, Solargraph::DomainDirective)
@@ -1,52 +1,87 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- # Methods for caching and loading YARD documentation for gems.
5
- #
6
- module Yardoc
7
- module_function
8
-
9
- # Build and cache a gem's yardoc and return the path. If the cache already
10
- # exists, do nothing and return the path.
11
- #
12
- # @param gemspec [Gem::Specification]
13
- # @return [String] The path to the cached yardoc.
14
- def cache(gemspec)
15
- path = path_for(gemspec)
16
- return path if cached?(gemspec)
17
-
18
- Solargraph.logger.info "Caching yardoc for #{gemspec.name} #{gemspec.version}"
19
- Dir.chdir gemspec.gem_dir do
20
- `yardoc --db #{path} --no-output --plugin solargraph`
21
- end
22
- path
23
- end
24
-
25
- # True if the gem yardoc is cached.
26
- #
27
- # @param gemspec [Gem::Specification]
28
- def cached?(gemspec)
29
- yardoc = File.join(path_for(gemspec), 'complete')
30
- File.exist?(yardoc)
31
- end
32
-
33
- # Get the absolute path for a cached gem yardoc.
34
- #
35
- # @param gemspec [Gem::Specification]
36
- # @return [String]
37
- def path_for(gemspec)
38
- File.join(Solargraph::Cache.work_dir, 'gems', "#{gemspec.name}-#{gemspec.version}.yardoc")
39
- end
40
-
41
- # Load a gem's yardoc and return its code objects.
42
- #
43
- # @note This method modifies the global YARD registry.
44
- #
45
- # @param gemspec [Gem::Specification]
46
- # @return [Array<YARD::CodeObjects::Base>]
47
- def load!(gemspec)
48
- YARD::Registry.load! path_for(gemspec)
49
- YARD::Registry.all
50
- end
51
- end
52
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'open3'
4
+
5
+ module Solargraph
6
+ # Methods for caching and loading YARD documentation for gems.
7
+ #
8
+ module Yardoc
9
+ module_function
10
+
11
+ # Build and cache a gem's yardoc and return the path. If the cache already
12
+ # exists, do nothing and return the path.
13
+ #
14
+ # @param yard_plugins [Array<String>] The names of YARD plugins to use.
15
+ # @param gemspec [Gem::Specification]
16
+ # @return [String] The path to the cached yardoc.
17
+ def cache(yard_plugins, gemspec)
18
+ path = PinCache.yardoc_path gemspec
19
+ return path if cached?(gemspec)
20
+
21
+ unless Dir.exist? gemspec.gem_dir
22
+ # Can happen in at least some (old?) RubyGems versions when we
23
+ # have a gemspec describing a standard library like bundler.
24
+ #
25
+ # https://github.com/apiology/solargraph/actions/runs/17650140201/job/50158676842?pr=10
26
+ Solargraph.logger.info { "Bad info from gemspec - #{gemspec.gem_dir} does not exist" }
27
+ return path
28
+ end
29
+
30
+ Solargraph.logger.info "Caching yardoc for #{gemspec.name} #{gemspec.version}"
31
+ cmd = "yardoc --db #{path} --no-output --plugin solargraph"
32
+ yard_plugins.each { |plugin| cmd << " --plugin #{plugin}" }
33
+ Solargraph.logger.debug { "Running: #{cmd}" }
34
+ # @todo set these up to run in parallel
35
+ stdout_and_stderr_str, status = Open3.capture2e(current_bundle_env_tweaks, cmd, chdir: gemspec.gem_dir)
36
+ unless status.success?
37
+ Solargraph.logger.warn { "YARD failed running #{cmd.inspect} in #{gemspec.gem_dir}" }
38
+ Solargraph.logger.info stdout_and_stderr_str
39
+ end
40
+ path
41
+ end
42
+
43
+ # True if the gem yardoc is cached.
44
+ #
45
+ # @param gemspec [Gem::Specification]
46
+ def cached?(gemspec)
47
+ yardoc = File.join(PinCache.yardoc_path(gemspec), 'complete')
48
+ File.exist?(yardoc)
49
+ end
50
+
51
+ # True if another process is currently building the yardoc cache.
52
+ #
53
+ # @param gemspec [Gem::Specification]
54
+ def processing?(gemspec)
55
+ yardoc = File.join(PinCache.yardoc_path(gemspec), 'processing')
56
+ File.exist?(yardoc)
57
+ end
58
+
59
+ # Load a gem's yardoc and return its code objects.
60
+ #
61
+ # @note This method modifies the global YARD registry.
62
+ #
63
+ # @param gemspec [Gem::Specification]
64
+ # @return [Array<YARD::CodeObjects::Base>]
65
+ def load!(gemspec)
66
+ YARD::Registry.load! PinCache.yardoc_path gemspec
67
+ YARD::Registry.all
68
+ end
69
+
70
+ # If the BUNDLE_GEMFILE environment variable is set, we need to
71
+ # make sure it's an absolute path, as we'll be changing
72
+ # directories.
73
+ #
74
+ # 'bundle exec' sets an absolute path here, but at least the
75
+ # overcommit gem does not, breaking on-the-fly documention with a
76
+ # spawned yardoc command from our current bundle
77
+ #
78
+ # @return [Hash{String => String}] a hash of environment variables to override
79
+ def current_bundle_env_tweaks
80
+ tweaks = {}
81
+ if ENV['BUNDLE_GEMFILE'] && !ENV['BUNDLE_GEMFILE'].empty?
82
+ tweaks['BUNDLE_GEMFILE'] = File.expand_path(ENV['BUNDLE_GEMFILE'])
83
+ end
84
+ tweaks
85
+ end
86
+ end
87
+ end
data/lib/solargraph.rb CHANGED
@@ -1,72 +1,105 @@
1
- # frozen_string_literal: true
2
-
3
- Encoding.default_external = 'UTF-8'
4
-
5
- require 'set'
6
- require 'yard-solargraph'
7
- require 'solargraph/yard_tags'
8
- require 'solargraph/version'
9
-
10
- # The top-level namespace for the Solargraph code mapping, documentation,
11
- # static analysis, and language server libraries.
12
- #
13
- module Solargraph
14
- class InvalidOffsetError < RangeError; end
15
- class DiagnosticsError < RuntimeError; end
16
- class FileNotFoundError < RuntimeError; end
17
- class SourceNotAvailableError < StandardError; end
18
- class ComplexTypeError < StandardError; end
19
- class WorkspaceTooLargeError < RuntimeError; end
20
- class BundleNotFoundError < StandardError; end
21
- class InvalidRubocopVersionError < RuntimeError; end
22
-
23
- autoload :Position, 'solargraph/position'
24
- autoload :Range, 'solargraph/range'
25
- autoload :Location, 'solargraph/location'
26
- autoload :Shell, 'solargraph/shell'
27
- autoload :Source, 'solargraph/source'
28
- autoload :SourceMap, 'solargraph/source_map'
29
- autoload :ApiMap, 'solargraph/api_map'
30
- autoload :Yardoc, 'solargraph/yardoc'
31
- autoload :YardMap, 'solargraph/yard_map'
32
- autoload :Pin, 'solargraph/pin'
33
- autoload :DocMap, 'solargraph/doc_map'
34
- autoload :ServerMethods, 'solargraph/server_methods'
35
- autoload :LanguageServer, 'solargraph/language_server'
36
- autoload :Workspace, 'solargraph/workspace'
37
- autoload :Page, 'solargraph/page'
38
- autoload :Library, 'solargraph/library'
39
- autoload :Diagnostics, 'solargraph/diagnostics'
40
- autoload :ComplexType, 'solargraph/complex_type'
41
- autoload :Bench, 'solargraph/bench'
42
- autoload :Logging, 'solargraph/logging'
43
- autoload :TypeChecker, 'solargraph/type_checker'
44
- autoload :Environ, 'solargraph/environ'
45
- autoload :Equality, 'solargraph/equality'
46
- autoload :Convention, 'solargraph/convention'
47
- autoload :Parser, 'solargraph/parser'
48
- autoload :RbsMap, 'solargraph/rbs_map'
49
- autoload :GemPins, 'solargraph/gem_pins'
50
- autoload :Cache, 'solargraph/cache'
51
-
52
- dir = File.dirname(__FILE__)
53
- VIEWS_PATH = File.join(dir, 'solargraph', 'views')
54
-
55
- # A convenience method for Solargraph::Logging.logger.
56
- #
57
- # @return [Logger]
58
- def self.logger
59
- Solargraph::Logging.logger
60
- end
61
-
62
- # A helper method that runs Bundler.with_unbundled_env or falls back to
63
- # Bundler.with_clean_env for earlier versions of Bundler.
64
- def self.with_clean_env &block
65
- meth = if Bundler.respond_to?(:with_original_env)
66
- :with_original_env
67
- else
68
- :with_clean_env
69
- end
70
- Bundler.send meth, &block
71
- end
72
- end
1
+ # frozen_string_literal: true
2
+
3
+ Encoding.default_external = 'UTF-8'
4
+
5
+ require 'bundler'
6
+ require 'set'
7
+ require 'yard-solargraph'
8
+ require 'solargraph/yard_tags'
9
+ require 'solargraph/version'
10
+
11
+ # The top-level namespace for the Solargraph code mapping, documentation,
12
+ # static analysis, and language server libraries.
13
+ #
14
+ module Solargraph
15
+ class InvalidOffsetError < RangeError; end
16
+ class DiagnosticsError < RuntimeError; end
17
+ class FileNotFoundError < RuntimeError; end
18
+ class SourceNotAvailableError < StandardError; end
19
+ class ComplexTypeError < StandardError; end
20
+ class WorkspaceTooLargeError < RuntimeError; end
21
+ class BundleNotFoundError < StandardError; end
22
+ class InvalidRubocopVersionError < RuntimeError; end
23
+
24
+ autoload :Position, 'solargraph/position'
25
+ autoload :Range, 'solargraph/range'
26
+ autoload :Location, 'solargraph/location'
27
+ autoload :Shell, 'solargraph/shell'
28
+ autoload :Source, 'solargraph/source'
29
+ autoload :SourceMap, 'solargraph/source_map'
30
+ autoload :ApiMap, 'solargraph/api_map'
31
+ autoload :Yardoc, 'solargraph/yardoc'
32
+ autoload :YardMap, 'solargraph/yard_map'
33
+ autoload :Pin, 'solargraph/pin'
34
+ autoload :DocMap, 'solargraph/doc_map'
35
+ autoload :ServerMethods, 'solargraph/server_methods'
36
+ autoload :LanguageServer, 'solargraph/language_server'
37
+ autoload :Workspace, 'solargraph/workspace'
38
+ autoload :Page, 'solargraph/page'
39
+ autoload :Library, 'solargraph/library'
40
+ autoload :Diagnostics, 'solargraph/diagnostics'
41
+ autoload :ComplexType, 'solargraph/complex_type'
42
+ autoload :Bench, 'solargraph/bench'
43
+ autoload :Logging, 'solargraph/logging'
44
+ autoload :TypeChecker, 'solargraph/type_checker'
45
+ autoload :Environ, 'solargraph/environ'
46
+ autoload :Equality, 'solargraph/equality'
47
+ autoload :Convention, 'solargraph/convention'
48
+ autoload :Parser, 'solargraph/parser'
49
+ autoload :RbsMap, 'solargraph/rbs_map'
50
+ autoload :GemPins, 'solargraph/gem_pins'
51
+ autoload :PinCache, 'solargraph/pin_cache'
52
+
53
+ dir = File.dirname(__FILE__)
54
+ VIEWS_PATH = File.join(dir, 'solargraph', 'views')
55
+
56
+ CHDIR_MUTEX = Mutex.new
57
+
58
+ # @param type [Symbol] Type of assert.
59
+ def self.asserts_on?(type)
60
+ if ENV['SOLARGRAPH_ASSERTS'].nil? || ENV['SOLARGRAPH_ASSERTS'].empty?
61
+ false
62
+ elsif ENV['SOLARGRAPH_ASSERTS'] == 'on'
63
+ true
64
+ else
65
+ logger.warn "Unrecognized SOLARGRAPH_ASSERTS value: #{ENV['SOLARGRAPH_ASSERTS']}"
66
+ false
67
+ end
68
+ end
69
+
70
+ # @param type [Symbol] The type of assertion to perform.
71
+ # @param msg [String, nil] An optional message to log
72
+ # @param block [Proc] A block that returns a message to log
73
+ # @return [void]
74
+ def self.assert_or_log(type, msg = nil, &block)
75
+ raise (msg || block.call) if asserts_on?(type) && ![:combine_with_visibility].include?(type)
76
+ logger.info msg, &block
77
+ end
78
+
79
+ # A convenience method for Solargraph::Logging.logger.
80
+ #
81
+ # @return [Logger]
82
+ def self.logger
83
+ Solargraph::Logging.logger
84
+ end
85
+
86
+ # A helper method that runs Bundler.with_unbundled_env or falls back to
87
+ # Bundler.with_clean_env for earlier versions of Bundler.
88
+ #
89
+ # @generic T
90
+ # @yieldreturn [generic<T>]
91
+ # @sg-ignore dynamic call, but both functions behave the same
92
+ # @return [generic<T>]
93
+ def self.with_clean_env &block
94
+ meth = if Bundler.respond_to?(:with_original_env)
95
+ :with_original_env
96
+ else
97
+ :with_clean_env
98
+ end
99
+ Bundler.send meth, &block
100
+ end
101
+ end
102
+
103
+ # Ensure that ParserGem node processors are properly loaded to avoid conflicts
104
+ # with Convention node processors
105
+ require 'solargraph/parser/parser_gem/node_processors'