typeprof 0.21.3 → 0.21.7

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: 87b881146ffc3f78049ac01775f0bd6cae8efeec13a77da7eab2a61e3027a802
4
- data.tar.gz: 61507f6552b6440fa58ea298ed80956a32e97b149b46d0969a594e8d1b0920bc
3
+ metadata.gz: 6586977939af7be53d8c86c57f992569abffac1f011e7a435ea248835fabb5be
4
+ data.tar.gz: fec9babce50e7c23b31d053a137d7b16c9481ab51bc694d5ba1bf9fd720f63e2
5
5
  SHA512:
6
- metadata.gz: dce6a8c024aa553089224545ca89a6148a590390791f9411b6a70791ad23cb70a9e97d4405264882c3cfccc8cd30e69443cc6330cb81c33f996fa2363dc0369a
7
- data.tar.gz: c6f6e02dc30a6c8b7ecbee01f05f171b467a95526b4541173b303803287ea208eb816223353a704866b7f0b87b266462560554bb997bdbe67d3b5c9373385a4f
6
+ metadata.gz: b49afd59c81f251f6526f4f297773983cad6e4ead9ffeff659d1257a5c0138f2b3f8016197fc5537b5bf1a53bebb1382bf3385ce377441a9bbff0f5852e0ac07
7
+ data.tar.gz: 3603cff083f9db951648cbc8069c017a42057eb6242963879634f7a0e64633632cb21e4bb51988f4a7d99e30de61e670e953409b64b6cc6bac5bbd771049666c
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: 'github-actions'
4
+ directory: '/'
5
+ schedule:
6
+ interval: 'weekly'
@@ -1,25 +1,39 @@
1
1
  name: Ruby
2
2
 
3
- on: [push,pull_request]
3
+ on:
4
+ push:
5
+ pull_request:
6
+ workflow_dispatch:
7
+ schedule:
8
+ # # This job runs at 00:00 on Friday.
9
+ - cron: '0 15 * * 5'
4
10
 
5
11
  jobs:
12
+ ruby-versions:
13
+ uses: ruby/actions/.github/workflows/ruby_versions.yml@master
14
+ with:
15
+ engine: cruby-truffleruby
16
+ min_version: 2.7
17
+
6
18
  build:
19
+ needs: ruby-versions
20
+ name: build (${{ matrix.ruby }})
7
21
  strategy:
8
22
  fail-fast: false
9
23
  matrix:
10
- ruby-version: [2.7, 3.0, 3.1, head]
24
+ ruby: ${{ fromJson(needs.ruby-versions.outputs.versions) }}
11
25
  runs-on: ubuntu-latest
12
26
  steps:
13
27
  - uses: actions/checkout@v3
14
- with:
15
- submodules: true
16
28
  - name: Set up Ruby
17
29
  uses: ruby/setup-ruby@v1
18
30
  with:
19
- ruby-version: ${{ matrix.ruby-version }}
31
+ ruby-version: ${{ matrix.ruby }}
20
32
  - name: Bundle install
21
33
  run: |
22
34
  bundle install
35
+ - run: bundle exec typeprof --version
23
36
  - name: Run the test suite
24
37
  run: |
25
38
  bundle exec rake TESTOPT=-v
39
+ if: ${{ !startsWith(matrix.ruby, 'truffle') }}
data/Gemfile CHANGED
@@ -1,11 +1,15 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- # Specify your gem's dependencies in typeprof.gemspec
4
- gemspec
3
+ if ENV["RBS_VERSION"]
4
+ gem "rbs", github: "ruby/rbs", ref: ENV["RBS_VERSION"]
5
+ else
6
+ # Specify your gem's dependencies in typeprof.gemspec
7
+ gemspec
8
+ end
5
9
 
6
10
  group :development do
7
11
  gem "rake"
8
- gem "stackprof"
12
+ gem "stackprof", platforms: :mri
9
13
  gem "test-unit"
10
14
  gem "simplecov"
11
15
  gem "simplecov-html"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- typeprof (0.21.3)
4
+ typeprof (0.21.7)
5
5
  rbs (>= 1.8.1)
6
6
 
7
7
  GEM
@@ -10,8 +10,8 @@ GEM
10
10
  coverage-helpers (1.0.0)
