yard-sorbet 0.5.3 → 0.7.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee5168e45f37fe7d16db534727b57fad2a08e05acda8298ef421589aa72f0354
4
- data.tar.gz: ce10ba6df63c35ba4b52eb4f7d8b02878cfb01fea7424e966aad739691d1d767
3
+ metadata.gz: 50408c1c7ce4b8fe04219273c326e3ac432fe8eaee9c02fe7ba243c204202ff3
4
+ data.tar.gz: e01aabf41806def071f4807d5b4bd45e49c82cdb24360b9e3b9920361505b690
5
5
  SHA512:
6
- metadata.gz: faa0b506388d501f6567ddfd08144185b1e761a1d4d4cfec12e3256f3985f626ddbc2da1423b37896fbe132a1e729a3c44b995b957eb0391aa48ded9519978d4
7
- data.tar.gz: 2afbc9875afecab271abccfd12b5023c3e7db429f23f689fdbed18ed2e0fd7f3b51137ee86b649bb501ea921c469774e2096887d1d063599ae72939951b2f719
6
+ metadata.gz: fa3a9a39d00923dd39824b553900dc12d30cebb3f3770580bbf6400272f52c1bd55905211de9372d7e1bd80ff26d3d2ddaa0c56c437c9a65bb41c24d53e60b08
7
+ data.tar.gz: e322305cd757bb65135a90e9f9bf166161a98756449110714a4ce6dc7f47657cc539d72175c303114e67de7ac5c750c8216c31d8a1d8c818dacdeb5b404cbe1f
@@ -13,18 +13,13 @@ module YARDSorbet
13
13
  # seem to be an API to tweeze them from one node to another without
14
14
  # managing YARD internal state. Instead, we just extract them from
15
15
  # the raw text and re-attach them.
16
- directives = parser.raw_text&.split("\n")&.select do |line|
17
- line.start_with?('@!')
18
- end || []
19
-
16
+ directives = parser.raw_text&.split("\n")&.select { _1.start_with?('@!') } || []
20
17
  [parser.to_docstring, directives]
21
18
  end
22
19
 
23
20
  sig { params(docstring: String, directives: T::Array[String]).void }
24
21
  def self.add_directives(docstring, directives)
25
- directives.each do |directive|
26
- docstring.concat("\n#{directive}")
27
- end
22
+ directives.each { docstring.concat("\n#{_1}") }
28
23
  end
29
24
  end
30
25
  end
@@ -15,7 +15,7 @@ module YARDSorbet
15
15
  # The `@abstract` tag template
16
16
  TAG_TEXT = 'Subclasses must implement the `abstract` methods below.'
17
17
  # Extra text for class namespaces
18
- CLASS_TAG_TEXT = T.let("It cannont be directly instantiated. #{TAG_TEXT}", String)
18
+ CLASS_TAG_TEXT = T.let("It cannot be directly instantiated. #{TAG_TEXT}", String)
19
19
 
20
20
  sig { void }
21
21
  def process
@@ -0,0 +1,35 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module YARDSorbet
5
+ module Handlers
6
+ # Extends any modules included via `mixes_in_class_methods`
7
+ # @see https://sorbet.org/docs/abstract#interfaces-and-the-included-hook
8
+ # Sorbet `mixes_in_class_methods` documentation
9
+ class IncludeHandler < YARD::Handlers::Ruby::Base
10
+ extend T::Sig
11
+
12
+ handles method_call(:include)
13
+ namespace_only
14
+
15
+ sig { void }
16
+ def process
17
+ statement.parameters(false).each do |mixin|
18
+ obj = YARD::CodeObjects::Proxy.new(namespace, mixin.source)
19
+ class_methods_namespace = MixesInClassMethodsHandler.mixed_in_class_methods(obj.to_s)
20
+ next unless class_methods_namespace
21
+
22
+ included_in.mixins(:class) << YARD::CodeObjects::Proxy.new(obj, class_methods_namespace)
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ # @return the namespace object that is including the module
29
+ sig { returns(YARD::CodeObjects::NamespaceObject) }
30
+ def included_in
31
+ statement.namespace ? YARD::CodeObjects::Proxy.new(namespace, statement.namespace.source) : namespace
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,28 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module YARDSorbet
5
+ module Handlers
6
+ # Tracks modules that invoke `mixes_in_class_methods` for use in {IncludeHandler}
7
+ # @see https://sorbet.org/docs/abstract#interfaces-and-the-included-hook
8
+ # Sorbet `mixes_in_class_methods` documentation
9
+ class MixesInClassMethodsHandler < YARD::Handlers::Ruby::Base
10
+ extend T::Sig
11
+
12
+ handles method_call(:mixes_in_class_methods)
13
+ namespace_only
14
+
15
+ @@mix_in_class_methods = T.let({}, T::Hash[String, String]) # rubocop:disable Style/ClassVars
16
+
17
+ sig { params(code_obj: String).returns(T.nilable(String)) }
18
+ def self.mixed_in_class_methods(code_obj)
19
+ @@mix_in_class_methods[code_obj]
20
+ end
21
+
22
+ sig { void }
23
+ def process
24
+ @@mix_in_class_methods[namespace.to_s] = statement.parameters(false)[0].source
25
+ end
26
+ end
27
+ end
28
+ end
@@ -11,7 +11,7 @@ module YARDSorbet
11
11
  namespace_only
