rbs 3.0.4 → 3.1.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.
@@ -0,0 +1,184 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Subtractor
5
+ def initialize(minuend, subtrahend)
6
+ @minuend = minuend
7
+ @subtrahend = subtrahend
8
+ end
9
+
10
+ def call(minuend = @minuend, context: nil)
11
+ minuend.map do |decl|
12
+ case decl
13
+ when AST::Declarations::Constant
14
+ name = absolute_typename(decl.name, context: context)
15
+ decl unless @subtrahend.constant_name?(name)
16
+ when AST::Declarations::Interface
17
+ name = absolute_typename(decl.name, context: context)
18
+ decl unless @subtrahend.interface_name?(name)
19
+ when AST::Declarations::Class, AST::Declarations::Module
20
+ name = absolute_typename(decl.name, context: context)
21
+ case
22
+ when @subtrahend.class_decl?(name) && decl.is_a?(AST::Declarations::Class)
23
+ filter_members(decl, context: context)
24
+ when @subtrahend.module_decl?(name) && decl.is_a?(AST::Declarations::Module)
25
+ filter_members(decl, context: context)
26
+ when @subtrahend.constant_name?(name)
27
+ nil
28
+ else
29
+ decl
30
+ end
31
+ when AST::Declarations::Global
32
+ decl unless @subtrahend.global_decls[decl.name]
33
+ when AST::Declarations::TypeAlias
34
+ name = absolute_typename(decl.name, context: context)
35
+ decl unless @subtrahend.type_alias_decls[name]
36
+ when AST::Declarations::ClassAlias
37
+ name = absolute_typename(decl.new_name, context: context)
38
+ decl unless @subtrahend.class_alias?(name) || @subtrahend.class_decl?(name)
39
+ when AST::Declarations::ModuleAlias
40
+ name = absolute_typename(decl.new_name, context: context)
41
+ decl unless @subtrahend.module_alias?(name) || @subtrahend.module_decl?(name)
42
+ else
43
+ raise "unknwon decl: #{(_ = decl).class}"
44
+ end
45
+ end.compact
46
+ end
47
+
48
+ private def filter_members(decl, context:)
49
+ owner = absolute_typename(decl.name, context: context)
50
+
51
+ context = _ = [context, decl.name]
52
+ children = call(decl.each_decl.to_a, context: context) +
53
+ decl.each_member.reject { |m| member_exist?(owner, m, context: context) }
54
+ return nil if children.empty?
55
+
56
+ update_decl(decl, members: children)
57
+ end
58
+
59
+ private def member_exist?(owner, member, context:)
60
+ case member
61
+ when AST::Members::MethodDefinition
62
+ method_exist?(owner, member.name, member.kind)
63
+ when AST::Members::Alias
64
+ method_exist?(owner, member.new_name, member.kind)
65
+ when AST::Members::AttrReader
66
+ method_exist?(owner, member.name, member.kind)
67
+ when AST::Members::AttrWriter
68
+ method_exist?(owner, :"#{member.name}=", member.kind)
69
+ when AST::Members::AttrAccessor
70
+ # TODO: It unexpectedly removes attr_accessor even if either reader or writer does not exist in the subtrahend.
71
+ method_exist?(owner, member.name, member.kind) || method_exist?(owner, :"#{member.name}=", member.kind)
72
+ when AST::Members::InstanceVariable
73
+ ivar_exist?(owner, member.name, :instance)
74
+ when AST::Members::ClassInstanceVariable
75
+ ivar_exist?(owner, member.name, :singleton)
76
+ when AST::Members::ClassVariable
77
+ cvar_exist?(owner, member.name)
78
+ when AST::Members::Include, AST::Members::Extend, AST::Members::Prepend
79
+ mixin_exist?(owner, member, context: context)
80
+ when AST::Members::Public, AST::Members::Private
81
+ # They should not be removed even if the subtrahend has them.
82
+ false
83
+ else
84
+ raise "unknown member: #{(_ = member).class}"
85
+ end
86
+ end
87
+
88
+ private def method_exist?(owner, method_name, kind)
89
+ each_member(owner).any? do |m|
90
+ case m
91
+ when AST::Members::MethodDefinition
92
+ m.name == method_name && m.kind == kind
93
+ when AST::Members::Alias
94
+ m.new_name == method_name && m.kind == kind
95
+ when AST::Members::AttrReader
96
+ m.name == method_name && m.kind == kind
97
+ when AST::Members::AttrWriter
98
+ :"#{m.name}=" == method_name && m.kind == kind
99
+ when AST::Members::AttrAccessor
100
+ (m.name == method_name || :"#{m.name}=" == method_name) && m.kind == kind
101
+ end
102
+ end
103
+ end
104
+
105
+ private def ivar_exist?(owner, name, kind)
106
+ each_member(owner).any? do |m|
107
+ case m
108
+ when AST::Members::InstanceVariable
109
+ m.name == name
110
+ when AST::Members::Attribute
111
+ ivar_name = m.ivar_name == false ? nil : m.ivar_name || :"@#{m.name}"
112
+ ivar_name == name && m.kind == kind
113
+ end
114
+ end
115
+ end
116
+
117
+ private def cvar_exist?(owner, name)
118
+ each_member(owner).any? do |m|
119
+ case m
120
+ when AST::Members::ClassVariable
121
+ m.name == name
122
+ end
123
+ end
124
+ end
125
+
126
+ private def each_member(owner, &block)
127
+ return enum_for((__method__ or raise), owner) unless block
128
+
129
+ entry = @subtrahend.class_decls[owner]
130
+ return unless entry
131
+ decls = entry.decls.map { |d| d.decl }
132
+
133
+ decls.each { |d| d.members.each { |m| block.call(m) } }
134
+ end
135
+
136
+ private def mixin_exist?(owner, mixin, context:)
137
+ candidates = typename_candidates(mixin.name, context: context)
138
+ each_member(owner).any? do |m|
139
+ case m
140
+ when mixin.class
141
+ # @type var m: AST::Members::Include | AST::Members::Extend | AST::Members::Prepend
142
+ candidates.include?(m.name)
143
+ end
144
+ end
145
+ end
146
+
147
+ private def update_decl(decl, members:)
148
+ case decl
149
+ when AST::Declarations::Class
150
+ decl.class.new(name: decl.name, type_params: decl.type_params, super_class: decl.super_class,
151
+ annotations: decl.annotations, location: decl.location, comment: decl.comment,
152
+ members: members)
153
+ when AST::Declarations::Module
154
+ decl.class.new(name: decl.name, type_params: decl.type_params, self_types: decl.self_types,
155
+ annotations: decl.annotations, location: decl.location, comment: decl.comment,
156
+ members: members)
157
+ end
158
+ end
159
+
160
+ private def absolute_typename(name, context:)
161
+ while context
162
+ ns = context[1] or raise
163
+ name = name.with_prefix(ns.to_namespace)
164
+ context = _ = context[0]
165
+ end
166
+ name.absolute!
167
+ end
168
+
169
+ private def typename_candidates(name, context:)
170
+ ret = [name.absolute!, name.relative!]
171
+ return ret if name.absolute?
172
+
173
+ while context
174
+ ns = context[1] or raise
175
+ name = name.with_prefix(ns.to_namespace)
176
+ ret.concat [name.absolute!, name.relative!]
177
+
178
+ context = _ = context[0]
179
+ end
180
+
181
+ ret
182
+ end
183
+ end
184
+ end
data/lib/rbs/vendorer.rb CHANGED
@@ -31,7 +31,7 @@ module RBS
31
31
 
