solargraph 0.58.0 → 0.59.0.dev.1

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 (166) hide show
  1. checksums.yaml +4 -4
  2. data/.envrc +3 -0
  3. data/.gitattributes +2 -0
  4. data/.github/workflows/linting.yml +4 -5
  5. data/.github/workflows/plugins.yml +40 -36
  6. data/.github/workflows/rspec.yml +45 -13
  7. data/.github/workflows/typecheck.yml +2 -2
  8. data/.rubocop_todo.yml +27 -49
  9. data/CHANGELOG.md +3 -0
  10. data/README.md +3 -3
  11. data/Rakefile +1 -0
  12. data/bin/solargraph +8 -8
  13. data/lib/solargraph/api_map/cache.rb +110 -110
  14. data/lib/solargraph/api_map/constants.rb +289 -279
  15. data/lib/solargraph/api_map/index.rb +204 -193
  16. data/lib/solargraph/api_map/source_to_yard.rb +109 -97
  17. data/lib/solargraph/api_map/store.rb +387 -384
  18. data/lib/solargraph/api_map.rb +1000 -945
  19. data/lib/solargraph/complex_type/conformance.rb +176 -0
  20. data/lib/solargraph/complex_type/type_methods.rb +242 -228
  21. data/lib/solargraph/complex_type/unique_type.rb +632 -482
  22. data/lib/solargraph/complex_type.rb +549 -444
  23. data/lib/solargraph/convention/data_definition/data_definition_node.rb +93 -91
  24. data/lib/solargraph/convention/data_definition.rb +108 -105
  25. data/lib/solargraph/convention/struct_definition/struct_assignment_node.rb +62 -61
  26. data/lib/solargraph/convention/struct_definition/struct_definition_node.rb +103 -102
  27. data/lib/solargraph/convention/struct_definition.rb +168 -164
  28. data/lib/solargraph/diagnostics/require_not_found.rb +54 -53
  29. data/lib/solargraph/diagnostics/rubocop.rb +119 -118
  30. data/lib/solargraph/diagnostics/rubocop_helpers.rb +70 -68
  31. data/lib/solargraph/diagnostics/type_check.rb +56 -55
  32. data/lib/solargraph/doc_map.rb +200 -439
  33. data/lib/solargraph/equality.rb +34 -34
  34. data/lib/solargraph/gem_pins.rb +97 -98
  35. data/lib/solargraph/language_server/host/dispatch.rb +131 -130
  36. data/lib/solargraph/language_server/host/message_worker.rb +113 -112
  37. data/lib/solargraph/language_server/host/sources.rb +100 -99
  38. data/lib/solargraph/language_server/host.rb +883 -878
  39. data/lib/solargraph/language_server/message/extended/check_gem_version.rb +109 -114
  40. data/lib/solargraph/language_server/message/extended/document.rb +24 -23
  41. data/lib/solargraph/language_server/message/text_document/completion.rb +58 -56
  42. data/lib/solargraph/language_server/message/text_document/definition.rb +42 -40
  43. data/lib/solargraph/language_server/message/text_document/document_symbol.rb +28 -26
  44. data/lib/solargraph/language_server/message/text_document/formatting.rb +150 -148
  45. data/lib/solargraph/language_server/message/text_document/hover.rb +60 -58
  46. data/lib/solargraph/language_server/message/text_document/signature_help.rb +25 -24
  47. data/lib/solargraph/language_server/message/text_document/type_definition.rb +27 -25
  48. data/lib/solargraph/language_server/message/workspace/workspace_symbol.rb +25 -23
  49. data/lib/solargraph/library.rb +729 -683
  50. data/lib/solargraph/location.rb +87 -82
  51. data/lib/solargraph/logging.rb +57 -37
  52. data/lib/solargraph/parser/comment_ripper.rb +76 -69
  53. data/lib/solargraph/parser/flow_sensitive_typing.rb +483 -255
  54. data/lib/solargraph/parser/node_processor/base.rb +122 -92
  55. data/lib/solargraph/parser/node_processor.rb +63 -62
  56. data/lib/solargraph/parser/parser_gem/class_methods.rb +167 -149
  57. data/lib/solargraph/parser/parser_gem/node_chainer.rb +191 -166
  58. data/lib/solargraph/parser/parser_gem/node_methods.rb +506 -486
  59. data/lib/solargraph/parser/parser_gem/node_processors/and_node.rb +22 -22
  60. data/lib/solargraph/parser/parser_gem/node_processors/args_node.rb +61 -59
  61. data/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb +24 -15
  62. data/lib/solargraph/parser/parser_gem/node_processors/block_node.rb +46 -46
  63. data/lib/solargraph/parser/parser_gem/node_processors/def_node.rb +60 -53
  64. data/lib/solargraph/parser/parser_gem/node_processors/if_node.rb +53 -23
  65. data/lib/solargraph/parser/parser_gem/node_processors/ivasgn_node.rb +41 -40
  66. data/lib/solargraph/parser/parser_gem/node_processors/lvasgn_node.rb +30 -29
  67. data/lib/solargraph/parser/parser_gem/node_processors/masgn_node.rb +61 -59
  68. data/lib/solargraph/parser/parser_gem/node_processors/opasgn_node.rb +98 -98
  69. data/lib/solargraph/parser/parser_gem/node_processors/or_node.rb +22 -0
  70. data/lib/solargraph/parser/parser_gem/node_processors/orasgn_node.rb +17 -17
  71. data/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb +39 -38
  72. data/lib/solargraph/parser/parser_gem/node_processors/sclass_node.rb +53 -52
  73. data/lib/solargraph/parser/parser_gem/node_processors/send_node.rb +296 -291
  74. data/lib/solargraph/parser/parser_gem/node_processors/when_node.rb +23 -0
  75. data/lib/solargraph/parser/parser_gem/node_processors/while_node.rb +33 -29
  76. data/lib/solargraph/parser/parser_gem/node_processors.rb +74 -70
  77. data/lib/solargraph/parser/region.rb +75 -69
  78. data/lib/solargraph/parser/snippet.rb +17 -17
  79. data/lib/solargraph/pin/base.rb +761 -729
  80. data/lib/solargraph/pin/base_variable.rb +418 -126
  81. data/lib/solargraph/pin/block.rb +126 -104
  82. data/lib/solargraph/pin/breakable.rb +13 -9
  83. data/lib/solargraph/pin/callable.rb +278 -231
  84. data/lib/solargraph/pin/closure.rb +68 -72
  85. data/lib/solargraph/pin/common.rb +94 -79
  86. data/lib/solargraph/pin/compound_statement.rb +55 -0
  87. data/lib/solargraph/pin/conversions.rb +124 -123
  88. data/lib/solargraph/pin/delegated_method.rb +131 -120
  89. data/lib/solargraph/pin/documenting.rb +115 -114
  90. data/lib/solargraph/pin/instance_variable.rb +38 -34
  91. data/lib/solargraph/pin/keyword.rb +16 -20
  92. data/lib/solargraph/pin/local_variable.rb +31 -75
  93. data/lib/solargraph/pin/method.rb +720 -672
  94. data/lib/solargraph/pin/method_alias.rb +42 -34
  95. data/lib/solargraph/pin/namespace.rb +121 -115
  96. data/lib/solargraph/pin/parameter.rb +338 -275
  97. data/lib/solargraph/pin/proxy_type.rb +40 -39
  98. data/lib/solargraph/pin/reference/override.rb +47 -47
  99. data/lib/solargraph/pin/reference/superclass.rb +17 -15
  100. data/lib/solargraph/pin/reference.rb +41 -39
  101. data/lib/solargraph/pin/search.rb +62 -61
  102. data/lib/solargraph/pin/signature.rb +69 -61
  103. data/lib/solargraph/pin/symbol.rb +53 -53
  104. data/lib/solargraph/pin/until.rb +18 -18
  105. data/lib/solargraph/pin/while.rb +18 -18
  106. data/lib/solargraph/pin.rb +46 -44
  107. data/lib/solargraph/pin_cache.rb +665 -245
  108. data/lib/solargraph/position.rb +118 -119
  109. data/lib/solargraph/range.rb +112 -112
  110. data/lib/solargraph/rbs_map/conversions.rb +846 -823
  111. data/lib/solargraph/rbs_map/core_map.rb +65 -58
  112. data/lib/solargraph/rbs_map/stdlib_map.rb +72 -43
  113. data/lib/solargraph/rbs_map.rb +217 -163
  114. data/lib/solargraph/shell.rb +397 -352
  115. data/lib/solargraph/source/chain/call.rb +372 -337
  116. data/lib/solargraph/source/chain/constant.rb +28 -26
  117. data/lib/solargraph/source/chain/hash.rb +35 -34
  118. data/lib/solargraph/source/chain/if.rb +29 -28
  119. data/lib/solargraph/source/chain/instance_variable.rb +34 -13
  120. data/lib/solargraph/source/chain/literal.rb +53 -48
  121. data/lib/solargraph/source/chain/or.rb +31 -23
  122. data/lib/solargraph/source/chain.rb +294 -291
  123. data/lib/solargraph/source/change.rb +89 -82
  124. data/lib/solargraph/source/cursor.rb +172 -166
  125. data/lib/solargraph/source/encoding_fixes.rb +23 -23
  126. data/lib/solargraph/source/source_chainer.rb +204 -194
  127. data/lib/solargraph/source/updater.rb +59 -55
  128. data/lib/solargraph/source.rb +524 -498
  129. data/lib/solargraph/source_map/clip.rb +237 -226
  130. data/lib/solargraph/source_map/data.rb +37 -34
  131. data/lib/solargraph/source_map/mapper.rb +282 -259
  132. data/lib/solargraph/source_map.rb +220 -212
  133. data/lib/solargraph/type_checker/problem.rb +34 -32
  134. data/lib/solargraph/type_checker/rules.rb +157 -84
  135. data/lib/solargraph/type_checker.rb +895 -814
  136. data/lib/solargraph/version.rb +5 -5
  137. data/lib/solargraph/workspace/config.rb +257 -255
  138. data/lib/solargraph/workspace/gemspecs.rb +367 -0
  139. data/lib/solargraph/workspace/require_paths.rb +98 -97
  140. data/lib/solargraph/workspace.rb +362 -220
  141. data/lib/solargraph/yard_map/helpers.rb +45 -44
  142. data/lib/solargraph/yard_map/mapper/to_method.rb +134 -130
  143. data/lib/solargraph/yard_map/mapper/to_namespace.rb +32 -31
  144. data/lib/solargraph/yard_map/mapper.rb +84 -79
  145. data/lib/solargraph/yardoc.rb +97 -87
  146. data/lib/solargraph.rb +126 -105
  147. data/rbs/fills/rubygems/0/dependency.rbs +193 -0
  148. data/rbs/fills/tuple/tuple.rbs +28 -0
  149. data/rbs/shims/ast/0/node.rbs +5 -0
  150. data/rbs/shims/diff-lcs/1.5/diff-lcs.rbs +11 -0
  151. data/rbs_collection.yaml +1 -1
  152. data/solargraph.gemspec +2 -1
  153. metadata +23 -17
  154. data/lib/solargraph/type_checker/checks.rb +0 -124
  155. data/lib/solargraph/type_checker/param_def.rb +0 -37
  156. data/lib/solargraph/yard_map/to_method.rb +0 -89
  157. data/sig/shims/ast/0/node.rbs +0 -5
  158. /data/{sig → rbs}/shims/ast/2.4/.rbs_meta.yaml +0 -0
  159. /data/{sig → rbs}/shims/ast/2.4/ast.rbs +0 -0
  160. /data/{sig → rbs}/shims/parser/3.2.0.1/builders/default.rbs +0 -0
  161. /data/{sig → rbs}/shims/parser/3.2.0.1/manifest.yaml +0 -0
  162. /data/{sig → rbs}/shims/parser/3.2.0.1/parser.rbs +0 -0
  163. /data/{sig → rbs}/shims/parser/3.2.0.1/polyfill.rbs +0 -0
  164. /data/{sig → rbs}/shims/thor/1.2.0.1/.rbs_meta.yaml +0 -0
  165. /data/{sig → rbs}/shims/thor/1.2.0.1/manifest.yaml +0 -0
  166. /data/{sig → rbs}/shims/thor/1.2.0.1/thor.rbs +0 -0
