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,47 +1,47 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Reference
6
- class Override < Reference
7
- # @return [::Array<YARD::Tags::Tag>]
8
- attr_reader :tags
9
-
10
- # @return [::Array<Symbol>]
11
- attr_reader :delete
12
-
13
- def closure
14
- nil
15
- end
16
-
17
- # @param location [Location, nil]
18
- # @param name [String]
19
- # @param tags [::Array<YARD::Tags::Tag>]
20
- # @param delete [::Array<Symbol>]
21
- # @param splat [Hash]
22
- def initialize location, name, tags, delete = [], **splat
23
- super(location: location, name: name, **splat)
24
- @tags = tags
25
- @delete = delete
26
- end
27
-
28
- # @param name [String]
29
- # @param tags [::Array<String>]
30
- # @param delete [::Array<Symbol>]
31
- # @param splat [Hash]
32
- # @return [Solargraph::Pin::Reference::Override]
33
- def self.method_return name, *tags, delete: [], **splat
34
- new(nil, name, [YARD::Tags::Tag.new('return', '', tags)], delete, **splat)
35
- end
36
-
37
- # @param name [String]
38
- # @param comment [String]
39
- # @param splat [Hash]
40
- # @return [Solargraph::Pin::Reference::Override]
41
- def self.from_comment name, comment, **splat
42
- new(nil, name, Solargraph::Source.parse_docstring(comment).to_docstring.tags, **splat)
43
- end
44
- end
45
- end
46
- end
47
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Reference
6
+ class Override < Reference
7
+ # @return [::Array<YARD::Tags::Tag>]
8
+ attr_reader :tags
9
+
10
+ # @return [::Array<Symbol>]
11
+ attr_reader :delete
12
+
13
+ def closure
14
+ nil
15
+ end
16
+
17
+ # @param location [Location, nil]
18
+ # @param name [String]
19
+ # @param tags [::Array<YARD::Tags::Tag>]
20
+ # @param delete [::Array<Symbol>]
21
+ # @param splat [Hash]
22
+ def initialize location, name, tags, delete = [], **splat
23
+ super(location: location, name: name, **splat)
24
+ @tags = tags
25
+ @delete = delete
26
+ end
27
+
28
+ # @param name [String]
29
+ # @param tags [::Array<String>]
30
+ # @param delete [::Array<Symbol>]
31
+ # @param splat [Hash]
32
+ # @return [Solargraph::Pin::Reference::Override]
33
+ def self.method_return name, *tags, delete: [], **splat
34
+ new(nil, name, [YARD::Tags::Tag.new('return', '', tags)], delete, **splat)
35
+ end
36
+
37
+ # @param name [String]
38
+ # @param comment [String]
39
+ # @param splat [Hash]
40
+ # @return [Solargraph::Pin::Reference::Override]
41
+ def self.from_comment name, comment, **splat
42
+ new(nil, name, Solargraph::Source.parse_docstring(comment).to_docstring.tags, **splat)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,15 +1,15 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Reference
6
- # A Superclass reference pin.
7
- #
8
- class Superclass < Reference
9
- def reference_gates
10
- @reference_gates ||= closure.gates - [closure.path]
11
- end
12
- end
13
- end
14
- end
15
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Reference
6
+ # A Superclass reference pin.
7
+ #
8
+ class Superclass < Reference
9
+ def reference_gates
10
+ @reference_gates ||= closure.gates - [closure.path]
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,48 +1,39 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Reference < Base
6
- autoload :Require, 'solargraph/pin/reference/require'
7
- autoload :Superclass, 'solargraph/pin/reference/superclass'
8
- autoload :Include, 'solargraph/pin/reference/include'
9
- autoload :Prepend, 'solargraph/pin/reference/prepend'
10
- autoload :Extend, 'solargraph/pin/reference/extend'
11
- autoload :Override, 'solargraph/pin/reference/override'
12
-
13
- attr_reader :generic_values
14
-
15
- # @param generic_values [Array<String>]
16
- def initialize generic_values: [], **splat
17
- super(**splat)
18
- @generic_values = generic_values
19
- end
20
-
21
- # @return [String]
22
- def parameter_tag
23
- @parameter_tag ||= if generic_values&.any?
24
- "<#{generic_values.join(', ')}>"
25
- else
26
- ''
27
- end
28
- end
29
-
30
- # @return [ComplexType]
31
- def parametrized_tag
32
- @parametrized_tag ||= ComplexType.try_parse(
33
- name +
34
- if generic_values&.length&.> 0
35
- "<#{generic_values.join(', ')}>"
36
- else
37
- ''
38
- end
39
- )
40
- end
41
-
42
- # @return [Array<String>]
43
- def reference_gates
44
- closure.gates
45
- end
46
- end
47
- end
48
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Reference < Base
6
+ autoload :Require, 'solargraph/pin/reference/require'
7
+ autoload :Superclass, 'solargraph/pin/reference/superclass'
8
+ autoload :Include, 'solargraph/pin/reference/include'
9
+ autoload :Prepend, 'solargraph/pin/reference/prepend'
10
+ autoload :Extend, 'solargraph/pin/reference/extend'
11
+ autoload :Override, 'solargraph/pin/reference/override'
12
+
13
+ attr_reader :generic_values
14
+
15
+ # @param generic_values [Array<String>]
16
+ def initialize generic_values: [], **splat
17
+ super(**splat)
18
+ @generic_values = generic_values
19
+ end
20
+
21
+ # @return [ComplexType]
22
+ def type
23
+ @type ||= ComplexType.try_parse(
24
+ name +
25
+ if generic_values&.length&.> 0
26
+ "<#{generic_values.join(', ')}>"
27
+ else
28
+ ''
29
+ end
30
+ )
31
+ end
32
+
33
+ # @return [Array<String>]
34
+ def reference_gates
35
+ closure.gates
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,58 +1,61 @@
1
- # frozen_string_literal: true
2
-
3
- require 'jaro_winkler'
4
-
5
- module Solargraph
6
- module Pin
7
- class Search
8
- class Result
9
- # @return [Float]
10
- attr_reader :match
11
-
12
- # @return [Pin::Base]
13
- attr_reader :pin
14
-
15
- # @param match [Float] The match score for the pin
16
- # @param pin [Pin::Base]
17
- def initialize match, pin
18
- @match = match
19
- @pin = pin
20
- end
21
- end
22
-
23
- # @param pins [::Array<Pin::Base>]
24
- # @param query [String]
25
- def initialize pins, query
26
- @pins = pins
27
- @query = query
28
- end
29
-
30
- # @return [::Array<Pin::Base>]
31
- def results
32
- @results ||= do_query
33
- end
34
-
35
- private
36
-
37
- # @return [::Array<Pin::Base>]
38
- def do_query
39
- return @pins if @query.nil? || @query.empty?
40
- @pins.map do |pin|
41
- match = [fuzzy_string_match(pin.path, @query), fuzzy_string_match(pin.name, @query)].max
42
- Result.new(match, pin) if match > 0.7
43
- end
44
- .compact
45
- .sort { |a, b| b.match <=> a.match }
46
- .map(&:pin)
47
- end
48
-
49
- # @param str1 [String]
50
- # @param str2 [String]
51
- # @return [Float]
52
- def fuzzy_string_match str1, str2
53
- return 1.0 + (str2.length.to_f / str1.length.to_f) if str1.downcase.include?(str2.downcase)
54
- JaroWinkler.similarity(str1, str2, ignore_case: true)
55
- end
56
- end
57
- end
58
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'jaro_winkler'
4
+
5
+ module Solargraph
6
+ module Pin
7
+ class Search
8
+ class Result
9
+ # @return [Float]
10
+ attr_reader :match
11
+
12
+ # @return [Pin::Base]
13
+ attr_reader :pin
14
+
15
+ # @param match [Float] The match score for the pin
16
+ # @param pin [Pin::Base]
17
+ def initialize match, pin
18
+ @match = match
19
+ @pin = pin
20
+ end
21
+ end
22
+
23
+ # @param pins [::Array<Pin::Base>]
24
+ # @param query [String]
25
+ def initialize pins, query
26
+ @pins = pins
27
+ @query = query
28
+ end
29
+
30
+ # @return [::Array<Pin::Base>]
31
+ def results
32
+ @results ||= do_query
33
+ end
34
+
35
+ private
36
+
37
+ # @return [::Array<Pin::Base>]
38
+ def do_query
39
+ return @pins if @query.nil? || @query.empty?
40
+ @pins.map do |pin|
41
+ match = [fuzzy_string_match(pin.path, @query), fuzzy_string_match(pin.name, @query)].max
42
+ Result.new(match, pin) if match > 0.7
43
+ end
44
+ .compact
45
+ # @param a [self]
46
+ # @param b [self]
47
+ # @sg-ignore https://github.com/castwide/solargraph/pull/1050
48
+ .sort { |a, b| b.match <=> a.match }
49
+ .map(&:pin)
50
+ end
51
+
52
+ # @param str1 [String]
53
+ # @param str2 [String]
54
+ # @return [Float]
55
+ def fuzzy_string_match str1, str2
56
+ return 1.0 + (str2.length.to_f / str1.length.to_f) if str1.downcase.include?(str2.downcase)
57
+ JaroWinkler.similarity(str1, str2, ignore_case: true)
58
+ end
59
+ end
60
+ end
61
+ end
@@ -1,61 +1,61 @@
1
- module Solargraph
2
- module Pin
3
- class Signature < Callable
4
- # allow signature to be created before method pin, then set this
5
- # to the method pin
6
- attr_writer :closure
7
-
8
- def initialize **splat
9
- super(**splat)
10
- end
11
-
12
- def generics
13
- @generics ||= [].freeze
14
- end
15
-
16
- def identity
17
- @identity ||= "signature#{object_id}"
18
- end
19
-
20
- attr_writer :closure
21
-
22
- def dodgy_return_type_source?
23
- super || closure&.dodgy_return_type_source?
24
- end
25
-
26
- def type_location
27
- super || closure&.type_location
28
- end
29
-
30
- def location
31
- super || closure&.location
32
- end
33
-
34
- def typify api_map
35
- if return_type.defined?
36
- qualified = return_type.qualify(api_map, closure.namespace)
37
- logger.debug { "Signature#typify(self=#{self}) => #{qualified.rooted_tags.inspect}" }
38
- return qualified
39
- end
40
- return ComplexType::UNDEFINED if closure.nil?
41
- return ComplexType::UNDEFINED unless closure.is_a?(Pin::Method)
42
- # @sg-ignore need is_a? support
43
- # @type [Array<Pin::Method>]
44
- method_stack = closure.rest_of_stack api_map
45
- logger.debug { "Signature#typify(self=#{self}) - method_stack: #{method_stack}" }
46
- method_stack.each do |pin|
47
- sig = pin.signatures.find { |s| s.arity == self.arity }
48
- next unless sig
49
- unless sig.return_type.undefined?
50
- qualified = sig.return_type.qualify(api_map, closure.namespace)
51
- logger.debug { "Signature#typify(self=#{self}) => #{qualified.rooted_tags.inspect}" }
52
- return qualified
53
- end
54
- end
55
- out = super
56
- logger.debug { "Signature#typify(self=#{self}) => #{out}" }
57
- out
58
- end
59
- end
60
- end
61
- end
1
+ module Solargraph
2
+ module Pin
3
+ class Signature < Callable
4
+ # allow signature to be created before method pin, then set this
5
+ # to the method pin
6
+ attr_writer :closure
7
+
8
+ def initialize **splat
9
+ super(**splat)
10
+ end
11
+
12
+ def generics
13
+ @generics ||= [].freeze
14
+ end
15
+
16
+ def identity
17
+ @identity ||= "signature#{object_id}"
18
+ end
19
+
20
+ attr_writer :closure
21
+
22
+ def dodgy_return_type_source?
23
+ super || closure&.dodgy_return_type_source?
24
+ end
25
+
26
+ def type_location
27
+ super || closure&.type_location
28
+ end
29
+
30
+ def location
31
+ super || closure&.location
32
+ end
33
+
34
+ def typify api_map
35
+ if return_type.defined?
36
+ qualified = return_type.qualify(api_map, closure.namespace)
37
+ logger.debug { "Signature#typify(self=#{self}) => #{qualified.rooted_tags.inspect}" }
38
+ return qualified
39
+ end
40
+ return ComplexType::UNDEFINED if closure.nil?
41
+ return ComplexType::UNDEFINED unless closure.is_a?(Pin::Method)
42
+ # @sg-ignore need is_a? support
43
+ # @type [Array<Pin::Method>]
44
+ method_stack = closure.rest_of_stack api_map
45
+ logger.debug { "Signature#typify(self=#{self}) - method_stack: #{method_stack}" }
46
+ method_stack.each do |pin|
47
+ sig = pin.signatures.find { |s| s.arity == self.arity }
48
+ next unless sig
49
+ unless sig.return_type.undefined?
50
+ qualified = sig.return_type.qualify(api_map, closure.namespace)
51
+ logger.debug { "Signature#typify(self=#{self}) => #{qualified.rooted_tags.inspect}" }
52
+ return qualified
53
+ end
54
+ end
55
+ out = super
56
+ logger.debug { "Signature#typify(self=#{self}) => #{out}" }
57
+ out
58
+ end
59
+ end
60
+ end
61
+ end
@@ -1,53 +1,53 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Symbol < Base
6
- # @param location [Solargraph::Location]
7
- # @param name [String]
8
- def initialize(location, name, **kwargs)
9
- # @sg-ignore "Unrecognized keyword argument kwargs to Solargraph::Pin::Base#initialize"
10
- super(location: location, name: name, **kwargs)
11
- # @name = name
12
- # @location = location
13
- end
14
-
15
- def namespace
16
- ''
17
- end
18
-
19
- def path
20
- ''
21
- end
22
-
23
- def closure
24
- @closure ||= Pin::ROOT_PIN
25
- end
26
-
27
- def completion_item_kind
28
- Solargraph::LanguageServer::CompletionItemKinds::KEYWORD
29
- end
30
-
31
- def comments
32
- ''
33
- end
34
-
35
- def return_type
36
- @return_type ||= Solargraph::ComplexType::SYMBOL
37
- end
38
-
39
- def directives
40
- []
41
- end
42
-
43
- # @return [::Symbol]
44
- def visibility
45
- :public
46
- end
47
-
48
- def deprecated?
49
- false
50
- end
51
- end
52
- end
53
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Symbol < Base
6
+ # @param location [Solargraph::Location]
7
+ # @param name [String]
8
+ def initialize(location, name, **kwargs)
9
+ # @sg-ignore "Unrecognized keyword argument kwargs to Solargraph::Pin::Base#initialize"
10
+ super(location: location, name: name, **kwargs)
11
+ # @name = name
12
+ # @location = location
13
+ end
14
+
15
+ def namespace
16
+ ''
17
+ end
18
+
19
+ def path
20
+ ''
21
+ end
22
+
23
+ def closure
24
+ @closure ||= Pin::ROOT_PIN
25
+ end
26
+
27
+ def completion_item_kind
28
+ Solargraph::LanguageServer::CompletionItemKinds::KEYWORD
29
+ end
30
+
31
+ def comments
32
+ ''
33
+ end
34
+
35
+ def return_type
36
+ @return_type ||= Solargraph::ComplexType::SYMBOL
37
+ end
38
+
39
+ def directives
40
+ []
41
+ end
42
+
43
+ # @return [::Symbol]
44
+ def visibility
45
+ :public
46
+ end
47
+
48
+ def deprecated?
49
+ false
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,18 +1,18 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class Until < Base
6
- include Breakable
7
-
8
- # @param receiver [Parser::AST::Node, nil]
9
- # @param node [Parser::AST::Node, nil]
10
- # @param context [ComplexType, nil]
11
- # @param args [::Array<Parameter>]
12
- def initialize node: nil, **splat
13
- super(**splat)
14
- @node = node
15
- end
16
- end
17
- end
18
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class Until < Base
6
+ include Breakable
7
+
8
+ # @param receiver [Parser::AST::Node, nil]
9
+ # @param node [Parser::AST::Node, nil]
10
+ # @param context [ComplexType, nil]
11
+ # @param args [::Array<Parameter>]
12
+ def initialize node: nil, **splat
13
+ super(**splat)
14
+ @node = node
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,18 +1,18 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Pin
5
- class While < Base
6
- include Breakable
7
-
8
- # @param receiver [Parser::AST::Node, nil]
9
- # @param node [Parser::AST::Node, nil]
10
- # @param context [ComplexType, nil]
11
- # @param args [::Array<Parameter>]
12
- def initialize node: nil, **splat
13
- super(**splat)
14
- @node = node
15
- end
16
- end
17
- end
18
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Pin
5
+ class While < Base
6
+ include Breakable
7
+
8
+ # @param receiver [Parser::AST::Node, nil]
9
+ # @param node [Parser::AST::Node, nil]
10
+ # @param context [ComplexType, nil]
11
+ # @param args [::Array<Parameter>]
12
+ def initialize node: nil, **splat
13
+ super(**splat)
14
+ @node = node
15
+ end
16
+ end
17
+ end
18
+ end