12
12
 
13
13
  # These node types attached to sigs represent attr_* declarations
14
- ATTR_NODE_TYPES = T.let(%i[command fcall], T::Array[Symbol])
14
+ ATTR_NODE_TYPES = T.let(%i[command fcall].freeze, T::Array[Symbol])
15
15
  private_constant :ATTR_NODE_TYPES
16
16
 
17
17
  # Swap the method definition docstring and the sig docstring.
@@ -33,10 +33,8 @@ module YARDSorbet
33
33
  # There is a chance that there is a custom initializer, so make sure we steal the existing docstring
34
34
  # and source
35
35
  docstring, directives = Directives.extract_directives(object.docstring)
36
- object.tags.each { |tag| docstring.add_tag(tag) }
37
- props.each do |prop|
38
- TagUtils.upsert_tag(docstring, 'param', prop.types, prop.prop_name, prop.doc)
39
- end
36
+ object.tags.each { docstring.add_tag(_1) }
37
+ props.each { TagUtils.upsert_tag(docstring, 'param', _1.types, _1.prop_name, _1.doc) }
40
38
  TagUtils.upsert_tag(docstring, 'return', ['void'])
41
39
  decorate_t_struct_init(object, props, docstring, directives)
42
40
  end
@@ -1,5 +1,7 @@
1
1
  # typed: strict
2
+ # frozen_string_literal: true
3
+
2
4
  # This is in an rbi so the runtime doesn't depend on experimental sorbet features
3
5
  module YARDSorbet::Handlers::StructClassHandler
4
- requires_ancestor YARD::Handlers::Ruby::ClassHandler
6
+ requires_ancestor { YARD::Handlers::Ruby::ClassHandler }
5
7
  end
@@ -37,8 +37,7 @@ module YARDSorbet
37
37
  # Get the default prop value
38
38
  sig { returns(T.nilable(String)) }
39
39
  def default_value
40
- default_node = statement.traverse { |n| break n if n.type == :label && n.source == 'default:' }
41
- default_node.parent[1].source if default_node
40
+ statement.traverse { break _1 if _1.type == :label && _1.source == 'default:' }&.parent&.[](1)&.source
42
41
  end
43
42
 
44
43
  sig { params(name: String).returns(TStructProp) }
@@ -9,6 +9,8 @@ end
9
9
 
10
10
  require_relative 'handlers/abstract_dsl_handler'
11
11
  require_relative 'handlers/enums_handler'
12
+ require_relative 'handlers/include_handler'
13
+ require_relative 'handlers/mixes_in_class_methods_handler'
12
14
  require_relative 'handlers/sig_handler'
13
15
  require_relative 'handlers/struct_class_handler'
14
16
  require_relative 'handlers/struct_prop_handler'
@@ -8,36 +8,29 @@ module YARDSorbet
8
8
 
9
9
  # Command node types that can have type signatures
10
10
  ATTRIBUTE_METHODS = T.let(%i[attr attr_accessor attr_reader attr_writer].freeze, T::Array[Symbol])
11
- # Node types that can have type signatures
12
- SIGABLE_NODE = T.type_alias do
13
- T.any(YARD::Parser::Ruby::MethodDefinitionNode, YARD::Parser::Ruby::MethodCallNode)
14
- end
15
11
  # Skip these method contents during BFS node traversal, they can have their own nested types via `T.Proc`
16
- SKIP_METHOD_CONTENTS = T.let(%i[params returns], T::Array[Symbol])
12
+ SKIP_METHOD_CONTENTS = T.let(%i[params returns].freeze, T::Array[Symbol])
13
+ # Node types that can have type signatures
14
+ SigableNode = T.type_alias { T.any(YARD::Parser::Ruby::MethodDefinitionNode, YARD::Parser::Ruby::MethodCallNode) }
17
15
 