11
11
  docile (1.4.0)
12
12
  power_assert (2.0.1)
13
- rake (13.0.6)
14
- rbs (2.6.0)
13
+ rake (13.0.1)
14
+ rbs (3.0.2)
15
15
  simplecov (0.21.2)
16
16
  docile (~> 1.1)
17
17
  simplecov-html (~> 0.11)
@@ -36,4 +36,4 @@ DEPENDENCIES
36
36
  typeprof!
37
37
 
38
38
  BUNDLED WITH
39
- 2.2.15
39
+ 2.3.11
@@ -1997,7 +1997,8 @@ module TypeProf
1997
1997
  env = env.push(Type.any) # or String | NilClass only?
1998
1998
  when 1 # VM_SVAR_BACKREF ($~)
1999
1999
  merge_env(ep.next, env.push(Type::Instance.new(Type::Builtin[:matchdata])))
2000
- merge_env(ep.next, env.push(Type.nil))
2000
+ # tentatively disabled; it is too conservative
2001
+ #merge_env(ep.next, env.push(Type.nil))
2001
2002
  return
2002
2003
  else # flip-flop
2003
2004
  env = env.push(Type.bool)
@@ -2005,7 +2006,8 @@ module TypeProf
2005
2006
  else
2006
2007
  # NTH_REF ($1, $2, ...) / BACK_REF ($&, $+, ...)
2007
2008
  merge_env(ep.next, env.push(Type::Instance.new(Type::Builtin[:str])))
2008
- merge_env(ep.next, env.push(Type.nil))
2009
+ # tentatively disabled; it is too conservative
2010
+ #merge_env(ep.next, env.push(Type.nil))
2009
2011
  return
2010
2012
  end
2011
2013
  when :setspecial
@@ -2229,6 +2231,34 @@ module TypeProf
2229
2231
  merge_env(ep.next, env)
2230
2232
  end
2231
2233
 
2234
+ private def ruby_3_3_keywords?
2235
+ @ruby_3_3_keywords ||=
2236
+ RubyVM::InstructionSequence.compile("foo(*a, **b)").to_a.last[-2][1][:orig_argc] == 2
2237
+ end
2238
+
2239
+ private def type_to_keywords(ty, ep)
2240
+ case ty
2241
+ when Type::Hash
2242
+ ty.elems.to_keywords
2243
+ when Type::Union
2244
+ hash_elems = nil
2245
+ ty.elems&.each do |(container_kind, base_type), elems|
2246
+ if container_kind == Type::Hash
2247
+ elems.to_keywords
2248
+ hash_elems = hash_elems ? hash_elems.union(elems) : elems
2249
+ end
2250
+ end
2251
+ if hash_elems
2252
+ hash_elems.to_keywords
2253
+ else
2254
+ { nil => Type.any }
2255
+ end
2256
+ else
2257
+ warn(ep, "non hash is passed to **kwarg?") unless ty == Type.any
2258
+ { nil => Type.any }
2259
+ end
2260
+ end
2261
+
2232
2262
  private def setup_actual_arguments(kind, operands, ep, env)
2233
2263
  opt, blk_iseq = operands
2234
2264
  flags = opt[:flag]
@@ -2282,42 +2312,33 @@ module TypeProf
2282
2312
  blk_ty = new_blk_ty
2283
2313
 
2284
2314
  if flag_args_splat