32
32
  if core_root = loader.core_root
33
33
  RBS.logger.info "Vendoring core RBSs in #{vendor_dir + "core"}..."
34
- loader.each_file(core_root, immediate: false, skip_hidden: true) do |file_path|
34
+ FileFinder.each_file(core_root, immediate: false, skip_hidden: true) do |file_path|
35
35
  paths << [file_path, Pathname("core") + file_path.relative_path_from(core_root)]
36
36
  end
37
37
  end
@@ -43,7 +43,7 @@ module RBS
43
43
 
44
44
  RBS.logger.info "Vendoring #{lib.name}(#{spec.version}) RBSs in #{vendor_dir + dest_dir}..."
45
45
 
46
- loader.each_file(path, skip_hidden: true, immediate: false) do |file_path|
46
+ FileFinder.each_file(path, skip_hidden: true, immediate: false) do |file_path|
47
47
  paths << [file_path, dest_dir + file_path.relative_path_from(path)]
48
48
  end
49
49
 
@@ -52,7 +52,7 @@ module RBS
52
52
 
53
53
  RBS.logger.info "Vendoring #{lib.name}(#{path.version}) RBSs in #{vendor_dir + dest_dir}..."
54
54
 
55
- loader.each_file(path.path, skip_hidden: true, immediate: false) do |file_path|
55
+ FileFinder.each_file(path.path, skip_hidden: true, immediate: false) do |file_path|
56
56
  paths << [file_path, dest_dir + file_path.relative_path_from(path.path)]