18
- private_constant :ATTRIBUTE_METHODS, :SIGABLE_NODE
16
+ private_constant :ATTRIBUTE_METHODS, :SKIP_METHOD_CONTENTS, :SigableNode
19
17
 
20
- # Traverese AST nodes in breadth-first order
18
+ # Traverse AST nodes in breadth-first order
21
19
  # @note This will skip over some node types.
22
20
  # @yield [YARD::Parser::Ruby::AstNode]
23
- sig do
24
- params(
25
- node: YARD::Parser::Ruby::AstNode,
26
- _blk: T.proc.params(n: YARD::Parser::Ruby::AstNode).void
27
- ).void
28
- end
21
+ sig { params(node: YARD::Parser::Ruby::AstNode, _blk: T.proc.params(n: YARD::Parser::Ruby::AstNode).void).void }
29
22
  def self.bfs_traverse(node, &_blk)
30
23
  queue = [node]
31
24
  until queue.empty?
32
25
  n = T.must(queue.shift)
33
26
  yield n
34
- n.children.each { |c| queue.push(c) }
27
+ n.children.each { queue.push(_1) }
35
28
  queue.pop if n.is_a?(YARD::Parser::Ruby::MethodCallNode) && SKIP_METHOD_CONTENTS.include?(n.method_name(true))
36
29
  end
37
30
  end
38
31
 
39
32
  # Gets the node that a sorbet `sig` can be attached do, bypassing visisbility modifiers and the like
40
- sig { params(node: YARD::Parser::Ruby::AstNode).returns(SIGABLE_NODE) }
33
+ sig { params(node: YARD::Parser::Ruby::AstNode).returns(SigableNode) }
41
34
  def self.get_method_node(node)
42
35
  case node
43
36
  when YARD::Parser::Ruby::MethodDefinitionNode
@@ -54,9 +47,8 @@ module YARDSorbet
54
47
  sig { params(node: YARD::Parser::Ruby::AstNode).returns(YARD::Parser::Ruby::AstNode) }
55
48
  def self.sibling_node(node)
56
49
  siblings = node.parent.children
57
- siblings.each_with_index.find do |sibling, i|
58
- return siblings.fetch(i + 1) if sibling.equal?(node)
59
- end
50
+ node_index = siblings.find_index { _1.equal?(node) }
51
+ siblings.fetch(node_index + 1)
60
52
  end
61
53
  end
62
54
  end
@@ -6,18 +6,28 @@ module YARDSorbet
6
6
  module SigToYARD
7
7
  extend T::Sig
8
8
 
9
+ REF_TYPES = T.let({
10
+ 'T::Boolean' => ['Boolean'].freeze, # YARD convention for booleans
11
+ # YARD convention is use singleton objects when applicable:
12
+ # https://www.rubydoc.info/gems/yard/file/docs/Tags.md#Literals
13
+ 'FalseClass' => ['false'].freeze,
14
+ 'NilClass' => ['nil'].freeze,
15
+ 'TrueClass' => ['true'].freeze
16
+ }.freeze, T::Hash[String, [String]])
17
+ private_constant :REF_TYPES
18
+
9
19
  # @see https://yardoc.org/types.html
10
20
  sig { params(node: YARD::Parser::Ruby::AstNode).returns(T::Array[String]) }
11
21
  def self.convert(node)
12
22
  # scrub newlines, as they break the YARD parser
13
- convert_node(node).map { |type| type.gsub(/\n\s*/, ' ') }
23
+ convert_node(node).map { _1.gsub(/\n\s*/, ' ') }
14
24
  end
15
25
 
16
26
  sig { params(node: YARD::Parser::Ruby::AstNode).returns(T::Array[String]) }
17
27
  private_class_method def self.convert_node(node)
18
28
  case node
19
29
  when YARD::Parser::Ruby::MethodCallNode then convert_call(node)
20
- when YARD::Parser::Ruby::ReferenceNode then convert_ref(node)
30
+ when YARD::Parser::Ruby::ReferenceNode then convert_ref(node.source)
21
31
  else convert_node_type(node)
22
32
  end
23
33
  end
@@ -45,8 +55,7 @@ module YARDSorbet
45
55
  return node.source if node.empty? || node.type != :aref
46
56
 
47
57
  collection_type = node.first.source
