solargraph 0.57.0 → 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 (216) hide show
  1. checksums.yaml +4 -4
  2. data/.gitattributes +2 -0
  3. data/.github/workflows/linting.yml +4 -2
  4. data/.github/workflows/plugins.yml +63 -28
  5. data/.github/workflows/rspec.yml +19 -4
  6. data/.github/workflows/typecheck.yml +2 -2
  7. data/.gitignore +1 -0
  8. data/.rubocop.yml +1 -1
  9. data/.rubocop_todo.yml +90 -1438
  10. data/CHANGELOG.md +39 -0
  11. data/Rakefile +1 -1
  12. data/bin/solargraph +3 -0
  13. data/lib/solargraph/api_map/cache.rb +110 -110
  14. data/lib/solargraph/api_map/constants.rb +279 -218
  15. data/lib/solargraph/api_map/index.rb +193 -169
  16. data/lib/solargraph/api_map/source_to_yard.rb +97 -94
  17. data/lib/solargraph/api_map/store.rb +384 -374
  18. data/lib/solargraph/api_map.rb +945 -951
  19. data/lib/solargraph/bench.rb +45 -45
  20. data/lib/solargraph/complex_type/type_methods.rb +228 -223
  21. data/lib/solargraph/complex_type/unique_type.rb +482 -475
  22. data/lib/solargraph/complex_type.rb +444 -427
  23. data/lib/solargraph/convention/active_support_concern.rb +1 -1
  24. data/lib/solargraph/convention/data_definition/data_assignment_node.rb +61 -61
  25. data/lib/solargraph/convention/data_definition/data_definition_node.rb +91 -91
  26. data/lib/solargraph/convention/data_definition.rb +105 -105
  27. data/lib/solargraph/convention/gemfile.rb +15 -15
  28. data/lib/solargraph/convention/gemspec.rb +23 -23
  29. data/lib/solargraph/convention/rakefile.rb +17 -17
  30. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +61 -61
  31. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +102 -102
  32. data/lib/solargraph/convention/struct_definition.rb +164 -164
  33. data/lib/solargraph/convention.rb +78 -78
  34. data/lib/solargraph/converters/dd.rb +17 -17
  35. data/lib/solargraph/converters/dl.rb +15 -15
  36. data/lib/solargraph/converters/dt.rb +15 -15
  37. data/lib/solargraph/converters/misc.rb +1 -1
  38. data/lib/solargraph/diagnostics/require_not_found.rb +53 -53
  39. data/lib/solargraph/diagnostics/rubocop.rb +118 -118
  40. data/lib/solargraph/diagnostics/rubocop_helpers.rb +68 -66
  41. data/lib/solargraph/diagnostics/type_check.rb +55 -55
  42. data/lib/solargraph/diagnostics/update_errors.rb +41 -41
  43. data/lib/solargraph/doc_map.rb +439 -436
  44. data/lib/solargraph/environ.rb +1 -1
  45. data/lib/solargraph/equality.rb +34 -33
  46. data/lib/solargraph/gem_pins.rb +98 -94
  47. data/lib/solargraph/language_server/error_codes.rb +20 -20
  48. data/lib/solargraph/language_server/host/diagnoser.rb +89 -89
  49. data/lib/solargraph/language_server/host/dispatch.rb +130 -130
  50. data/lib/solargraph/language_server/host/message_worker.rb +112 -112
  51. data/lib/solargraph/language_server/host/sources.rb +99 -99
  52. data/lib/solargraph/language_server/host.rb +878 -872
  53. data/lib/solargraph/language_server/message/base.rb +97 -97
  54. data/lib/solargraph/language_server/message/client/register_capability.rb +15 -15
  55. data/lib/solargraph/language_server/message/completion_item/resolve.rb +60 -60
  56. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +114 -114
  57. data/lib/solargraph/language_server/message/extended/document.rb +23 -23
  58. data/lib/solargraph/language_server/message/extended/document_gems.rb +32 -32
  59. data/lib/solargraph/language_server/message/extended/download_core.rb +19 -19
  60. data/lib/solargraph/language_server/message/extended/search.rb +20 -20
  61. data/lib/solargraph/language_server/message/initialize.rb +191 -191
  62. data/lib/solargraph/language_server/message/text_document/completion.rb +56 -56
  63. data/lib/solargraph/language_server/message/text_document/definition.rb +40 -40
  64. data/lib/solargraph/language_server/message/text_document/document_highlight.rb +16 -16
  65. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +26 -26
  66. data/lib/solargraph/language_server/message/text_document/formatting.rb +148 -145
  67. data/lib/solargraph/language_server/message/text_document/hover.rb +58 -58
  68. data/lib/solargraph/language_server/message/text_document/prepare_rename.rb +11 -11
  69. data/lib/solargraph/language_server/message/text_document/references.rb +16 -16
  70. data/lib/solargraph/language_server/message/text_document/rename.rb +19 -19
  71. data/lib/solargraph/language_server/message/text_document/signature_help.rb +24 -24
  72. data/lib/solargraph/language_server/message/text_document/type_definition.rb +25 -25
  73. data/lib/solargraph/language_server/message/workspace/did_change_configuration.rb +35 -35
  74. data/lib/solargraph/language_server/message/workspace/did_change_watched_files.rb +40 -40
  75. data/lib/solargraph/language_server/message/workspace/did_change_workspace_folders.rb +26 -26
  76. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +23 -23
  77. data/lib/solargraph/language_server/message.rb +94 -94
  78. data/lib/solargraph/language_server/progress.rb +1 -1
  79. data/lib/solargraph/language_server/request.rb +27 -25
  80. data/lib/solargraph/language_server/transport/data_reader.rb +74 -74
  81. data/lib/solargraph/language_server/uri_helpers.rb +49 -49
  82. data/lib/solargraph/library.rb +683 -683
  83. data/lib/solargraph/location.rb +82 -81
  84. data/lib/solargraph/logging.rb +37 -37
  85. data/lib/solargraph/page.rb +92 -93
  86. data/lib/solargraph/parser/comment_ripper.rb +69 -69
  87. data/lib/solargraph/parser/flow_sensitive_typing.rb +255 -255
  88. data/lib/solargraph/parser/node_processor/base.rb +92 -92
  89. data/lib/solargraph/parser/node_processor.rb +62 -62
  90. data/lib/solargraph/parser/parser_gem/class_methods.rb +149 -159
  91. data/lib/solargraph/parser/parser_gem/flawed_builder.rb +19 -19
  92. data/lib/solargraph/parser/parser_gem/node_chainer.rb +166 -166
  93. data/lib/solargraph/parser/parser_gem/node_methods.rb +486 -499
  94. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -21
  95. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +59 -59
  96. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +15 -15
  97. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
  98. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +53 -53
  99. data/lib/solargraph/parser/parser_gem/node_processors/defs_node.rb +37 -37
  100. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +23 -23
  101. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +40 -40
  102. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +29 -29
  103. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +59 -59
  104. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -42
  105. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
  106. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +38 -38
  107. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +52 -43
  108. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +291 -292
  109. data/lib/solargraph/parser/parser_gem/node_processors/until_node.rb +29 -29
  110. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +29 -29
  111. data/lib/solargraph/parser/parser_gem/node_processors.rb +70 -70
  112. data/lib/solargraph/parser/parser_gem.rb +12 -12
  113. data/lib/solargraph/parser/region.rb +69 -69
  114. data/lib/solargraph/parser/snippet.rb +17 -17
  115. data/lib/solargraph/parser.rb +23 -23
  116. data/lib/solargraph/pin/base.rb +729 -708
  117. data/lib/solargraph/pin/base_variable.rb +126 -124
  118. data/lib/solargraph/pin/block.rb +104 -103
  119. data/lib/solargraph/pin/breakable.rb +9 -9
  120. data/lib/solargraph/pin/callable.rb +231 -227
  121. data/lib/solargraph/pin/closure.rb +72 -76
  122. data/lib/solargraph/pin/common.rb +79 -79
  123. data/lib/solargraph/pin/constant.rb +45 -45
  124. data/lib/solargraph/pin/conversions.rb +123 -123
  125. data/lib/solargraph/pin/delegated_method.rb +120 -121
  126. data/lib/solargraph/pin/documenting.rb +114 -114
  127. data/lib/solargraph/pin/instance_variable.rb +34 -34
  128. data/lib/solargraph/pin/keyword.rb +20 -20
  129. data/lib/solargraph/pin/local_variable.rb +75 -79
  130. data/lib/solargraph/pin/method.rb +672 -656
  131. data/lib/solargraph/pin/method_alias.rb +34 -34
  132. data/lib/solargraph/pin/namespace.rb +115 -115
  133. data/lib/solargraph/pin/parameter.rb +275 -271
  134. data/lib/solargraph/pin/proxy_type.rb +39 -36
  135. data/lib/solargraph/pin/reference/override.rb +47 -47
  136. data/lib/solargraph/pin/reference/superclass.rb +15 -15
  137. data/lib/solargraph/pin/reference.rb +39 -48
  138. data/lib/solargraph/pin/search.rb +61 -58
  139. data/lib/solargraph/pin/signature.rb +61 -61
  140. data/lib/solargraph/pin/symbol.rb +53 -53
  141. data/lib/solargraph/pin/until.rb +18 -18
  142. data/lib/solargraph/pin/while.rb +18 -18
  143. data/lib/solargraph/pin.rb +44 -44
  144. data/lib/solargraph/pin_cache.rb +245 -245
  145. data/lib/solargraph/position.rb +132 -118
  146. data/lib/solargraph/range.rb +112 -108
  147. data/lib/solargraph/rbs_map/conversions.rb +823 -802
  148. data/lib/solargraph/rbs_map/core_fills.rb +84 -66
  149. data/lib/solargraph/rbs_map/core_map.rb +58 -54
  150. data/lib/solargraph/rbs_map/stdlib_map.rb +43 -43
  151. data/lib/solargraph/rbs_map.rb +163 -163
  152. data/lib/solargraph/server_methods.rb +16 -16
  153. data/lib/solargraph/shell.rb +363 -271
  154. data/lib/solargraph/source/chain/array.rb +37 -37
  155. data/lib/solargraph/source/chain/call.rb +337 -333
  156. data/lib/solargraph/source/chain/class_variable.rb +13 -13
  157. data/lib/solargraph/source/chain/constant.rb +26 -89
  158. data/lib/solargraph/source/chain/global_variable.rb +13 -13
  159. data/lib/solargraph/source/chain/hash.rb +34 -34
  160. data/lib/solargraph/source/chain/if.rb +28 -28
  161. data/lib/solargraph/source/chain/instance_variable.rb +13 -13
  162. data/lib/solargraph/source/chain/link.rb +109 -109
  163. data/lib/solargraph/source/chain/literal.rb +48 -48
  164. data/lib/solargraph/source/chain/or.rb +23 -23
  165. data/lib/solargraph/source/chain/q_call.rb +11 -11
  166. data/lib/solargraph/source/chain/variable.rb +13 -13
  167. data/lib/solargraph/source/chain/z_super.rb +30 -30
  168. data/lib/solargraph/source/chain.rb +291 -289
  169. data/lib/solargraph/source/change.rb +82 -82
  170. data/lib/solargraph/source/cursor.rb +166 -166
  171. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  172. data/lib/solargraph/source/source_chainer.rb +194 -194
  173. data/lib/solargraph/source/updater.rb +55 -55
  174. data/lib/solargraph/source.rb +498 -498
  175. data/lib/solargraph/source_map/clip.rb +226 -234
  176. data/lib/solargraph/source_map/data.rb +34 -34
  177. data/lib/solargraph/source_map/mapper.rb +259 -261
  178. data/lib/solargraph/source_map.rb +212 -207
  179. data/lib/solargraph/type_checker/checks.rb +124 -124
  180. data/lib/solargraph/type_checker/param_def.rb +37 -37
  181. data/lib/solargraph/type_checker/problem.rb +32 -32
  182. data/lib/solargraph/type_checker/rules.rb +84 -70
  183. data/lib/solargraph/type_checker.rb +814 -752
  184. data/lib/solargraph/version.rb +5 -5
  185. data/lib/solargraph/workspace/config.rb +255 -237
  186. data/lib/solargraph/workspace/require_paths.rb +97 -98
  187. data/lib/solargraph/workspace.rb +220 -225
  188. data/lib/solargraph/yard_map/helpers.rb +44 -44
  189. data/lib/solargraph/yard_map/mapper/to_method.rb +130 -129
  190. data/lib/solargraph/yard_map/mapper/to_namespace.rb +31 -30
  191. data/lib/solargraph/yard_map/mapper.rb +79 -79
  192. data/lib/solargraph/yard_map/to_method.rb +89 -88
  193. data/lib/solargraph/yard_tags.rb +20 -20
  194. data/lib/solargraph/yardoc.rb +87 -64
  195. data/lib/solargraph.rb +105 -105
  196. data/rbs/fills/bundler/0/bundler.rbs +4271 -0
  197. data/rbs/fills/open3/0/open3.rbs +172 -0
  198. data/rbs/fills/rubygems/0/basic_specification.rbs +326 -0
  199. data/rbs/fills/rubygems/0/errors.rbs +364 -0
  200. data/rbs/fills/rubygems/0/spec_fetcher.rbs +107 -0
  201. data/rbs/fills/rubygems/0/specification.rbs +1753 -0
  202. data/rbs/shims/ast/0/node.rbs +5 -0
  203. data/rbs/shims/ast/2.4/.rbs_meta.yaml +9 -0
  204. data/rbs/shims/ast/2.4/ast.rbs +73 -0
  205. data/rbs/shims/parser/3.2.0.1/manifest.yaml +7 -0
  206. data/rbs/shims/parser/3.2.0.1/parser.rbs +201 -0
  207. data/rbs/shims/parser/3.2.0.1/polyfill.rbs +4 -0
  208. data/rbs_collection.yaml +4 -4
  209. data/solargraph.gemspec +15 -4
  210. metadata +71 -16
  211. data/lib/solargraph/parser/node_methods.rb +0 -97
  212. /data/rbs/fills/{tuple.rbs → tuple/tuple.rbs} +0 -0
  213. /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
  214. /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
  215. /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
  216. /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
