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,91 +1,93 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Convention
5
- module DataDefinition
6
- # A node wrapper for a Data definition via inheritance.
7
- # @example
8
- # class MyData < Data.new(:bar, :baz)
9
- # def foo
10
- # end
11
- # end
12
- class DataDefintionNode
13
- class << self
14
- # @example
15
- # s(:class,
16
- # s(:const, nil, :Foo),
17
- # s(:send,
18
- # s(:const, nil, :Data), :define,
19
- # s(:sym, :bar),
20
- # s(:sym, :baz)),
21
- # s(:hash,
22
- # s(:pair,
23
- # s(:sym, :keyword_init),
24
- # s(:true)))),
25
- # s(:def, :foo,
26
- # s(:args),
27
- # s(:send, nil, :bar)))
28
- #
29
- # @param node [Parser::AST::Node]
30
- def match?(node)
31
- return false unless node&.type == :class
32
-
33
- data_definition_node?(node.children[1])
34
- end
35
-
36
- private
37
-
38
- # @param data_node [Parser::AST::Node]
39
- # @return [Boolean]
40
- def data_definition_node?(data_node)
41
- return false unless data_node.is_a?(::Parser::AST::Node)
42
- return false unless data_node&.type == :send
43
- return false unless data_node.children[0]&.type == :const
44
- return false unless data_node.children[0].children[1] == :Data
45
- return false unless data_node.children[1] == :define
46
-
47
- true
48
- end
49
- end
50
-
51
- # @param node [Parser::AST::Node]
52
- def initialize(node)
53
- @node = node
54
- end
55
-
56
- # @return [String]
57
- def class_name
58
- Parser::NodeMethods.unpack_name(node)
59
- end
60
-
61
- # @return [Array<Array(Parser::AST::Node, String)>]
62
- def attributes
63
- data_attribute_nodes.map do |data_def_param|
64
- next unless data_def_param.type == :sym
65
- [data_def_param, data_def_param.children[0].to_s]
66
- end.compact
67
- end
68
-
69
- # @return [Parser::AST::Node]
70
- def body_node
71
- node.children[2]
72
- end
73
-
74
- private
75
-
76
- # @return [Parser::AST::Node]
77
- attr_reader :node
78
-
79
- # @return [Parser::AST::Node, nil]
80
- def data_node
81
- node.children[1]
82
- end
83
-
84
- # @return [Array<Parser::AST::Node>]
85
- def data_attribute_nodes
86
- data_node.children[2..-1]
87
- end
88
- end
89
- end
90
- end
91
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Convention
5
+ module DataDefinition
6
+ # A node wrapper for a Data definition via inheritance.
7
+ # @example
8
+ # class MyData < Data.new(:bar, :baz)
9
+ # def foo
10
+ # end
11
+ # end
12
+ class DataDefintionNode
13
+ class << self
14
+ # @example
15
+ # s(:class,
16
+ # s(:const, nil, :Foo),
17
+ # s(:send,
18
+ # s(:const, nil, :Data), :define,
19
+ # s(:sym, :bar),
20
+ # s(:sym, :baz)),
21
+ # s(:hash,
22
+ # s(:pair,
23
+ # s(:sym, :keyword_init),
24
+ # s(:true)))),
25
+ # s(:def, :foo,
26
+ # s(:args),
27
+ # s(:send, nil, :bar)))
28
+ #
29
+ # @param node [Parser::AST::Node]
30
+ def match?(node)
31
+ return false unless node&.type == :class
32
+
33
+ data_definition_node?(node.children[1])
34
+ end
35
+
36
+ private
37
+
38
+ # @param data_node [Parser::AST::Node]
39
+ # @return [Boolean]
40
+ def data_definition_node?(data_node)
41
+ return false unless data_node.is_a?(::Parser::AST::Node)
42
+ return false unless data_node&.type == :send
43
+ return false unless data_node.children[0]&.type == :const
44
+ return false unless data_node.children[0].children[1] == :Data
45
+ return false unless data_node.children[1] == :define
46
+
47
+ true
48
+ end
49
+ end
50
+
51
+ # @param node [Parser::AST::Node]
52
+ def initialize(node)
53
+ @node = node
54
+ end
55
+
56
+ # @return [String]
57
+ def class_name
58
+ Parser::NodeMethods.unpack_name(node)
59
+ end
60
+
61
+ # @return [Array<Array(Parser::AST::Node, String)>]
62
+ def attributes
63
+ data_attribute_nodes.map do |data_def_param|
64
+ next unless data_def_param.type == :sym
65
+ [data_def_param, data_def_param.children[0].to_s]
66
+ end.compact
67
+ end
68
+
69
+ # @return [Parser::AST::Node, nil]
70
+ def body_node
71
+ node.children[2]
72
+ end
73
+
74
+ private
75
+
76
+ # @return [Parser::AST::Node]
77
+ attr_reader :node
78
+
79
+ # @return [Parser::AST::Node, nil]
80
+ def data_node
81
+ node.children[1]
82
+ end
83
+
84
+ # @sg-ignore Need to add nil check here
85
+ # @return [Array<Parser::AST::Node>]
86
+ def data_attribute_nodes
87
+ # @sg-ignore Need to add nil check here
88
+ data_node.children[2..-1]
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -1,105 +1,108 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Convention
5
- module DataDefinition
6
- autoload :DataDefintionNode, 'solargraph/convention/data_definition/data_definition_node'
7
- autoload :DataAssignmentNode, 'solargraph/convention/data_definition/data_assignment_node'
8
-
9
- module NodeProcessors
10
- class DataNode < Parser::NodeProcessor::Base
11
- # @return [Boolean] continue processing the next processor of the same node.
12
- def process
13
- return true if data_definition_node.nil?
14
-
15
- loc = get_node_location(node)
16
- nspin = Solargraph::Pin::Namespace.new(
17
- type: :class,
18
- location: loc,
19
- closure: region.closure,
20
- name: data_definition_node.class_name,
21
- comments: comments_for(node),
22
- visibility: :public,
23
- gates: region.closure.gates.freeze
24
- )
25
- pins.push nspin
26
-
27
- # define initialize method
28
- initialize_method_pin = Pin::Method.new(
29
- name: 'initialize',
30
- parameters: [],
31
- scope: :instance,
32
- location: get_node_location(node),
33
- closure: nspin,
34
- visibility: :private,
35
- comments: comments_for(node)
36
- )
37
-
38
- # @todo Support both arg and kwarg initializers for Data.define
39
- # Solargraph::SourceMap::Clip#complete_keyword_parameters does not seem to currently take into account [Pin::Method#signatures] hence we only one for :kwarg
40
- pins.push initialize_method_pin
41
-
42
- data_definition_node.attributes.map do |attribute_node, attribute_name|
43
- initialize_method_pin.parameters.push(
44
- Pin::Parameter.new(
45
- name: attribute_name,
46
- decl: :kwarg,
47
- location: get_node_location(attribute_node),
48
- closure: initialize_method_pin
49
- )
50
- )
51
- end
52
-
53
- # define attribute readers and instance variables
54
- data_definition_node.attributes.each do |attribute_node, attribute_name|
55
- name = attribute_name.to_s
56
- method_pin = Pin::Method.new(
57
- name: name,
58
- parameters: [],
59
- scope: :instance,
60
- location: get_node_location(attribute_node),
61
- closure: nspin,
62
- comments: attribute_comments(attribute_node, attribute_name),
63
- visibility: :public
64
- )
65
-
66
- pins.push method_pin
67
-
68
- pins.push Pin::InstanceVariable.new(name: "@#{attribute_name}",
69
- closure: method_pin,
70
- location: get_node_location(attribute_node),
71
- comments: attribute_comments(attribute_node, attribute_name))
72
- end
73
-
74
- process_children region.update(closure: nspin, visibility: :public)
75
-
76
- false
77
- end
78
-
79
- private
80
-
81
- # @return [DataDefintionNode, nil]
82
- def data_definition_node
83
- @data_definition_node ||= if DataDefintionNode.match?(node)
84
- DataDefintionNode.new(node)
85
- elsif DataAssignmentNode.match?(node)
86
- DataAssignmentNode.new(node)
87
- end
88
- end
89
-
90
- # @param attribute_node [Parser::AST::Node]
91
- # @param attribute_name [String]
92
- # @return [String, nil]
93
- def attribute_comments(attribute_node, attribute_name)
94
- data_comments = comments_for(attribute_node)
95
- return if data_comments.nil? || data_comments.empty?
96
-
97
- data_comments.split("\n").find do |row|
98
- row.include?(attribute_name)
99
- end&.gsub('@param', '@return')&.gsub(attribute_name, '')
100
- end
101
- end
102
- end
103
- end
104
- end
105
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Convention
5
+ module DataDefinition
6
+ autoload :DataDefintionNode, 'solargraph/convention/data_definition/data_definition_node'
7
+ autoload :DataAssignmentNode, 'solargraph/convention/data_definition/data_assignment_node'
8
+
9
+ module NodeProcessors
10
+ class DataNode < Parser::NodeProcessor::Base
11
+ # @return [Boolean] continue processing the next processor of the same node.
12
+ def process
13
+ return true if data_definition_node.nil?
14
+
15
+ loc = get_node_location(node)
16
+ nspin = Solargraph::Pin::Namespace.new(
17
+ type: :class,
18
+ location: loc,
19
+ closure: region.closure,
20
+ # @sg-ignore flow sensitive typing needs to handle attrs
21
+ name: data_definition_node.class_name,
22
+ comments: comments_for(node),
23
+ visibility: :public,
24
+ gates: region.closure.gates.freeze
25
+ )
26
+ pins.push nspin
27
+
28
+ # define initialize method
29
+ initialize_method_pin = Pin::Method.new(
30
+ name: 'initialize',
31
+ parameters: [],
32
+ scope: :instance,
33
+ location: get_node_location(node),
34
+ closure: nspin,
35
+ visibility: :private,
36
+ comments: comments_for(node)
37
+ )
38
+
39
+ # @todo Support both arg and kwarg initializers for Data.define
40
+ # Solargraph::SourceMap::Clip#complete_keyword_parameters does not seem to currently take into account [Pin::Method#signatures] hence we only one for :kwarg
41
+ pins.push initialize_method_pin
42
+
43
+ # @sg-ignore flow sensitive typing needs to handle attrs
44
+ data_definition_node.attributes.map do |attribute_node, attribute_name|
45
+ initialize_method_pin.parameters.push(
46
+ Pin::Parameter.new(
47
+ name: attribute_name,
48
+ decl: :kwarg,
49
+ location: get_node_location(attribute_node),
50
+ closure: initialize_method_pin
51
+ )
52
+ )
53
+ end
54
+
55
+ # define attribute readers and instance variables
56
+ # @sg-ignore flow sensitive typing needs to handle attrs
57
+ data_definition_node.attributes.each do |attribute_node, attribute_name|
58
+ name = attribute_name.to_s
59
+ method_pin = Pin::Method.new(
60
+ name: name,
61
+ parameters: [],
62
+ scope: :instance,
63
+ location: get_node_location(attribute_node),
64
+ closure: nspin,
65
+ comments: attribute_comments(attribute_node, attribute_name),
66
+ visibility: :public
67
+ )
68
+
69
+ pins.push method_pin
70
+
71
+ pins.push Pin::InstanceVariable.new(name: "@#{attribute_name}",
72
+ closure: method_pin,
73
+ location: get_node_location(attribute_node),
74
+ comments: attribute_comments(attribute_node, attribute_name))
75
+ end
76
+
77
+ process_children region.update(closure: nspin, visibility: :public)
78
+
79
+ false
80
+ end
81
+
82
+ private
83
+
84
+ # @return [DataDefinition::DataDefintionNode, DataDefinition::DataAssignmentNode, nil]
85
+ def data_definition_node
86
+ @data_definition_node ||= if DataDefintionNode.match?(node)
87
+ DataDefintionNode.new(node)
88
+ elsif DataAssignmentNode.match?(node)
89
+ DataAssignmentNode.new(node)
90
+ end
91
+ end
92
+
93
+ # @param attribute_node [Parser::AST::Node]
94
+ # @param attribute_name [String]
95
+ # @return [String, nil]
96
+ def attribute_comments(attribute_node, attribute_name)
97
+ data_comments = comments_for(attribute_node)
98
+ return if data_comments.nil? || data_comments.empty?
99
+
100
+ data_comments.split("\n").find do |row|
101
+ row.include?(attribute_name)
102
+ end&.gsub('@param', '@return')&.gsub(attribute_name, '')
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
@@ -1,61 +1,62 @@
1
- # frozen_string_literal: true
2
-
3
- module Solargraph
4
- module Convention
5
- module StructDefinition
6
- # A node wrapper for a Struct definition via const assignment.
7
- # @example
8
- # MyStruct = Struct.new(:bar, :baz) do
9
- # def foo
10
- # end
11
- # end
12
- class StructAssignmentNode < StructDefintionNode
13
- class << self
14
- # @example
15
- # s(:casgn, nil, :Foo,
16
- # s(:block,
17
- # s(:send,
18
- # s(:const, nil, :Struct), :new,
19
- # s(:sym, :bar),
20
- # s(:sym, :baz)),
21
- # s(:args),
22
- # s(:def, :foo,
23
- # s(:args),
24
- # s(:send, nil, :bar))))
25
- # @param node [Parser::AST::Node]
26
- def match?(node)
27
- return false unless node&.type == :casgn
28
- return false if node.children[2].nil?
29
-
30
- struct_node = if node.children[2].type == :block
31
- node.children[2].children[0]
32
- else
33
- node.children[2]
34
- end
35
-
36
- struct_definition_node?(struct_node)
37
- end
38
- end
39
-
40
- def class_name
41
- if node.children[0]
42
- Parser::NodeMethods.unpack_name(node.children[0]) + "::#{node.children[1]}"
43
- else
44
- node.children[1].to_s
45
- end
46
- end
47
-
48
- private
49
-
50
- # @return [Parser::AST::Node]
51
- def struct_node
52
- if node.children[2].type == :block
53
- node.children[2].children[0]
54
- else
55
- node.children[2]
56
- end
57
- end
58
- end
59
- end
60
- end
61
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Solargraph
4
+ module Convention
5
+ module StructDefinition
6
+ # A node wrapper for a Struct definition via const assignment.
7
+ # @example
8
+ # MyStruct = Struct.new(:bar, :baz) do
9
+ # def foo
10
+ # end
11
+ # end
12
+ class StructAssignmentNode < StructDefintionNode
13
+ class << self
14
+ # @example
15
+ # s(:casgn, nil, :Foo,
16
+ # s(:block,
17
+ # s(:send,
18
+ # s(:const, nil, :Struct), :new,
19
+ # s(:sym, :bar),
20
+ # s(:sym, :baz)),
21
+ # s(:args),
22
+ # s(:def, :foo,
23
+ # s(:args),
24
+ # s(:send, nil, :bar))))
25
+ #
26
+ # @param node [Parser::AST::Node]
27
+ def match?(node)
28
+ return false unless node&.type == :casgn
29
+ return false if node.children[2].nil?
30
+
31
+ struct_node = if node.children[2].type == :block
32
+ node.children[2].children[0]
33
+ else
34
+ node.children[2]
35
+ end
36
+
37
+ struct_definition_node?(struct_node)
38
+ end
39
+ end
40
+
41
+ def class_name
42
+ if node.children[0]
43
+ Parser::NodeMethods.unpack_name(node.children[0]) + "::#{node.children[1]}"
44
+ else
45
+ node.children[1].to_s
46
+ end
47
+ end
48
+
49
+ private
50
+
51
+ # @return [Parser::AST::Node]
52
+ def struct_node
53
+ if node.children[2].type == :block
54
+ node.children[2].children[0]
55
+ else
56
+ node.children[2]
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end