2285
- # assert !flag_args_kwarg
2286
- rest_ty = aargs.last
2287
- aargs = aargs[0..-2]
2288
- if flag_args_kw_splat
2289
- # XXX: The types contained in ActualArguments are expected to be all local types.
2290
- # This "globalize_type" breaks the invariant, and violates the assertion of Union#globalize that asserts @elems be nil.
2291
- # To fix this issue fundamentally, ActualArguments should keep all arguments as-is (as like the VM does),
2292
- # and globalize some types on the on-demand bases.
2293
- ty = globalize_type(rest_ty, env, ep)
2294
- if ty.is_a?(Type::Array)
2295
- _, (ty,) = ty.elems.take_last(1)
2296
- case ty
2297
- when Type::Hash
2298
- kw_tys = ty.elems.to_keywords
2299
- when Type::Union
2300
- hash_elems = nil
2301
- ty.elems&.each do |(container_kind, base_type), elems|
2302
- if container_kind == Type::Hash
2303
- elems.to_keywords
2304
- hash_elems = hash_elems ? hash_elems.union(elems) : elems
2305
- end
2306
- end
2307
- if hash_elems
2308
- kw_tys = hash_elems.to_keywords
2309
- else
2310
- kw_tys = { nil => Type.any }
2311
- end
2315
+ if ruby_3_3_keywords?
2316
+ if flag_args_kw_splat
2317
+ kw_tys = type_to_keywords(globalize_type(aargs[-1], env, ep), ep)
2318
+ aargs = aargs[0..-2]
2319
+ else
2320
+ kw_tys = {}
2321
+ end
2322
+ rest_ty = aargs.last
2323
+ aargs = aargs[0..-2]
2324
+ else
2325
+ rest_ty = aargs.last
2326
+ aargs = aargs[0..-2]
2327
+ if flag_args_kw_splat
2328
+ # XXX: The types contained in ActualArguments are expected to be all local types.
2329
+ # This "globalize_type" breaks the invariant, and violates the assertion of Union#globalize that asserts @elems be nil.
2330
+ # To fix this issue fundamentally, ActualArguments should keep all arguments as-is (as like the VM does),
2331
+ # and globalize some types on the on-demand bases.
2332
+ ty = globalize_type(rest_ty, env, ep)
2333
+ if ty.is_a?(Type::Array)
2334
+ _, (ty,) = ty.elems.take_last(1)
2335
+ kw_tys = type_to_keywords(ty, ep)
2312
2336
  else
2313
- warn(ep, "non hash is passed to **kwarg?") unless ty == Type.any
2314
- kw_tys = { nil => Type.any }
2337
+ raise NotImplementedError
2315
2338
  end
2316
2339
  else
2317
- raise NotImplementedError
2340
+ kw_tys = {}
2318
2341
  end
2319
- else
2320
- kw_tys = {}
2321
2342
  end
2322
2343
  aargs = ActualArguments.new(aargs, rest_ty, kw_tys, blk_ty)
2323
2344
  elsif flag_args_kw_splat
@@ -6,8 +6,13 @@ module TypeProf
6
6
  @repo = RBS::Repository.new
7
7
  collection_path = Config.current.collection_path
8
8
  if collection_path&.exist?
9
- collection_lock = RBS::Collection::Config.lockfile_of(collection_path)
10
- @repo.add(collection_lock.repo_path)
9
+ lock_path = RBS::Collection::Config.to_lockfile_path(collection_path)
10
+ if lock_path.exist?
11
+ collection_lock = RBS::Collection::Config.from_path(lock_path)
12
+ @repo.add(collection_lock.repo_path)
13
+ else
14
+ raise "Please execute 'rbs collection install'"
15
+ end
11
16
  end
12
17
  @env, @loaded_gems, @builtin_env_json = RBSReader.get_builtin_env
13
18
  end
@@ -23,9 +28,14 @@ module TypeProf
23
28
  # TODO: invalidate this cache when rbs_collection.yml was changed
24
29
  collection_path = Config.current.collection_path
25
30
  if collection_path&.exist?
26
- collection_lock = RBS::Collection::Config.lockfile_of(collection_path)
27
- collection_lock.gems.each {|gem| @loaded_gems << gem["name"] }
28
- loader.add_collection(collection_lock)
31
+ lock_path = RBS::Collection::Config.to_lockfile_path(collection_path)
32
+ if lock_path.exist?
33
+ collection_lock = RBS::Collection::Config::Lockfile.from_lockfile(lockfile_path: lock_path, data: YAML.load_file(lock_path.to_s))
34
+ collection_lock.gems.each {|gem| @loaded_gems << gem["name"] }
35
+ loader.add_collection(collection_lock)
36
+ else
37
+ raise "Please execute 'rbs collection install'"
38
+ end
29
39
  end
30
40
 
31
41
  new_decls = loader.load(env: @builtin_env).map {|decl,| decl }
@@ -77,19 +87,37 @@ module TypeProf
77
87
  def load_rbs_string(name, content)
78
88
  buffer = RBS::Buffer.new(name: name, content: content)
79
89
  new_decls = []
