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,33 +1,34 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- # @abstract This mixin relies on these -
5
- # methods:
6
- # equality_fields()
7
- module Equality
8
- # @!method equality_fields
9
- # @return [Array]
10
-
11
- # @param other [Object]
12
- # @return [Boolean]
13
- def eql?(other)
14
- self.class.eql?(other.class) &&
15
- equality_fields.eql?(other.equality_fields)
16
- end
17
-
18
- # @param other [Object]
19
- # @return [Boolean]
20
- def ==(other)
21
- self.eql?(other)
22
- end
23
-
24
- def hash
25
- equality_fields.hash
26
- end
27
-
28
- def freeze
29
- equality_fields.each(&:freeze)
30
- super
31
- end
32
- end
33
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ # @abstract This mixin relies on these -
5
+ # methods:
6
+ # equality_fields()
7
+ module Equality
8
+ # @!method equality_fields
9
+ # @return [Array]
10
+
11
+ # @param other [Object]
12
+ # @return [Boolean]
13
+ def eql?(other)
14
+ self.class.eql?(other.class) &&
15
+ # @sg-ignore https://github.com/castwide/solargraph/pull/1114
16
+ equality_fields.eql?(other.equality_fields)
17
+ end
18
+
19
+ # @param other [Object]
20
+ # @return [Boolean]
21
+ def ==(other)
22
+ self.eql?(other)
23
+ end
24
+
25
+ def hash
26
+ equality_fields.hash
27
+ end
28
+
29
+ def freeze
30
+ equality_fields.each(&:freeze)
31
+ super
32
+ end
33
+ end
34
+ end
@@ -1,72 +1,98 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rbs'
4
-
5
- module Solargraph
6
- # A utility for building gem pins from a combination of YARD and RBS
7
- # documentation.
8
- #
9
- module GemPins
10
- # Build an array of pins from a gem specification. The process starts with
11
- # YARD, enhances the resulting pins with RBS definitions, and appends RBS
12
- # pins that don't exist in the YARD mapping.
13
- #
14
- # @param gemspec [Gem::Specification]
15
- # @return [Array<Pin::Base>]
16
- def self.build(gemspec)
17
- yard_pins = build_yard_pins(gemspec)
18
- rbs_map = RbsMap.from_gemspec(gemspec)
19
- combine yard_pins, rbs_map
20
- end
21
-
22
- # @param yard_pins [Array<Pin::Base>]
23
- # @param rbs_map [RbsMap]
24
- # @return [Array<Pin::Base>]
25
- def self.combine(yard_pins, rbs_map)
26
- in_yard = Set.new
27
- combined = yard_pins.map do |yard|
28
- in_yard.add yard.path
29
- next yard unless yard.is_a?(Pin::Method)
30
-
31
- rbs = rbs_map.path_pin(yard.path, Pin::Method)
32
- next yard unless rbs
33
-
34
- # @sg-ignore
35
- yard.class.new(
36
- location: yard.location,
37
- closure: yard.closure,
38
- name: yard.name,
39
- comments: yard.comments,
40
- scope: yard.scope,
41
- parameters: rbs.parameters,
42
- generics: rbs.generics,
43
- node: yard.node,
44
- signatures: yard.signatures,
45
- return_type: best_return_type(rbs.return_type, yard.return_type)
46
- )
47
- end
48
- in_rbs = rbs_map.pins.reject { |pin| in_yard.include?(pin.path) }
49
- combined + in_rbs
50
- end
51
-
52
- class << self
53
- private
54
-
55
- # @param gemspec [Gem::Specification]
56
- # @return [Array<Pin::Base>]
57
- def build_yard_pins(gemspec)
58
- Yardoc.cache(gemspec) unless Yardoc.cached?(gemspec)
59
- yardoc = Yardoc.load!(gemspec)
60
- YardMap::Mapper.new(yardoc, gemspec).map
61
- end
62
-
63
- # Select the first defined type.
64
- #
65
- # @param choices [Array<ComplexType>]
66
- # @return [ComplexType]
67
- def best_return_type *choices
68
- choices.find { |pin| pin.defined? } || choices.first || ComplexType::UNDEFINED
69
- end
70
- end
71
- end
72
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'rbs'
4
+
5
+ module Solargraph
6
+ # A utility for building gem pins from a combination of YARD and RBS
7
+ # documentation.
8
+ #
9
+ module GemPins
10
+ class << self
11
+ include Logging
12
+ end
13
+
14
+ # @param pins [Array<Pin::Base>]
15
+ # @return [Array<Pin::Base>]
16
+ def self.combine_method_pins_by_path(pins)
17
+ method_pins, alias_pins = pins.partition { |pin| pin.class == Pin::Method }
18
+ by_path = method_pins.group_by(&:path)
19
+ by_path.transform_values! do |pins|
20
+ GemPins.combine_method_pins(*pins)
21
+ end
22
+ by_path.values + alias_pins
23
+ end
24
+
25
+ # @param pins [Array<Pin::Method>]
26
+ # @return [Pin::Method, nil]
27
+ def self.combine_method_pins(*pins)
28
+ # @type [Pin::Method, nil]
29
+ combined_pin = nil
30
+ # @param memo [Pin::Method, nil]
31
+ # @param pin [Pin::Method]
32
+ out = pins.reduce(combined_pin) do |memo, pin|
33
+ next pin if memo.nil?
34
+ if memo == pin && memo.source != :combined
35
+ # @todo we should track down situations where we are handled
36
+ # the same pin from the same source here and eliminate them -
37
+ # this is an efficiency workaround for now
38
+ next memo
39
+ end
40
+ memo.combine_with(pin)
41
+ end
42
+ logger.debug { "GemPins.combine_method_pins(pins.length=#{pins.length}, pins=#{pins}) => #{out.inspect}" }
43
+ out
44
+ end
45
+
46
+ # @param yard_plugins [Array<String>] The names of YARD plugins to use.
47
+ # @param gemspec [Gem::Specification]
48
+ # @return [Array<Pin::Base>]
49
+ def self.build_yard_pins(yard_plugins, gemspec)
50
+ Yardoc.cache(yard_plugins, gemspec) unless Yardoc.cached?(gemspec)
51
+ return [] unless Yardoc.cached?(gemspec)
52
+ yardoc = Yardoc.load!(gemspec)
53
+ YardMap::Mapper.new(yardoc, gemspec).map
54
+ end
55
+
56
+ # @param yard_pins [Array<Pin::Base>]
57
+ # @param rbs_pins [Array<Pin::Base>]
58
+ #
59
+ # @return [Array<Pin::Base>]
60
+ def self.combine(yard_pins, rbs_pins)
61
+ in_yard = Set.new
62
+ rbs_api_map = Solargraph::ApiMap.new(pins: rbs_pins)
63
+ combined = yard_pins.map do |yard_pin|
64
+ in_yard.add yard_pin.path
65
+ rbs_pin = rbs_api_map.get_path_pins(yard_pin.path).filter { |pin| pin.is_a? Pin::Method }.first
66
+ next yard_pin unless rbs_pin && yard_pin.class == Pin::Method
67
+
68
+ unless rbs_pin
69
+ # @sg-ignore https://github.com/castwide/solargraph/pull/1114
70
+ logger.debug { "GemPins.combine: No rbs pin for #{yard_pin.path} - using YARD's '#{yard_pin.inspect} (return_type=#{yard_pin.return_type}; signatures=#{yard_pin.signatures})" }
71
+ next yard_pin
72
+ end
73
+
74
+ out = combine_method_pins(rbs_pin, yard_pin)
75
+ logger.debug { "GemPins.combine: Combining yard.path=#{yard_pin.path} - rbs=#{rbs_pin.inspect} with yard=#{yard_pin.inspect} into #{out}" }
76
+ out
77
+ end
78
+ in_rbs_only = rbs_pins.select do |pin|
79
+ pin.path.nil? || !in_yard.include?(pin.path)
80
+ end
81
+ out = combined + in_rbs_only
82
+ logger.debug { "GemPins#combine: Returning #{out.length} combined pins" }
83
+ out
84
+ end
85
+
86
+ class << self
87
+ private
88
+
89
+ # Select the first defined type.
90
+ #
91
+ # @param choices [Array<ComplexType>]
92
+ # @return [ComplexType]
93
+ def best_return_type *choices
94
+ choices.find { |pin| pin.defined? } || choices.first || ComplexType::UNDEFINED
95
+ end
96
+ end
97
+ end
98
+ end
@@ -1,20 +1,20 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- # The ErrorCode constants for the language server protocol.
6
- #
7
- module ErrorCodes
8
- PARSE_ERROR = -32700
9
- INVALID_REQUEST = -32600
10
- METHOD_NOT_FOUND = -32601
11
- INVALID_PARAMS = -32602
12
- INTERNAL_ERROR = -32603
13
- SERVER_ERROR_START = -32099
14
- SERVER_ERROR_END = -32000
15
- SERVER_NOT_INITIALIZED = -32002
16
- UNKNOWN_ERROR_CODE = -32001
17
- REQUEST_CANCELLED = -32800
18
- end
19
- end
20
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ # The ErrorCode constants for the language server protocol.
6
+ #
7
+ module ErrorCodes
8
+ PARSE_ERROR = -32700
9
+ INVALID_REQUEST = -32600
10
+ METHOD_NOT_FOUND = -32601
11
+ INVALID_PARAMS = -32602
12
+ INTERNAL_ERROR = -32603
13
+ SERVER_ERROR_START = -32099
14
+ SERVER_ERROR_END = -32000
15
+ SERVER_NOT_INITIALIZED = -32002
16
+ UNKNOWN_ERROR_CODE = -32001
17
+ REQUEST_CANCELLED = -32800
18
+ end
19
+ end
20
+ end
@@ -1,89 +1,89 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module LanguageServer
5
- class Host
6
- # An asynchronous diagnosis reporter.
7
- #
8
- class Diagnoser
9
- # @param host [Host]
10
- def initialize host
11
- @host = host
12
- @mutex = Mutex.new
13
- @queue = []
14
- @stopped = true
15
- end
16
-
17
- # Schedule a file to be diagnosed.
18
- #
19
- # @param uri [String]
20
- # @return [void]
21
- def schedule uri
22
- mutex.synchronize { queue.push uri }
23
- end
24
-
25
- # Stop the diagnosis thread.
26
- #
27
- # @return [void]
28
- def stop
29
- @stopped = true
30
- end
31
-
32
- # True is the diagnoser is stopped.
33
- #
34
- # @return [Boolean]
35
- def stopped?
36
- @stopped
37
- end
38
-
39
- # Start the diagnosis thread.
40
- #
41
- # @return [self, nil]
42
- def start
43
- return unless @stopped
44
- @stopped = false
45
- Thread.new do
46
- until stopped?
47
- tick
48
- sleep 0.1
49
- end
50
- end
51
- self
52
- end
53
-
54
- # Perform diagnoses.
55
- #
56
- # @return [void]
57
- def tick
58
- return if queue.empty? || host.synchronizing?
59
- if !host.options['diagnostics']
60
- mutex.synchronize { queue.clear }
61
- return
62
- end
63
- current = mutex.synchronize { queue.shift }
64
- return if queue.include?(current)
65
- begin
66
- host.diagnose current
67
- rescue InvalidOffsetError
68
- # @todo This error can occur when the Source is out of sync with
69
- # with the ApiMap. It's probably not the best way to handle it,
70
- # but it's quick and easy.
71
- Logging.logger.warn "Deferring diagnosis due to invalid offset: #{current}"
72
- mutex.synchronize { queue.push current }
73
- end
74
- end
75
-
76
- private
77
-
78
- # @return [Host]
79
- attr_reader :host
80
-
81
- # @return [Mutex]
82
- attr_reader :mutex
83
-
84
- # @return [::Array]
85
- attr_reader :queue
86
- end
87
- end
88
- end
89
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module LanguageServer
5
+ class Host
6
+ # An asynchronous diagnosis reporter.
7
+ #
8
+ class Diagnoser
9
+ # @param host [Host]
10
+ def initialize host
11
+ @host = host
12
+ @mutex = Mutex.new
13
+ @queue = []
14
+ @stopped = true
15
+ end
16
+
17
+ # Schedule a file to be diagnosed.
18
+ #
19
+ # @param uri [String]
20
+ # @return [void]
21
+ def schedule uri
22
+ mutex.synchronize { queue.push uri }
23
+ end
24
+
25
+ # Stop the diagnosis thread.
26
+ #
27
+ # @return [void]
28
+ def stop
29
+ @stopped = true
30
+ end
31
+
32
+ # True is the diagnoser is stopped.
33
+ #
34
+ # @return [Boolean]
35
+ def stopped?
36
+ @stopped
37
+ end
38
+
39
+ # Start the diagnosis thread.
40
+ #
41
+ # @return [self, nil]
42
+ def start
43
+ return unless @stopped
44
+ @stopped = false
45
+ Thread.new do
46
+ until stopped?
47
+ tick
48
+ sleep 0.1
49
+ end
50
+ end
51
+ self
52
+ end
53
+
54
+ # Perform diagnoses.
55
+ #
56
+ # @return [void]
57
+ def tick
58
+ return if queue.empty? || host.synchronizing?
59
+ if !host.options['diagnostics']
60
+ mutex.synchronize { queue.clear }
61
+ return
62
+ end
63
+ current = mutex.synchronize { queue.shift }
64
+ return if queue.include?(current)
65
+ begin
66
+ host.diagnose current
67
+ rescue InvalidOffsetError
68
+ # @todo This error can occur when the Source is out of sync with
69
+ # with the ApiMap. It's probably not the best way to handle it,
70
+ # but it's quick and easy.
71
+ Logging.logger.warn "Deferring diagnosis due to invalid offset: #{current}"
72
+ mutex.synchronize { queue.push current }
73
+ end
74
+ end
75
+
76
+ private
77
+
78
+ # @return [Host]
79
+ attr_reader :host
80
+
81
+ # @return [Mutex]
82
+ attr_reader :mutex
83
+
84
+ # @return [::Array]
85
+ attr_reader :queue
86
+ end
87
+ end
88
+ end
89
+ end