57
57
  end
58
58
  else
data/lib/rbs/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RBS
4
- VERSION = "3.0.4"
4
+ VERSION = "3.1.1"
5
5
  end
data/lib/rbs/writer.rb CHANGED
@@ -167,6 +167,18 @@ module RBS
167
167
  puts "type #{name_and_params(decl.name, decl.type_params)} = #{decl.type}"
168
168
  }
169
169
 
170
+ when AST::Declarations::ClassAlias
171
+ write_comment decl.comment
172
+ write_loc_source(decl) {
173
+ puts "class #{decl.new_name} = #{decl.old_name}"
174
+ }
175
+
176
+ when AST::Declarations::ModuleAlias
177
+ write_comment decl.comment
178
+ write_loc_source(decl) {
179
+ puts "module #{decl.new_name} = #{decl.old_name}"
180
+ }
181
+
170
182
  when AST::Declarations::Interface
171
183
  write_comment decl.comment
172
184
  write_annotation decl.annotations
data/lib/rbs.rb CHANGED
@@ -16,6 +16,7 @@ require "rbs/namespace"
16
16
  require "rbs/type_name"
17
17
  require "rbs/types"
18
18
  require "rbs/method_type"
19
+ require "rbs/file_finder"
19
20
  require "rbs/ast/type_param"
20
21
  require "rbs/ast/directives"
21
22
  require "rbs/ast/declarations"
@@ -46,6 +47,7 @@ require "rbs/vendorer"
46
47
  require "rbs/validator"
47
48
  require "rbs/factory"
48
49
  require "rbs/repository"
50
+ require "rbs/subtractor"
49
51
  require "rbs/ancestor_graph"
50
52
  require "rbs/locator"
51
53
  require "rbs/type_alias_dependency"
data/lib/rdoc/discover.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  begin
4
- gem 'rdoc', '~> 6.4.0'
4
+ gem 'rdoc', '~> 6.4'
5
5
  require 'rdoc_plugin/parser'
6
6
  module RDoc
7
7
  class Parser
data/sig/cli.rbs CHANGED
@@ -76,6 +76,8 @@ module RBS
76
76
 
77
77
  def run_annotate: (Array[String], top) -> void
78
78
 
79
+ def run_subtract: (Array[String], top) -> void
80
+
79
81
  def test_opt: (LibraryOptions) -> String?
80
82
 
81
83
  def collection_options: (Array[String]) -> OptionParser
@@ -36,7 +36,9 @@ module RBS
36
36
 
37
37
  # Inserts a entry to lockfile of a gem and its dependencies, if not included in `ignored_gems:`
38
38
  #
39
- def assign_gem: (name: String, version: String?, src_data: Sources::source_entry?, ignored_gems: Set[String]) -> void
39
+ # * If `skip:` is true, it skips adding the gem, but adds it's dependencies.
40
+ #
41
+ def assign_gem: (name: String, version: String?, src_data: Sources::source_entry?, ignored_gems: Set[String], ?skip: bool) -> void
40
42
 
41
43
  def assign_stdlib: (name: String, from_gem: String?) -> void
42
44
 
@@ -3,23 +3,25 @@ module RBS
3
3
  #
4
4
  # Set up your configuration through repository and `#add` method.
5
5
  #
6
- # # Set up the repository to load library RBSs from.
7
- # repo = RBS::Repository.default
8
- # repo.add(Pathname("vendor/rbs/gem-rbs"))
9
- # repo.add(Pathname("vendor/rbs/internal-rbs"))
6
+ # ```ruby
7
+ # # Set up the repository to load library RBSs from.
8
+ # repo = RBS::Repository.default
9
+ # repo.add(Pathname("vendor/rbs/gem-rbs"))
10
+ # repo.add(Pathname("vendor/rbs/internal-rbs"))
10
11
  #