80
- RBS::Parser.parse_signature(buffer).each do |decl|
81
- @env << decl
82
- new_decls << decl
90
+ ret = RBS::Parser.parse_signature(buffer)
91
+ if ret[0].is_a?(RBS::Buffer)
92
+ # rbs 3.0
93
+ buffer, directives, decls = ret
94
+ @env.add_signature(buffer: buffer, directives: directives, decls: decls)
95
+ new_decls.concat(decls)
96
+ else
97
+ ret.each do |decl|
98
+ @env << decl
99
+ new_decls << decl
100
+ end
83
101
  end
84
102
  RBSReader.load_rbs(@env, new_decls)
85
103
  end
86
104
 
87
105
  def self.load_rbs(env, new_decls)
88
106
  all_env = env.resolve_type_names
89
- resolver = RBS::TypeNameResolver.from_env(all_env)
90
107
  cur_env = RBS::Environment.new
91
- new_decls.each do |decl|
92
- cur_env << env.resolve_declaration(resolver, decl, outer: [], prefix: RBS::Namespace.root)
108
+ if defined?(RBS::TypeNameResolver)
109
+ resolver = RBS::TypeNameResolver.from_env(all_env)
110
+ new_decls.each do |decl|
111
+ cur_env << env.resolve_declaration(resolver, decl, outer: [], prefix: RBS::Namespace.root)
112
+ end
113
+ else
114
+ resolver = RBS::Resolver::TypeNameResolver.new(all_env)
115
+ table = RBS::Environment::UseMap::Table.new()
116
+ table.compute_children
117
+ map = RBS::Environment::UseMap.new(table: table)
118
+ new_decls.each do |decl|
119
+ cur_env << s = env.resolve_declaration(resolver, map, decl, outer: [], prefix: RBS::Namespace.root)
120
+ end
93
121
  end
94
122
 
95
123
  RBS2JSON.new(all_env, cur_env).dump_json
@@ -134,6 +162,9 @@ module TypeProf
134
162
  gvars
135
163
  end
136
164
 
165
+ AliasDecl = defined?(RBS::AST::Declarations::Alias) ? RBS::AST::Declarations::Alias : RBS::AST::Declarations::AliasDecl
166
+ TypeAlias = defined?(RBS::AST::Declarations::TypeAlias) ? RBS::AST::Declarations::TypeAlias : nil
167
+
137
168
  def conv_classes
138
169
  json = {}
139
170
 
@@ -170,7 +201,12 @@ module TypeProf
170
201
  when RBS::AST::Members::MethodDefinition
171
202
  name = member.name
172
203
 
173
- method_types = member.types.map do |method_type|
204
+ if member.respond_to?(:overloads)
205
+ types = member.overloads.map {|overload| overload.method_type }
206
+ else
207
+ types = member.types
208
+ end
209
+ method_types = types.map do |method_type|
174
210
  case method_type
175
211
  when RBS::MethodType then method_type
176
212
  when :super then raise NotImplementedError
@@ -180,7 +216,7 @@ module TypeProf
180
216
  method_def = conv_method_def(method_types, visibility)
181
217
  rbs_source = [
182
218
  (member.kind == :singleton ? "self." : "") + member.name.to_s,
183
- member.types.map {|type| type.location.source },
219
+ types.map {|type| type.location.source },
184
220
  [member.location.name, CodeRange.from_rbs(member.location)],
185
221
  ]
186
222
  if member.instance?
@@ -260,9 +296,10 @@ module TypeProf
260
296
 
261
297
  # The following declarations are ignoreable because they are handled in other level
262
298
  when RBS::AST::Declarations::Constant
263
- when RBS::AST::Declarations::Alias # type alias
299
+ when AliasDecl # type alias
264
300
  when RBS::AST::Declarations::Class, RBS::AST::Declarations::Module
265
301
  when RBS::AST::Declarations::Interface
302
+ when TypeAlias
266
303
 
267
304
  else
268
305
  warn "Importing #{ member.class.name } is not supported yet"
@@ -487,7 +524,7 @@ module TypeProf
487
524
  else
488
525
  begin
489
526
  @alias_resolution_stack[ty.name] = true