@@ -1,163 +1,163 @@
1
- # frozen_string_literal: true
2
-
3
- require 'digest'
4
- require 'pathname'
5
- require 'rbs'
6
-
7
- module Solargraph
8
- class RbsMap
9
- autoload :Conversions, 'solargraph/rbs_map/conversions'
10
- autoload :CoreMap, 'solargraph/rbs_map/core_map'
11
- autoload :CoreFills, 'solargraph/rbs_map/core_fills'
12
- autoload :StdlibMap, 'solargraph/rbs_map/stdlib_map'
13
-
14
- include Logging
15
-
16
- # @type [Hash{String => RbsMap}]
17
- @@rbs_maps_hash = {}
18
-
19
- attr_reader :library
20
-
21
- attr_reader :rbs_collection_paths
22
-
23
- attr_reader :rbs_collection_config_path
24
-
25
- # @param library [String]
26
- # @param version [String, nil
27
- # @param rbs_collection_config_path [String, Pathname, nil]
28
- # @param rbs_collection_paths [Array<Pathname, String>]
29
- def initialize library, version = nil, rbs_collection_config_path: nil, rbs_collection_paths: []
30
- if rbs_collection_config_path.nil? && !rbs_collection_paths.empty?
31
- raise 'Please provide rbs_collection_config_path if you provide rbs_collection_paths'
32
- end
33
- @library = library
34
- @version = version
35
- @rbs_collection_config_path = rbs_collection_config_path
36
- @rbs_collection_paths = rbs_collection_paths
37
- add_library loader, library, version
38
- end
39
-
40
- # @return [RBS::EnvironmentLoader]
41
- def loader
42
- @loader ||= RBS::EnvironmentLoader.new(core_root: nil, repository: repository)
43
- end
44
-
45
- # @return [String] representing the version of the RBS info fetched
46
- # for the given library. Must change when the RBS info is
47
- # updated upstream for the same library and version. May change
48
- # if the config for where information comes form changes.
49
- def cache_key
50
- @hextdigest ||= begin
51
- # @type [String, nil]
52
- data = nil
53
- if rbs_collection_config_path
54
- lockfile_path = RBS::Collection::Config.to_lockfile_path(Pathname.new(rbs_collection_config_path))
55
- if lockfile_path.exist?
56
- collection_config = RBS::Collection::Config.from_path lockfile_path
57
- gem_config = collection_config.gem(library)
58
- data = gem_config&.to_s
59
- end
60
- end
61
- if data.nil? || data.empty?
62
- if resolved?
63
- # definitely came from the gem itself and not elsewhere -
64
- # only one version per gem
65
- 'gem-export'
66
- else
67
- 'unresolved'
68
- end
69
- else
70
- Digest::SHA1.hexdigest(data)
71
- end
72
- end
73
- end
74
-
75
- # @param gemspec [Gem::Specification]
76
- # @param rbs_collection_path [String, Pathname, nil]
77
- # @param rbs_collection_config_path [String, Pathname, nil]
78
- # @return [RbsMap]
79
- def self.from_gemspec gemspec, rbs_collection_path, rbs_collection_config_path
80
- rbs_map = RbsMap.new(gemspec.name, gemspec.version,
81
- rbs_collection_paths: [rbs_collection_path].compact,
82
- rbs_collection_config_path: rbs_collection_config_path)
83
- return rbs_map if rbs_map.resolved?
84
-
85
- # try any version of the gem in the collection
86
- RbsMap.new(gemspec.name, nil,
87
- rbs_collection_paths: [rbs_collection_path].compact,
88
- rbs_collection_config_path: rbs_collection_config_path)
89
- end
90
-
91
- # @return [Array<Pin::Base>]
92
- def pins
93
- @pins ||= resolved? ? conversions.pins : []
94
- end
95
-
96
- # @generic T
97
- # @param path [String]
98
- # @param klass [Class<generic<T>>]
99
- # @return [generic<T>, nil]
100
- def path_pin path, klass = Pin::Base
101
- pin = pins.find { |p| p.path == path }
102
- pin if pin&.is_a?(klass)
103
- end
104
-
105
- # @param path [String]
106
- # @return [Array<Pin::Base>]
107
- def path_pins path
108
- pins.select { |p| p.path == path }
109
- end
110
-
111
- def resolved?
112
- @resolved
113
- end
114
-
115
- # @return [RBS::Repository]
116
- def repository
117
- @repository ||= RBS::Repository.new(no_stdlib: false).tap do |repo|
118
- @rbs_collection_paths.each do |dir|
119
- dir_path = Pathname.new(dir)
120
- repo.add(dir_path) if dir_path.exist? && dir_path.directory?
121
- end
122
- end
123
- end
124
-
125
- # @param library [String]
126
- # @return [RbsMap]
127
- def self.load library
128
- @@rbs_maps_hash[library] ||= RbsMap.new(library)
129
- end
130
-
131
- private
132
-
133
- # @return [RBS::EnvironmentLoader]
134
- def loader
135
- @loader ||= RBS::EnvironmentLoader.new(core_root: nil, repository: repository)
136
- end
137
-
138
- # @return [Conversions]
139
- def conversions
140
- @conversions ||= Conversions.new(loader: loader)
141
- end
142
-
143
- # @param loader [RBS::EnvironmentLoader]
144
- # @param library [String]
145
- # @param version [String, nil]
146
- # @return [Boolean] true if adding the library succeeded
147
- def add_library loader, library, version
148
- @resolved = if loader.has_library?(library: library, version: version)
149
- loader.add library: library, version: version
150
- logger.debug { "#{short_name} successfully loaded library #{library}:#{version}" }
151
- true
152
- else
153
- logger.info { "#{short_name} did not find data for library #{library}:#{version}" }
154
- false
155
- end
156
- end
157
-
158
- # @return [String]
159
- def short_name
160
- self.class.name.split('::').last
161
- end
162
- end
163
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'digest'
4
+ require 'pathname'
5
+ require 'rbs'
6
+
7
+ module Solargraph
8
+ class RbsMap
9
+ autoload :Conversions, 'solargraph/rbs_map/conversions'
10
+ autoload :CoreMap, 'solargraph/rbs_map/core_map'
11
+ autoload :CoreFills, 'solargraph/rbs_map/core_fills'
12
+ autoload :StdlibMap, 'solargraph/rbs_map/stdlib_map'
13
+
14
+ include Logging
15
+
16
+ # @type [Hash{String => RbsMap}]
17
+ @@rbs_maps_hash = {}
18
+
19
+ attr_reader :library
20
+
21
+ attr_reader :rbs_collection_paths
22
+
23
+ attr_reader :rbs_collection_config_path
24
+
25
+ # @param library [String]
26
+ # @param version [String, nil]
27
+ # @param rbs_collection_config_path [String, Pathname, nil]
28
+ # @param rbs_collection_paths [Array<Pathname, String>]
29
+ def initialize library, version = nil, rbs_collection_config_path: nil, rbs_collection_paths: []
30
+ if rbs_collection_config_path.nil? && !rbs_collection_paths.empty?
31
+ raise 'Please provide rbs_collection_config_path if you provide rbs_collection_paths'
32
+ end
33
+ @library = library
34
+ @version = version
35
+ @rbs_collection_config_path = rbs_collection_config_path
36
+ @rbs_collection_paths = rbs_collection_paths
37
+ add_library loader, library, version
38
+ end
39
+
40
+ # @return [RBS::EnvironmentLoader]
41
+ def loader
42
+ @loader ||= RBS::EnvironmentLoader.new(core_root: nil, repository: repository)
43
+ end
44
+
45
+ # @return [String] representing the version of the RBS info fetched
46
+ # for the given library. Must change when the RBS info is
47
+ # updated upstream for the same library and version. May change
48
+ # if the config for where information comes form changes.
49
+ def cache_key
50
+ @hextdigest ||= begin
51
+ # @type [String, nil]
52
+ data = nil
53
+ if rbs_collection_config_path
54
+ lockfile_path = RBS::Collection::Config.to_lockfile_path(Pathname.new(rbs_collection_config_path))
55
+ if lockfile_path.exist?
56
+ collection_config = RBS::Collection::Config.from_path lockfile_path
57
+ gem_config = collection_config.gem(library)
58
+ data = gem_config&.to_s
59
+ end
60
+ end
61
+ if data.nil? || data.empty?
62
+ if resolved?
63
+ # definitely came from the gem itself and not elsewhere -
64
+ # only one version per gem
65
+ 'gem-export'
66
+ else
67
+ 'unresolved'
68
+ end
69
+ else
70
+ Digest::SHA1.hexdigest(data)
71
+ end
72
+ end
73
+ end
74
+
75
+ # @param gemspec [Gem::Specification, Bundler::LazySpecification]
76
+ # @param rbs_collection_path [String, Pathname, nil]
77
+ # @param rbs_collection_config_path [String, Pathname, nil]
78
+ # @return [RbsMap]
79
+ def self.from_gemspec gemspec, rbs_collection_path, rbs_collection_config_path
80
+ rbs_map = RbsMap.new(gemspec.name, gemspec.version,
81
+ rbs_collection_paths: [rbs_collection_path].compact,
82
+ rbs_collection_config_path: rbs_collection_config_path)
83
+ return rbs_map if rbs_map.resolved?
84
+
85
+ # try any version of the gem in the collection
86
+ RbsMap.new(gemspec.name, nil,
87
+ rbs_collection_paths: [rbs_collection_path].compact,
88
+ rbs_collection_config_path: rbs_collection_config_path)
89
+ end
90
+
91
+ # @return [Array<Pin::Base>]
92
+ def pins
93
+ @pins ||= resolved? ? conversions.pins : []
94
+ end
95
+
96
+ # @generic T
97
+ # @param path [String]
98
+ # @param klass [Class<generic<T>>]
99
+ # @return [generic<T>, nil]
100
+ def path_pin path, klass = Pin::Base
101
+ pin = pins.find { |p| p.path == path }
102
+ pin if pin&.is_a?(klass)
103
+ end
104
+
105
+ # @param path [String]
106
+ # @return [Array<Pin::Base>]
107
+ def path_pins path
108
+ pins.select { |p| p.path == path }
109
+ end
110
+
111
+ def resolved?
112
+ @resolved
113
+ end
114
+
115
+ # @return [RBS::Repository]
116
+ def repository
117
+ @repository ||= RBS::Repository.new(no_stdlib: false).tap do |repo|
118
+ @rbs_collection_paths.each do |dir|
119
+ dir_path = Pathname.new(dir)
120
+ repo.add(dir_path) if dir_path.exist? && dir_path.directory?
121
+ end
122
+ end
123
+ end
124
+
125
+ # @param library [String]
126
+ # @return [RbsMap]
127
+ def self.load library
128
+ @@rbs_maps_hash[library] ||= RbsMap.new(library)
129
+ end
130
+
131
+ private
132
+
133
+ # @return [RBS::EnvironmentLoader]
134
+ def loader
135
+ @loader ||= RBS::EnvironmentLoader.new(core_root: nil, repository: repository)
136
+ end
137
+
138
+ # @return [Conversions]
139
+ def conversions
140
+ @conversions ||= Conversions.new(loader: loader)
141
+ end
142
+
143
+ # @param loader [RBS::EnvironmentLoader]
144
+ # @param library [String]
145
+ # @param version [String, nil]
146
+ # @return [Boolean] true if adding the library succeeded
147
+ def add_library loader, library, version
148
+ @resolved = if loader.has_library?(library: library, version: version)
149
+ loader.add library: library, version: version
150
+ logger.debug { "#{short_name} successfully loaded library #{library}:#{version}" }
151
+ true
152
+ else
153
+ logger.info { "#{short_name} did not find data for library #{library}:#{version}" }
154
+ false
155
+ end
156
+ end
157
+
158
+ # @return [String]
159
+ def short_name
160
+ self.class.name.split('::').last
161
+ end
162
+ end
163
+ end
@@ -1,16 +1,16 @@
1
- # frozen_string_literal: true
2
-
3
- require 'socket'
4
-
5
- module Solargraph
6
- module ServerMethods
7
- # @return [Integer]
8
- def available_port
9
- socket = Socket.new(:INET, :STREAM, 0)
10
- socket.bind(Addrinfo.tcp("127.0.0.1", 0))
11
- port = socket.local_address.ip_port
12
- socket.close
13
- port
14
- end
15
- end
16
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'socket'
4
+
5
+ module Solargraph
6
+ module ServerMethods
7
+ # @return [Integer]
8
+ def available_port
9
+ socket = Socket.new(:INET, :STREAM, 0)
10
+ socket.bind(Addrinfo.tcp("127.0.0.1", 0))
11
+ port = socket.local_address.ip_port
12
+ socket.close
13
+ port
14
+ end
15
+ end
16
+ end