11
- # loader = RBS::EnvironmentLoader.new(repository: repo)
12
+ # loader = RBS::EnvironmentLoader.new(repository: repo)
12
13
  #
13
- # # Add libraries to load RBS files.
14
- # loader.add(library: "minitest")
15
- # loader.add(library: "rbs", version: "1.0.0")
14
+ # # Add libraries to load RBS files.
15
+ # loader.add(library: "minitest")
16
+ # loader.add(library: "rbs", version: "1.0.0")
16
17
  #
17
- # # Add dirs to load RBS files from.
18
- # loader.add(path: Pathname("sig"))
18
+ # # Add dirs to load RBS files from.
19
+ # loader.add(path: Pathname("sig"))
19
20
  #
20
- # # Load RBSs into an environment.
21
- # environment = RBS::Environment.new()
22
- # loader.load(env: environment)
21
+ # # Load RBSs into an environment.
22
+ # environment = RBS::Environment.new()
23
+ # loader.load(env: environment)
24
+ # ```
23
25
  #
24
26
  class EnvironmentLoader
25
27
  class UnknownLibraryError < StandardError
@@ -35,6 +37,8 @@ module RBS
35
37
  def initialize: (name: String, version: String?) -> void
36
38
  end
37
39
 
40
+ include FileFinder
41
+
38
42
  DEFAULT_CORE_ROOT: Pathname
39
43
 
40
44
  attr_reader core_root: Pathname?
@@ -103,7 +107,5 @@ module RBS
103
107
  def each_signature: () { (source, Pathname, Buffer, Array[AST::Declarations::t], Array[AST::Directives::t]) -> void } -> void
104
108
 
105
109
  def each_dir: { (source, Pathname) -> void } -> void
106
-
107
- def each_file: (Pathname path, immediate: boolish, skip_hidden: boolish) { (Pathname) -> void } -> void
108
110
  end
109
111
  end
@@ -0,0 +1,6 @@
1
+ module RBS
2
+ module FileFinder
3
+ def self?.each_file: (Pathname path, immediate: boolish, skip_hidden: boolish) { (Pathname) -> void } -> void
4
+ | (Pathname path, immediate: boolish, skip_hidden: boolish) -> Enumerator[Pathname, void]
5
+ end
6
+ end
data/sig/manifest.yaml CHANGED
@@ -5,3 +5,4 @@ dependencies:
5
5
  - name: optparse
6
6
  - name: tsort
7
7
  - name: rdoc
8
+ - name: abbrev
data/sig/parser.rbs CHANGED
@@ -2,8 +2,7 @@ module RBS
2
2
  class Parser
3
3
  # Parse a method type and return it
4
4
  #
5
- # When `pos` keyword is specified, skips the first `pos` characters from the input.
6
- # If no token is left in the input, it returns `nil`.
5
+ # When `range` keyword is specified, it starts parsing from the `begin` to the `endo` the range.
7
6
  #
8
7
  # ```ruby
9
8
  # RBS::Parser.parse_method_type("() -> void") # => `() -> void`
@@ -12,12 +11,21 @@ module RBS
12
11
  # RBS::Parser.parse_method_type("() -> void () -> String", range: 23...) # => nil
13
12
  # ```
14
13
  #
