tapioca 0.1.3 → 0.1.4

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: 486ed6189d826200542ebeecc64b4a12672c5372ca4296ae9f2b3fbc3346dc7b
4
- data.tar.gz: 174ef0b65054b5bc859e1c4918220f73cf9122f48988182ff203e38b1424d297
3
+ metadata.gz: 75a87d3c876d0f813f47a8d40065ff30543661787819493d32b6116f387d1408
4
+ data.tar.gz: a546890d23895b079d35b37b326b604ae77d08b8219adda3b259f1a8042fa255
5
5
  SHA512:
6
- metadata.gz: 597e233e1f468b6d0279b2a92d4cf179a228fbf00b2a29bb15d7dd6ed228e21c4ce26abbb2f78580fda3c55e219f5597b62b8c46041057afadaf340618239ba7
7
- data.tar.gz: f5cded71aeeb64e5f51be19da47c5e8fb6498d962a4025cdc8e02a50556c70b375ff4602a8e7c82a77cecddfbeff3ee7a281c1213a9174908a1121ab59408101
6
+ metadata.gz: b8d394ddbf391ce726b55e252631362b10ad0e2ed868e673253b7ebd1b9817d0290784ddd4c6c47864c8453ceddbfa27933c4306d78f903080aa6222e43a4f8f
7
+ data.tar.gz: ad2cf1d229a5a77594e6b2d697b14ded970659c1fb65cc01e4671a2b799bd17d8afc814ca6cc91510a97e7dbdab3926cb60fdcc82a1afb78ecd7a9aa695628d9
data/README.md CHANGED
@@ -9,7 +9,9 @@ Tapioca is a library used to generate RBI (Ruby interface) files for use with [S
9
9
  Add this line to your application's `Gemfile`:
10
10
 
11
11
  ```ruby
12
- gem 'tapioca', '~> 0.1.2', require: false
12
+ group :development do
13
+ gem 'tapioca', '~> 0.1.2', require: false
14
+ end
13
15
  ```
14
16
 
15
17
  and do not forget to execute `tapioca` using `bundler`:
@@ -1,8 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
-
3
+ require "sorbet-runtime"
4
4
  require "zeitwerk"
5
- require_relative "./t"
6
5
 
7
6
  loader = Zeitwerk::Loader.for_gem
8
7
  loader.setup
@@ -19,4 +18,10 @@ module Tapioca
19
18
  class Error < StandardError; end
20
19
  end
21
20
 
21
+ T::Configuration.default_checked_level = :never
22
+ # Suppresses errors caused by T.cast, T.let, T.must, etc.
23
+ T::Configuration.inline_type_error_handler = ->(*) {}
24
+ # Suppresses errors caused by incorrect parameter ordering
25
+ T::Configuration.sig_validation_error_handler = ->(*) {}
26
+
22
27
  loader.eager_load
@@ -459,6 +459,7 @@ module Tapioca
459
459
  sig { params(constant: Module, strict: T::Boolean).returns(T::Boolean) }
460
460
  def defined_in_gem?(constant, strict: true)
461
461
  files = get_file_candidates(constant)
462
+ files = Tapioca::ConstantLocator.files_for(constant) if files.empty?
462
463
 
463
464
  return !strict if files.empty?
464
465
 
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'set'
4
+
5
+ module Tapioca
6
+ # Registers a TracePoint immediately upon load to track points at which
7
+ # classes and modules are opened for definition. This is used to track
8
+ # correspondence between classes/modules and files, as this information isn't
9
+ # available in the ruby runtime without extra accounting.
10
+ module ConstantLocator
11
+ @class_files = {}
12
+
13
+ NAME = Module.instance_method(:name)
14
+ private_constant :NAME
15
+
16
+ # Immediately activated upon load. Observes class/module definition.
17
+ TracePoint.trace(:class) do |tp|
18
+ unless tp.self.singleton_class?
19
+ key = NAME.bind(tp.self).call
20
+ @class_files[key] ||= Set.new
21
+ @class_files[key] << tp.path
22
+ end
23
+ end
24
+
25
+ # Returns the files in which this class or module was opened. Doesn't know
26
+ # about situations where the class was opened prior to +require+ing,
27
+ # or where metaprogramming was used via +eval+, etc.
28
+ def files_for(klass)
29
+ name = String === klass ? klass : NAME.bind(klass).call
30
+ files = @class_files[name]
31
+ files || Set.new
32
+ end
33
+ module_function :files_for
34
+ end
35
+ end
@@ -62,7 +62,7 @@ module Tapioca
62
62
 
63
63
  sig { params(spec: Spec).returns(T::Boolean) }
64
64
  def ignore_gem_spec?(spec)
65
- spec.name == "sorbet" ||
65
+ ["sorbet", "sorbet-static"].include?(spec.name) ||
66
66
  spec.full_gem_path.start_with?(gemfile_dir)
67
67
  end
68
68
 
@@ -71,12 +71,25 @@ module Tapioca
71
71
  File.expand_path(gemfile.path + "/..")
72
72
  end
73
73
 
74
+ sig { returns(T::Array[T.untyped]) }
75
+ def rails_engines
76
+ engines = []
77
+
78
+ return engines unless Object.const_defined?("Rails::Engine")
79
+
80
+ base = Object.const_get("Rails::Engine")
81
+ ObjectSpace.each_object(base.singleton_class) do |k|
82
+ k = T.cast(k, Class)
83
+ next if k.singleton_class?
84
+ engines.unshift(k) unless k == base
85
+ end
86
+
87
+ engines.reject(&:abstract_railtie?)
88
+ end
89
+
74
90
  sig { void }
75
91
  def load_rails_engines
76
- return unless Object.const_defined?("Rails::Engine")
77
- engines = Object.const_get("Rails::Engine").descendants.reject(&:abstract_railtie?)
78
-
79
- engines.each do |engine|
92
+ rails_engines.each do |engine|
80
93
  errored_files = []
81
94
 
82
95
  engine.config.eager_load_paths.each do |load_path|
@@ -102,7 +115,7 @@ module Tapioca
102
115
 
103
116
  sig { params(spec: Spec).void }
104
117
  def initialize(spec)
105
- @spec = T.let(spec, Spec)
118
+ @spec = T.let(spec, Tapioca::Gemfile::Spec)
106
119
  end
107
120
 
108
121
  sig { returns(String) }
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Tapioca
5
- VERSION = "0.1.3"
5
+ VERSION = "0.1.4"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tapioca
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ufuk Kayserilioglu
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2019-07-04 00:00:00.000000000 Z
14
+ date: 2019-07-15 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: pry
@@ -41,6 +41,20 @@ dependencies:
41
41
  - - "~>"
42
42
  - !ruby/object:Gem::Version
43
43
  version: 0.4.4371
44
+ - !ruby/object:Gem::Dependency
45
+ name: sorbet-runtime
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
44
58
  - !ruby/object:Gem::Dependency
45
59
  name: thor
46
60
  requirement: !ruby/object:Gem::Requirement
@@ -165,12 +179,12 @@ files:
165
179
  - README.md
166
180
  - Rakefile
167
181
  - exe/tapioca
168
- - lib/t.rb
169
182
  - lib/tapioca.rb
170
183
  - lib/tapioca/cli.rb
171
184
  - lib/tapioca/compilers/symbol_table/symbol_generator.rb
172
185
  - lib/tapioca/compilers/symbol_table/symbol_loader.rb
173
186
  - lib/tapioca/compilers/symbol_table_compiler.rb
187
+ - lib/tapioca/constant_locator.rb
174
188
  - lib/tapioca/gemfile.rb
175
189
  - lib/tapioca/generator.rb
176
190
  - lib/tapioca/version.rb
data/lib/t.rb DELETED
@@ -1,50 +0,0 @@
1
- unless defined?(T)
2
- module T
3
- def self.any(type_a, type_b, *types); end
4
- def self.nilable(type); end
5
- def self.untyped; end
6
- def self.noreturn; end
7
- def self.all(type_a, type_b, *types); end
8
- def self.enum(values); end
9
- def self.proc; end
10
- def self.self_type; end
11
- def self.class_of(klass); end
12
- def self.type_alias(type); end
13
- def self.type_parameter(name); end
14
-
15
- def self.cast(value, type, checked: true); value; end
16
- def self.let(value, type, checked: true); value; end
17
- def self.assert_type!(value, type, checked: true); value; end
18
- def self.unsafe(value); value; end
19
- def self.must(arg, msg=nil); arg; end
20
- def self.reveal_type(value); value; end
21
- end
22
-
23
- module T::Sig
24
- def sig(&blk); end
25
- end
26
-
27
- module T::Array
28
- def self.[](type); end
29
- end
30
-
31
- module T::Hash
32
- def self.[](keys, values); end
33
- end
34
-
35
- module T::Enumerable
36
- def self.[](type); end
37
- end
38
-
39
- module T::Range
40
- def self.[](type); end
41
- end
42
-
43
- module T::Set
44
- def self.[](type); end
45
- end
46
-
47
- module T::Boolean
48
- end
49
- end
50
-