490
- alias_decl = @all_env.alias_decls[ty.name]
527
+ alias_decl = (@all_env.respond_to?(:alias_decls) ? @all_env.alias_decls : @all_env.type_alias_decls)[ty.name]
491
528
  alias_decl ? conv_type(alias_decl.decl.type) : [:any]
492
529
  ensure
493
530
  @alias_resolution_stack.delete(ty.name)
data/lib/typeprof/iseq.rb CHANGED
@@ -1,11 +1,13 @@
1
1
  module TypeProf
2
2
  class ISeq
3
- # https://github.com/ruby/ruby/pull/4468
4
- CASE_WHEN_CHECKMATCH = RubyVM::InstructionSequence.compile("case 1; when Integer; end").to_a.last.any? {|insn,| insn == :checkmatch }
5
- # https://github.com/ruby/ruby/blob/v3_0_2/vm_core.h#L1206
6
- VM_ENV_DATA_SIZE = 3
7
- # Check if Ruby 3.1 or later
8
- RICH_AST = begin RubyVM::AbstractSyntaxTree.parse("1", keep_script_lines: true).node_id; true; rescue; false; end
3
+ if defined?(RubyVM::InstructionSequence)
4
+ # https://github.com/ruby/ruby/pull/4468
5
+ CASE_WHEN_CHECKMATCH = RubyVM::InstructionSequence.compile("case 1; when Integer; end").to_a.last.any? {|insn,| insn == :checkmatch }
6
+ # https://github.com/ruby/ruby/blob/v3_0_2/vm_core.h#L1206
7
+ VM_ENV_DATA_SIZE = 3
8
+ # Check if Ruby 3.1 or later
9
+ RICH_AST = begin RubyVM::AbstractSyntaxTree.parse("1", keep_script_lines: true).node_id; true; rescue; false; end
10
+ end
9
11
 