48
- member_type = node.last.children.map { |child| build_generic_type(child) }.join(', ')
49
-
58
+ member_type = node.last.children.map { build_generic_type(_1) }.join(', ')
50
59
  "#{collection_type}[#{member_type}]"
51
60
  end
52
61
 
@@ -62,11 +71,11 @@ module YARDSorbet
62
71
  end
63
72
  end
64
73
 
65
- sig { params(node: YARD::Parser::Ruby::AstNode).returns(T::Array[String]) }
74
+ sig { params(node: YARD::Parser::Ruby::AstNode).returns([String]) }
66
75
  private_class_method def self.convert_array(node)
67
76
  # https://www.rubydoc.info/gems/yard/file/docs/Tags.md#Order-Dependent_Lists
68
- member_types = node.first.children.map { |n| convert_node(n) }
69
- sequence = member_types.map { |mt| mt.size == 1 ? mt[0] : mt.to_s.tr('"', '') }.join(', ')
77
+ member_types = node.first.children.map { convert_node(_1) }
78
+ sequence = member_types.map { _1.size == 1 ? _1[0] : _1.to_s.tr('"', '') }.join(', ')
70
79
  ["Array(#{sequence})"]
71
80
  end
72
81
 
@@ -75,14 +84,14 @@ module YARDSorbet
75
84
  node.namespace.source == 'T' ? convert_t_method(node) : [node.source]
76
85
  end
77
86
 
78
- sig { params(node: YARD::Parser::Ruby::AstNode).returns(T::Array[String]) }
87
+ sig { params(node: YARD::Parser::Ruby::AstNode).returns([String]) }
79
88
  private_class_method def self.convert_collection(node)
80
89
  collection_type = node.first.source.split('::').last
81
90
  member_type = convert_node(node.last.first).join(', ')
82
91
  ["#{collection_type}<#{member_type}>"]
83
92
  end
84
93
 
85
- sig { params(node: YARD::Parser::Ruby::AstNode).returns(T::Array[String]) }
94
+ sig { params(node: YARD::Parser::Ruby::AstNode).returns([String]) }
86
95
  private_class_method def self.convert_hash(node)
87
96
  kv = node.last.children
88
97
  key_type = convert_node(kv.first).join(', ')
@@ -95,24 +104,15 @@ module YARDSorbet
95
104
  node.children.size == 1 ? convert_node(node.children.first) : [node.source]
96
105
  end
97
106
 
98
- sig { params(node: YARD::Parser::Ruby::AstNode).returns(T::Array[String]) }
99
- private_class_method def self.convert_ref(node)
100
- source = node.source
101
- case source
102
- when 'T::Boolean' then ['Boolean'] # YARD convention for booleans
103
- # YARD convention is use singleton objects when applicable:
104
- # https://www.rubydoc.info/gems/yard/file/docs/Tags.md#Literals
105
- when 'FalseClass' then ['false']
106
- when 'NilClass' then ['nil']
107
- when 'TrueClass' then ['true']
108
- else [source]
109
- end
107
+ sig { params(node_source: String).returns([String]) }
108
+ private_class_method def self.convert_ref(node_source)
109
+ REF_TYPES.fetch(node_source, [node_source])
110
110
  end
111
111
 
112
112
  sig { params(node: YARD::Parser::Ruby::MethodCallNode).returns(T::Array[String]) }
113
113
  private_class_method def self.convert_t_method(node)
114
114
  case node.method_name(true)
115
- when :any then node.last.first.children.map { |n| convert_node(n) }.flatten
115
+ when :any then node.last.first.children.flat_map { convert_node(_1) }
116
116
  # Order matters here, putting `nil` last results in a more concise
117
117
  # return syntax in the UI (superscripted `?`)
118
118
  # https://github.com/lsegal/yard/blob/cfa62ae/lib/yard/templates/helpers/html_helper.rb#L499-L500
@@ -121,7 +121,7 @@ module YARDSorbet
121
121
  end
122
122
  end
123
123
 
124
- sig { params(node: YARD::Parser::Ruby::AstNode).returns(T::Array[String]) }
124
+ sig { params(node: YARD::Parser::Ruby::AstNode).returns([String]) }
125
125
  private_class_method def self.convert_unknown(node)
126
126
  log.warn("Unsupported sig #{node.type} node #{node.source}")
127
127
  [node.source]
@@ -1,4 +1,4 @@
1
- # typed: strict
1
+ # typed: strong
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module YARDSorbet
@@ -8,11 +8,10 @@ module YARDSorbet
8
8
 
9
9
  # @return the tag with the matching `tag_name` and `name`, or `nil`
10
10
  sig do