15
- def self.parse_method_type: (Buffer | String, ?range: Range[Integer?], ?variables: Array[Symbol]) -> MethodType?
14
+ # When `require_eof` is `true`, an error is raised if more tokens are left in the input.
15
+ # (Defaults to `false`.)
16
+ #
17
+ # ```ruby
18
+ # RBS::Parser.parse_method_type("() -> void () -> String", require_eof: false) # => `() -> void`
19
+ # RBS::Parser.parse_method_type("() -> void () -> String", require_eof: true) # => Raises an error
20
+ #
21
+ # RBS::Parser.parse_method_type("", require_eof: true) # => nil
22
+ # ```
23
+ #
24
+ def self.parse_method_type: (Buffer | String, ?range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> MethodType?
16
25
 
17
26
  # Parse a type and return it
18
27
  #
19
- # When `pos` keyword is specified, skips the first `pos` characters from the input.
20
- # If no token is left in the input, it returns `nil`.
28
+ # When `range` keyword is specified, it starts parsing from the `begin` to the `endo` the range.
21
29
  #
22
30
  # ```ruby
23
31
  # RBS::Parser.parse_type("String") # => `String`
@@ -26,7 +34,17 @@ module RBS
26
34
  # RBS::Parser.parse_type("String Integer", pos: 14...) # => nil
27
35
  # ```
28
36
  #
29
- def self.parse_type: (Buffer | String, ?range: Range[Integer?], ?variables: Array[Symbol]) -> Types::t?
37
+ # When `require_eof` is `true`, an error is raised if more tokens are left in the input.
38
+ # (Defaults to `false`.)
39
+ #
40
+ # ```ruby
41
+ # RBS::Parser.parse_type("String untyped", require_eof: false) # => `String`
42
+ # RBS::Parser.parse_type("String untyped", require_eof: true) # => Raises an error
43
+ #
44
+ # RBS::Parser.parse_type("", require_eof: true) # => nil
45
+ # ```
46
+ #
47
+ def self.parse_type: (Buffer | String, ?range: Range[Integer?], ?variables: Array[Symbol], ?require_eof: bool) -> Types::t?
30
48
 
31
49
  # Parse whole RBS file and return an array of declarations
32
50
  #
@@ -38,9 +56,9 @@ module RBS
38
56
 
39
57
  def self.buffer: (String | Buffer source) -> Buffer
40
58
 
41
- def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables) -> Types::t?
59
+ def self._parse_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof) -> Types::t?
42
60
 
43
- def self._parse_method_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables) -> MethodType?
61
+ def self._parse_method_type: (Buffer, Integer start_pos, Integer end_pos, Array[Symbol] variables, bool require_eof) -> MethodType?
44
62
 
45
63
  def self._parse_signature: (Buffer, Integer end_pos) -> [Array[AST::Directives::t], Array[AST::Declarations::t]]
46
64
 
data/sig/repository.rbs CHANGED
@@ -3,12 +3,14 @@ module RBS
3
3
  #
4
4
  # A repository object can handle multiple repository roots.
5
5
  #
6
- # repo = RBS::Repository.new()
7
- # repo.add(Pathname("vendor/rbs/gem-rbs"))
8
- # repo.add(Pathname("vendor/rbs/internal-rbs"))
9
- # repo.add(Pathname("vendor/rbs/definitely-rbs"))
6
+ # ```ruby
7
+ # repo = RBS::Repository.new()
8
+ # repo.add(Pathname("vendor/rbs/gem-rbs"))
9
+ # repo.add(Pathname("vendor/rbs/internal-rbs"))
10
+ # repo.add(Pathname("vendor/rbs/definitely-rbs"))
10
11
  #
11
- # repo.lookup("minitest", "2.1.3") => Pathname or nil
12
+ # repo.lookup("minitest", "2.1.3") # => Pathname or nil
13
+ # ```
12
14
  #
13
15
  # If one gem version can resolve to several directories, the last added dir wins.
14
16
  #
@@ -15,6 +15,8 @@ module Bundler
15
15
 
16
16
  class Dependency < Gem::Dependency
17
17
  attr_reader autorequire: Array[String]?
18
+
19
+ attr_reader source: untyped
18
20
  end
19
21
 
20
22
  class Definition
@@ -12,4 +12,8 @@ module Gem
12
12
  class Dependency
13
13
  def name: () -> String
14
14
  end
15
+
16
+ module ::Kernel
17
+ def self?.gem: (String, *String) -> void
18
+ end
15
19
  end