10
12
  FileInfo = Struct.new(
11
13
  :node_id2node,
@@ -447,6 +449,11 @@ module TypeProf
447
449
  insn.insn, insn.operands = :branch, [:nil] + insn.operands
448
450
  when :getblockparam, :getblockparamproxy
449
451
  insn.insn = :getlocal
452
+ when :getglobal
453
+ if insn.operands == [:$typeprof]
454
+ insn.insn = :putobject
455
+ insn.operands = [true]
456
+ end
450
457
  end
451
458
  end
452
459
  end
@@ -687,6 +694,27 @@ module TypeProf
687
694
  @insns[i + 1] = Insn.new(:getlocal_branch, [getlocal_operands, branch_operands])
688
695
  end
689
696
  end
697
+
698
+ # find a pattern: putobject, branch
699
+ (@insns.size - 1).times do |i|
700
+ next if branch_targets[i + 1]
701
+ insn0 = @insns[i]
702
+ insn1 = @insns[i + 1]
703
+ if insn0.insn == :putobject && insn1.insn == :branch
704
+ putobject_operands = insn0.operands
705
+ branch_operands = insn1.operands
706
+ obj = putobject_operands[0]
707
+ branch_type = branch_operands[0]
708
+ branch_target = branch_operands[1]
709
+ case branch_type
710
+ when :if then jump = !!obj
711
+ when :unless then jump = !obj
712
+ when :nil then jump = obj == nil
713
+ end
714
+ @insns[i ] = Insn.new(:nop, [])
715
+ @insns[i + 1] = jump ? Insn.new(:jump, [branch_target]) : Insn.new(:nop, [])
716
+ end
717
+ end
690
718
  end
691
719
 
692
720
  def check_send_branch(sp, j)
@@ -117,6 +117,12 @@ module TypeProf
117
117
  ty = Type::Array.new(Type::Array::Elements.new([], msig.rest_ty), Type::Instance.new(Type::Builtin[:ary]))
118
118
  ty = ty.substitute(cur_subst, Config.current.options[:type_depth_limit]).remove_type_vars
119
119
  nenv, rest_ty = scratch.localize_type(ty, nenv, callee_ep, alloc_site2)
120
+ # TODO: handle a case where rest_start is not found
121
+ nenv = nenv.local_update(rest_start, rest_ty)
122
+ elsif rest_start
123
+ alloc_site2 = alloc_site.add_id(idx += 1)
124
+ ty = Type::Array.new(Type::Array::Elements.new([], Type.any), Type::Instance.new(Type::Builtin[:ary]))
125
+ nenv, rest_ty = scratch.localize_type(ty, nenv, callee_ep, alloc_site2)
120
126
  nenv = nenv.local_update(rest_start, rest_ty)
121
127
  end
122
128
  if msig.post_tys
@@ -146,6 +152,11 @@ module TypeProf
146
152
  ty = ty.substitute(cur_subst, Config.current.options[:type_depth_limit]).remove_type_vars
147
153
  nenv, ty = scratch.localize_type(ty, nenv, callee_ep, alloc_site2)
148
154
  nenv = nenv.local_update(kw_rest, ty)
155
+ elsif kw_rest
156
+ alloc_site2 = alloc_site.add_id(:**)
157
+ ty = Type.gen_hash {}
158
+ nenv, ty = scratch.localize_type(ty, nenv, callee_ep, alloc_site2)
159
+ nenv = nenv.local_update(kw_rest, ty)
149
160
  end
150
161
  nenv = nenv.local_update(block_start, msig.blk_ty) if block_start
151
162
 
data/lib/typeprof/type.rb CHANGED
@@ -59,10 +59,13 @@ module TypeProf
59
59
  else
60
60
  if ty2.is_a?(Type::ContainerType)
61
61
  # ty2 may have type variables
62
- return nil if ty1.class != ty2.class
63
- ty1.match?(ty2)
62
+ if ty1.class == ty2.class
63
+ ty1.match?(ty2)
64
+ else
65
+ Type.match?(ty1, ty2.base_type)
66
+ end
64
67
  elsif ty1.is_a?(Type::ContainerType)
65
- nil
68
+ Type.match?(ty1.base_type, ty2)
66
69
  else
67
70
  ty1.consistent?(ty2) ? {} : nil
68
71
  end
@@ -810,7 +813,9 @@ module TypeProf
810
813
  when :$0, :$PROGRAM_NAME
811
814
  Type::Instance.new(Type::Builtin[:str])
812
815
  when :$~
813
- Type.optional(Type::Instance.new(Type::Builtin[:matchdata]))
816
+ # optional type is tentatively disabled; it is too conservative
817
+ #Type.optional(Type::Instance.new(Type::Builtin[:matchdata]))
818
+ Type::Instance.new(Type::Builtin[:matchdata])
814
819
  when :$., :$$
815
820
  Type::Instance.new(Type::Builtin[:int])
816
821
  when :$?
@@ -1,3 +1,3 @@
1
1
  module TypeProf
2
- VERSION = "0.21.3"
2
+ VERSION = "0.21.7"
3
3
  end
data/lib/typeprof.rb CHANGED
@@ -17,4 +17,4 @@ require_relative "typeprof/builtin"
17
17
  require_relative "typeprof/cli"
18
18
  require_relative "typeprof/code-range"
19
19
 
20
- require_relative "typeprof/lsp" if RUBY_VERSION >= "3"
20
+ require_relative "typeprof/lsp" if RUBY_VERSION >= "3" and RUBY_ENGINE != "truffleruby"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typeprof
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.3
4
+ version: 0.21.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yusuke Endoh
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-06 00:00:00.000000000 Z
11
+ date: 2023-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbs
@@ -37,6 +37,7 @@ executables:
37
37
  extensions: []
38
38
  extra_rdoc_files: []
39
39
  files:
40
+ - ".github/dependabot.yml"
40
41
  - ".github/workflows/main.yml"
41
42
  - ".gitignore"
42
43
  - Gemfile
@@ -73,7 +74,7 @@ licenses:
73
74
  metadata:
74
75
  homepage_uri: https://github.com/ruby/typeprof
75
76
  source_code_uri: https://github.com/ruby/typeprof
76
- post_install_message:
77
+ post_install_message:
77
78
  rdoc_options: []
78
79
  require_paths:
79
80
  - lib
@@ -88,8 +89,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
88
89
  - !ruby/object:Gem::Version
89
90
  version: '0'
90
91
  requirements: []
91
- rubygems_version: 3.3.7
92
- signing_key:
92
+ rubygems_version: 3.5.0.dev
93
+ signing_key:
93
94
  specification_version: 4
94
95
  summary: TypeProf is a type analysis tool for Ruby code based on abstract interpretation
95
96
  test_files: []