11
- params(docstring: YARD::Docstring, tag_name: String, name: T.nilable(String))
12
- .returns(T.nilable(YARD::Tags::Tag))
11
+ params(docstring: YARD::Docstring, tag_name: String, name: T.nilable(String)).returns(T.nilable(YARD::Tags::Tag))
13
12
  end
14
13
  def self.find_tag(docstring, tag_name, name)
15
- docstring.tags.find { |t| t.tag_name == tag_name && t.name == name }
14
+ docstring.tags.find { _1.tag_name == tag_name && _1.name == name }
16
15
  end
17
16
 
18
17
  # Create or update a `YARD` tag with type information
@@ -31,7 +30,7 @@ module YARDSorbet
31
30
  return unless types
32
31
 
33
32
  # Updating a tag in place doesn't seem to work, so we'll delete it, add the types, and re-add it
34
- docstring.delete_tag_if { |t| t == tag }
33
+ docstring.delete_tag_if { _1 == tag }
35
34
  # overwrite any existing type annotation (sigs should win)
36
35
  tag.types = types
37
36
  tag.text = text unless text.empty?
@@ -4,5 +4,5 @@
4
4
  # Types are documentation
5
5
  module YARDSorbet
6
6
  # {https://rubygems.org/gems/yard-sorbet Version history}
7
- VERSION = '0.5.3'
7
+ VERSION = '0.7.0'
8
8
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yard-sorbet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Douglas Eichelberger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-01 00:00:00.000000000 Z
11
+ date: 2022-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler-audit
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.9.1
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.9.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: codecov
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 0.6.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 0.6.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -86,28 +86,28 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.18.0
89
+ version: 1.35.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 1.18.0
96
+ version: 1.35.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rubocop-performance
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 1.11.0
103
+ version: 1.14.0
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 1.11.0
110
+ version: 1.14.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rubocop-rake
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 2.4.0
131
+ version: 2.12.1
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 2.4.0
138
+ version: 2.12.1
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rubocop-sorbet
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -151,33 +151,33 @@ dependencies:
151
151
  - !ruby/object:Gem::Version
152
152
  version: 0.6.0
153
153
  - !ruby/object:Gem::Dependency
154
- name: simplecov
154
+ name: sorbet
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ">="
157
+ - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: '0'
159
+ version: 0.5.9204
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ">="
164
+ - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: '0'
166
+ version: 0.5.9204
167
167
  - !ruby/object:Gem::Dependency
168
- name: sorbet
168
+ name: tapioca
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: 0.5.6289
173
+ version: 0.9.4
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: 0.5.6289
180
+ version: 0.9.4
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: sorbet-runtime
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -220,6 +220,8 @@ files:
220
220
  - lib/yard-sorbet/handlers.rb
221
221
  - lib/yard-sorbet/handlers/abstract_dsl_handler.rb
222
222
  - lib/yard-sorbet/handlers/enums_handler.rb
223
+ - lib/yard-sorbet/handlers/include_handler.rb
224
+ - lib/yard-sorbet/handlers/mixes_in_class_methods_handler.rb
223
225
  - lib/yard-sorbet/handlers/sig_handler.rb
224
226
  - lib/yard-sorbet/handlers/struct_class_handler.rb
225
227
  - lib/yard-sorbet/handlers/struct_class_handler.rbi
@@ -237,6 +239,7 @@ metadata:
237
239
  changelog_uri: https://github.com/dduugg/yard-sorbet/blob/main/CHANGELOG.md
238
240
  documentation_uri: https://dduugg.github.io/yard-sorbet/
239
241
  homepage_uri: https://github.com/dduugg/yard-sorbet
242
+ rubygems_mfa_required: 'true'
240
243
  source_code_uri: https://github.com/dduugg/yard-sorbet
241
244
  wiki_uri: https://github.com/dduugg/yard-sorbet/wiki
242
245
  post_install_message:
@@ -247,14 +250,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
247
250
  requirements:
248
251
  - - ">="
249
252
  - !ruby/object:Gem::Version
250
- version: 2.5.0
253
+ version: 2.7.0
251
254
  required_rubygems_version: !ruby/object:Gem::Requirement
252
255
  requirements:
253
256
  - - ">="
254
257
  - !ruby/object:Gem::Version
255
258
  version: '0'
256
259
  requirements: []
257
- rubygems_version: 3.1.6
260
+ rubygems_version: 3.2.33
258
261
  signing_key:
259
262
  specification_version: 4
260
263
  summary: Create YARD docs from Sorbet type signatures