@@ -1,92 +1,122 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- module NodeProcessor
6
- class Base
7
- # @return [Parser::AST::Node]
8
- attr_reader :node
9
-
10
- # @return [Region]
11
- attr_reader :region
12
-
13
- # @return [Array<Pin::Base>]
14
- attr_reader :pins
15
-
16
- # @return [Array<Pin::LocalVariable>]
17
- attr_reader :locals
18
-
19
- # @param node [Parser::AST::Node]
20
- # @param region [Region]
21
- # @param pins [Array<Pin::Base>]
22
- # @param locals [Array<Pin::LocalVariable>]
23
- def initialize node, region, pins, locals
24
- @node = node
25
- @region = region
26
- @pins = pins
27
- @locals = locals
28
- @processed_children = false
29
- end
30
-
31
- # Subclasses should override this method to generate new pins.
32
- #
33
- # @return [Boolean] continue processing the next processor of the same node type.
34
- # @return [void] In case there is only one processor registered for the node type, it can be void.
35
- def process
36
- process_children
37
-
38
- true
39
- end
40
-
41
- private
42
-
43
- # @param subregion [Region]
44
- # @return [void]
45
- def process_children subregion = region
46
- return if @processed_children
47
- @processed_children = true
48
- node.children.each do |child|
49
- next unless Parser.is_ast_node?(child)
50
- NodeProcessor.process(child, subregion, pins, locals)
51
- end
52
- end
53
-
54
- # @param node [Parser::AST::Node]
55
- # @return [Solargraph::Location]
56
- def get_node_location(node)
57
- range = Parser.node_range(node)
58
- Location.new(region.filename, range)
59
- end
60
-
61
- # @param node [Parser::AST::Node]
62
- # @return [String, nil]
63
- def comments_for(node)
64
- region.source.comments_for(node)
65
- end
66
-
67
- # @param position [Solargraph::Position]
68
- # @return [Pin::Closure, nil]
69
- def named_path_pin position
70
- pins.select do |pin|
71
- pin.is_a?(Pin::Closure) && pin.path && !pin.path.empty? && pin.location.range.contain?(position)
72
- end.last
73
- end
74
-
75
- # @todo Candidate for deprecation
76
- # @param position [Solargraph::Position]
77
- # @return [Pin::Closure, nil]
78
- def block_pin position
79
- # @todo determine if this can return a Pin::Block
80
- pins.select { |pin| pin.is_a?(Pin::Closure) && pin.location.range.contain?(position) }.last
81
- end
82
-
83
- # @todo Candidate for deprecation
84
- # @param position [Solargraph::Position]
85
- # @return [Pin::Closure, nil]
86
- def closure_pin position
87
- pins.select { |pin| pin.is_a?(Pin::Closure) && pin.location.range.contain?(position) }.last
88
- end
89
- end
90
- end
91
- end
92
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ module NodeProcessor
6
+ class Base
7
+ # @return [Parser::AST::Node]
8
+ attr_reader :node
9
+
10
+ # @return [Region]
11
+ attr_reader :region
12
+
13
+ # @return [Array<Pin::Base>]
14
+ attr_reader :pins
15
+
16
+ # @return [Array<Pin::LocalVariable>]
17
+ attr_reader :locals
18
+
19
+ # @return [Array<Pin::InstanceVariable>]
20
+ attr_reader :ivars
21
+
22
+ # @param node [Parser::AST::Node]
23
+ # @param region [Region]
24
+ # @param pins [Array<Pin::Base>]
25
+ # @param locals [Array<Pin::LocalVariable>]
26
+ # @param ivars [Array<Pin::InstanceVariable>]
27
+ def initialize node, region, pins, locals, ivars
28
+ @node = node
29
+ @region = region
30
+ @pins = pins
31
+ @locals = locals
32
+ @ivars = ivars
33
+ @processed_children = false
34
+ end
35
+
36
+ # Subclasses should override this method to generate new pins.
37
+ #
38
+ # @return [Boolean] continue processing the next processor of the same node type.
39
+ # @return [void] In case there is only one processor registered for the node type, it can be void.
40
+ def process
41
+ process_children
42
+
43
+ true
44
+ end
45
+
46
+ private
47
+
48
+ # @return [Solargraph::Location]
49
+ def location
50
+ get_node_location(node)
51
+ end
52
+
53
+ # @return [Solargraph::Position]
54
+ def position
55
+ Position.new(node.loc.line, node.loc.column)
56
+ end
57
+
58
+ # @sg-ignore downcast output of Enumerable#select
59
+ # @return [Solargraph::Pin::Breakable, nil]
60
+ def enclosing_breakable_pin
61
+ pins.select{|pin| pin.is_a?(Pin::Breakable) && pin.location&.range&.contain?(position)}.last
62
+ end
63
+
64
+ # @todo downcast output of Enumerable#select
65
+ # @return [Solargraph::Pin::CompoundStatement, nil]
66
+ def enclosing_compound_statement_pin
67
+ pins.select{|pin| pin.is_a?(Pin::CompoundStatement) && pin.location&.range&.contain?(position)}.last
68
+ end
69
+
70
+ # @param subregion [Region]
71
+ # @return [void]
72
+ def process_children subregion = region
73
+ return if @processed_children
74
+ @processed_children = true
75
+ node.children.each do |child|
76
+ next unless Parser.is_ast_node?(child)
77
+ NodeProcessor.process(child, subregion, pins, locals, ivars)
78
+ end
79
+ end
80
+
81
+ # @param node [Parser::AST::Node]
82
+ # @return [Solargraph::Location]
83
+ def get_node_location(node)
84
+ range = Parser.node_range(node)
85
+ Location.new(region.filename, range)
86
+ end
87
+
88
+ # @param node [Parser::AST::Node]
89
+ # @return [String, nil]
90
+ def comments_for(node)
91
+ region.source.comments_for(node)
92
+ end
93
+
94
+ # @param position [Solargraph::Position]
95
+ # @return [Pin::Closure, nil]
96
+ def named_path_pin position
97
+ pins.select do |pin|
98
+ # @sg-ignore Need to add nil check here
99
+ pin.is_a?(Pin::Closure) && pin.path && !pin.path.empty? && pin.location.range.contain?(position)
100
+ end.last
101
+ end
102
+
103
+ # @todo Candidate for deprecation
104
+ # @param position [Solargraph::Position]
105
+ # @return [Pin::Closure, nil]
106
+ def block_pin position
107
+ # @todo determine if this can return a Pin::Block
108
+ # @sg-ignore Need to add nil check here
109
+ pins.select { |pin| pin.is_a?(Pin::Closure) && pin.location.range.contain?(position) }.last
110
+ end
111
+
112
+ # @todo Candidate for deprecation
113
+ # @param position [Solargraph::Position]
114
+ # @return [Pin::Closure, nil]
115
+ def closure_pin position
116
+ # @sg-ignore Need to add nil check here
117
+ pins.select { |pin| pin.is_a?(Pin::Closure) && pin.location.range.contain?(position) }.last
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -1,62 +1,63 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Parser
5
- # The processor classes used by SourceMap::Mapper to generate pins from
6
- # parser nodes.
7
- #
8
- module NodeProcessor
9
- autoload :Base, 'solargraph/parser/node_processor/base'
10
-
11
- class << self
12
- # @type [Hash{Symbol => Array<Class<NodeProcessor::Base>>}]
13
- @@processors ||= {}
14
-
15
- # Register a processor for a node type. You can register multiple processors for the same type.
16
- # If a node processor returns true, it will skip the next processor of the same node type.
17
- #
18
- # @param type [Symbol]
19
- # @param cls [Class<NodeProcessor::Base>]
20
- # @return [Array<Class<NodeProcessor::Base>>]
21
- def register type, cls
22
- @@processors[type] ||= []
23
- @@processors[type] << cls
24
- end
25
-
26
- # @param type [Symbol]
27
- # @param cls [Class<NodeProcessor::Base>]
28
- #
29
- # @return [void]
30
- def deregister type, cls
31
- @@processors[type].delete(cls)
32
- end
33
- end
34
-
35
- # @param node [Parser::AST::Node]
36
- # @param region [Region]
37
- # @param pins [Array<Pin::Base>]
38
- # @param locals [Array<Pin::BaseVariable>]
39
- # @return [Array(Array<Pin::Base>, Array<Pin::Base>)]
40
- def self.process node, region = Region.new, pins = [], locals = []
41
- if pins.empty?
42
- pins.push Pin::Namespace.new(
43
- location: region.source.location,
44
- name: '',
45
- source: :parser,
46
- )
47
- end
48
- return [pins, locals] unless Parser.is_ast_node?(node)
49
- node_processor_classes = @@processors[node.type] || [NodeProcessor::Base]
50
-
51
- node_processor_classes.each do |klass|
52
- processor = klass.new(node, region, pins, locals)
53
- process_next = processor.process
54
-
55
- break unless process_next
56
- end
57
-
58
- [pins, locals]
59
- end
60
- end
61
- end
62
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Parser
5
+ # The processor classes used by SourceMap::Mapper to generate pins from
6
+ # parser nodes.
7
+ #
8
+ module NodeProcessor
9
+ autoload :Base, 'solargraph/parser/node_processor/base'
10
+
11
+ class << self
12
+ # @type [Hash{Symbol => Array<Class<NodeProcessor::Base>>}]
13
+ @@processors ||= {}
14
+
15
+ # Register a processor for a node type. You can register multiple processors for the same type.
16
+ # If a node processor returns true, it will skip the next processor of the same node type.
17
+ #
18
+ # @param type [Symbol]
19
+ # @param cls [Class<NodeProcessor::Base>]
20
+ # @return [Array<Class<NodeProcessor::Base>>]
21
+ def register type, cls
22
+ @@processors[type] ||= []
23
+ @@processors[type] << cls
24
+ end
25
+
26
+ # @param type [Symbol]
27
+ # @param cls [Class<NodeProcessor::Base>]
28
+ #
29
+ # @return [void]
30
+ def deregister type, cls
31
+ @@processors[type].delete(cls)
32
+ end
33
+ end
34
+
35
+ # @param node [Parser::AST::Node]
36
+ # @param region [Region]
37
+ # @param pins [Array<Pin::Base>]
38
+ # @param locals [Array<Pin::LocalVariable>]
39
+ # @param ivars [Array<Pin::InstanceVariable>]
40
+ # @return [Array(Array<Pin::Base>, Array<Pin::LocalVariable>, Array<Pin::InstanceVariable>)]
41
+ def self.process node, region = Region.new, pins = [], locals = [], ivars = []
42
+ if pins.empty?
43
+ pins.push Pin::Namespace.new(
44
+ location: region.source.location,
45
+ name: '',
46
+ source: :parser,
47
+ )
48
+ end
49
+ return [pins, locals, ivars] unless Parser.is_ast_node?(node)
50
+ node_processor_classes = @@processors[node.type] || [NodeProcessor::Base]
51
+
52
+ node_processor_classes.each do |klass|
53
+ processor = klass.new(node, region, pins, locals, ivars)
54
+ process_next = processor.process
55
+
56
+ break unless process_next
57
+ end
58
+
59
+ [pins, locals, ivars]
60
+ end
61
+ end
62
+ end
63
+ end