rbs 3.0.4 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.