@@ -0,0 +1,33 @@
1
+ module RBS
2
+ class Subtractor
3
+ type decl_with_members = AST::Declarations::Class | AST::Declarations::Module
4
+
5
+ @minuend: Array[AST::Declarations::t]
6
+ @subtrahend: Environment
7
+
8
+ def initialize: (Array[AST::Declarations::t] minuend, Environment subtrahend) -> void
9
+
10
+ def call: (?Array[AST::Declarations::t], ?context: Resolver::context) -> Array[AST::Declarations::t]
11
+
12
+ private def filter_members: (decl_with_members, context: Resolver::context) -> decl_with_members?
13
+
14
+ private def member_exist?: (TypeName owner, AST::Members::t, context: Resolver::context) -> boolish
15
+
16
+ private def method_exist?: (TypeName owner, Symbol method_name, AST::Members::MethodDefinition::kind) -> boolish
17
+
18
+ private def ivar_exist?: (TypeName owner, Symbol ivar_name, AST::Members::Attribute::kind) -> boolish
19
+
20
+ private def cvar_exist?: (TypeName owner, Symbol cvar_name) -> boolish
21
+
22
+ private def each_member: (TypeName owner) { (AST::Members::t | AST::Declarations::t) -> void } -> void
23
+ | (TypeName owner) -> Enumerator[(AST::Members::t | AST::Declarations::t), void]
24
+
25
+ private def mixin_exist?: (TypeName owner, AST::Members::Include | AST::Members::Extend | AST::Members::Prepend, context: Resolver::context) -> boolish
26
+
27
+ private def update_decl: (decl_with_members, members: Array[AST::Declarations::t | AST::Members::t]) -> decl_with_members
28
+
29
+ private def absolute_typename: (TypeName, context: Resolver::context) -> TypeName
30
+
31
+ private def typename_candidates: (TypeName, context: Resolver::context) -> Array[TypeName]
32
+ end
33
+ end
data/sig/types.rbs CHANGED
@@ -18,9 +18,11 @@ module RBS
18
18
  # Yields all direct sub types included in the type.
19
19
  # It doesn't yield the type itself.
20
20
  #
21
- # parse("Hash[String, Array[Symbol]]").each_type do |ty|
22
- # ... # Yields String and Array[Symbol]
23
- # end
21
+ # ```ruby
22
+ # parse("Hash[String, Array[Symbol]]").each_type do |ty|
23
+ # ... # Yields String and Array[Symbol]
24
+ # end
25
+ # ```
24
26
  #
25
27
  def each_type: () { (t) -> void } -> void
26
28
  | () -> Enumerator[t, void]
@@ -32,9 +34,11 @@ module RBS
32
34
  # Returns a String representation.
33
35
  # `level` is used internally.
34
36
  #
35
- # parse("String").to_s # => "String"
36
- # parse("String | Integer").to_s() # => "String | Integer"
37
- # parse("String | Integer").to_s(1) # => "(String | Integer)"
37
+ # ```ruby
38
+ # parse("String").to_s # => "String"
39
+ # parse("String | Integer").to_s() # => "String | Integer"
40
+ # parse("String | Integer").to_s(1) # => "(String | Integer)"
41
+ # ```
38
42
  #
39
43
  def to_s: (?Integer level) -> String
40
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbs
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.4
4
+ version: 3.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-13 00:00:00.000000000 Z
11
+ date: 2023-07-18 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: RBS is the language for type signatures for Ruby and standard library
14
14
  definitions.
@@ -182,6 +182,7 @@ files:
182
182
  - lib/rbs/environment_walker.rb
183
183
  - lib/rbs/errors.rb
184
184
  - lib/rbs/factory.rb
185
+ - lib/rbs/file_finder.rb
185
186
  - lib/rbs/location_aux.rb
186
187
  - lib/rbs/locator.rb
187
188
  - lib/rbs/method_type.rb
@@ -201,6 +202,7 @@ files:
201
202
  - lib/rbs/resolver/type_name_resolver.rb
202
203
  - lib/rbs/sorter.rb
203
204
  - lib/rbs/substitution.rb
205
+ - lib/rbs/subtractor.rb
204
206
  - lib/rbs/test.rb
205
207
  - lib/rbs/test/errors.rb
206
208
  - lib/rbs/test/hook.rb
@@ -259,6 +261,7 @@ files:
259
261
  - sig/environment_walker.rbs
260
262
  - sig/errors.rbs
261
263
  - sig/factory.rbs
264
+ - sig/file_finder.rbs
262
265
  - sig/location.rbs
263
266
  - sig/locator.rbs
264
267
  - sig/manifest.yaml
@@ -284,6 +287,7 @@ files:
284
287
  - sig/shims/rubygems.rbs
285
288
  - sig/sorter.rbs
286
289
  - sig/substitution.rbs
290
+ - sig/subtractor.rbs
287
291
  - sig/type_alias_dependency.rbs
288
292
  - sig/type_alias_regularity.rbs
289
293
  - sig/type_param.rbs
@@ -447,7 +451,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
447
451
  - !ruby/object:Gem::Version
448
452
  version: '0'
449
453
  requirements: []
450
- rubygems_version: 3.4.6
454
+ rubygems_version: 3.4.10
451
455
  signing_key:
452
456
  specification_version: 4
453
457
  summary: Type signature for Ruby.