tapioca 0.4.23 → 0.4.27
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 +4 -4
- data/lib/tapioca/compilers/symbol_table/symbol_generator.rb +1 -1
- data/lib/tapioca/compilers/symbol_table_compiler.rb +1 -1
- data/lib/tapioca/gemfile.rb +25 -16
- data/lib/tapioca/generator.rb +3 -3
- data/lib/tapioca/internal.rb +0 -1
- data/lib/tapioca/loader.rb +3 -17
- data/lib/tapioca/rbi/rewriters/sort_nodes.rb +16 -12
- data/lib/tapioca/version.rb +1 -1
- data/lib/tapioca.rb +1 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91440af4ff5a8cd586284d4d5a2cc35600ec803b825bdcd57492a3eb94b65bf3
|
4
|
+
data.tar.gz: d6db15fe94c5cd0e8100f8bf1fd8fb9a760123891cee3b079470011719dc55e0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 536bcacea8d4b5848dc8075fc94f50d34d80c23f00b9ea331862f911be6eb58c3a62b30d529663ddfd60441f632aab62e6250d8dc1c7a1a8f32dbfc0d510ae18
|
7
|
+
data.tar.gz: 57942419606b3d054fb392b6c3c026bff5aa7f63cb3cfc58defb8dbc81e49e72902eb26a8ebb9713561f21d4822a644fd6b9a36c7f2c0a135461b3b4e1d9c267
|
data/lib/tapioca/gemfile.rb
CHANGED
@@ -20,7 +20,7 @@ module Tapioca
|
|
20
20
|
sig { returns(Bundler::Definition) }
|
21
21
|
attr_reader(:definition)
|
22
22
|
|
23
|
-
sig { returns(T::Array[
|
23
|
+
sig { returns(T::Array[GemSpec]) }
|
24
24
|
attr_reader(:dependencies)
|
25
25
|
|
26
26
|
sig { returns(T::Array[String]) }
|
@@ -32,18 +32,18 @@ module Tapioca
|
|
32
32
|
@lockfile = T.let(File.new(Bundler.default_lockfile), File)
|
33
33
|
@definition = T.let(Bundler::Dsl.evaluate(gemfile, lockfile, {}), Bundler::Definition)
|
34
34
|
dependencies, missing_specs = load_dependencies
|
35
|
-
@dependencies = T.let(dependencies, T::Array[
|
35
|
+
@dependencies = T.let(dependencies, T::Array[GemSpec])
|
36
36
|
@missing_specs = T.let(missing_specs, T::Array[String])
|
37
37
|
end
|
38
38
|
|
39
|
-
sig { params(gem_name: String).returns(T.nilable(
|
39
|
+
sig { params(gem_name: String).returns(T.nilable(GemSpec)) }
|
40
40
|
def gem(gem_name)
|
41
41
|
dependencies.detect { |dep| dep.name == gem_name }
|
42
42
|
end
|
43
43
|
|
44
44
|
sig { void }
|
45
|
-
def
|
46
|
-
T.unsafe(runtime).
|
45
|
+
def require_bundle
|
46
|
+
T.unsafe(runtime).require(*groups)
|
47
47
|
end
|
48
48
|
|
49
49
|
private
|
@@ -51,23 +51,32 @@ module Tapioca
|
|
51
51
|
sig { returns(File) }
|
52
52
|
attr_reader(:gemfile, :lockfile)
|
53
53
|
|
54
|
-
sig { returns([T::Array[
|
54
|
+
sig { returns([T::Array[GemSpec], T::Array[String]]) }
|
55
55
|
def load_dependencies
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
dependencies = definition
|
61
|
-
.resolve
|
62
|
-
.materialize(deps, missing_specs)
|
63
|
-
.map { |spec| Gem.new(spec) }
|
56
|
+
materialized_dependencies, missing_specs = materialize_deps
|
57
|
+
dependencies = materialized_dependencies
|
58
|
+
.map { |spec| GemSpec.new(spec) }
|
64
59
|
.reject { |gem| gem.ignore?(dir) }
|
65
60
|
.uniq(&:rbi_file_name)
|
66
61
|
.sort_by(&:rbi_file_name)
|
67
|
-
|
68
62
|
[dependencies, missing_specs]
|
69
63
|
end
|
70
64
|
|
65
|
+
sig { returns([T::Array[::Gem::Specification], T::Array[String]]) }
|
66
|
+
def materialize_deps
|
67
|
+
deps = definition.locked_gems.dependencies.values
|
68
|
+
missing_specs = T::Array[String].new
|
69
|
+
materialized_dependencies = if definition.resolve.method(:materialize).arity == 1 # Support bundler >= v2.2.25
|
70
|
+
md = definition.resolve.materialize(deps)
|
71
|
+
missing_spec_names = md.missing_specs.map(&:name)
|
72
|
+
missing_specs = T.cast(md.missing_specs.map { |spec| "#{spec.name} (#{spec.version})" }, T::Array[String])
|
73
|
+
md.to_a.reject { |spec| missing_spec_names.include?(spec.name) }
|
74
|
+
else
|
75
|
+
definition.resolve.materialize(deps, missing_specs)
|
76
|
+
end
|
77
|
+
[materialized_dependencies, missing_specs]
|
78
|
+
end
|
79
|
+
|
71
80
|
sig { returns(Bundler::Runtime) }
|
72
81
|
def runtime
|
73
82
|
Bundler::Runtime.new(File.dirname(gemfile.path), definition)
|
@@ -83,7 +92,7 @@ module Tapioca
|
|
83
92
|
File.expand_path(gemfile.path + "/..")
|
84
93
|
end
|
85
94
|
|
86
|
-
class
|
95
|
+
class GemSpec
|
87
96
|
extend(T::Sig)
|
88
97
|
|
89
98
|
IGNORED_GEMS = T.let(%w{
|
data/lib/tapioca/generator.rb
CHANGED
@@ -260,7 +260,7 @@ module Tapioca
|
|
260
260
|
def load_application(eager_load:)
|
261
261
|
say("Loading Rails application... ")
|
262
262
|
|
263
|
-
loader.
|
263
|
+
loader.load_rails_application(
|
264
264
|
environment_load: true,
|
265
265
|
eager_load: eager_load
|
266
266
|
)
|
@@ -456,7 +456,7 @@ module Tapioca
|
|
456
456
|
|
457
457
|
sig do
|
458
458
|
params(gem_names: T::Array[String])
|
459
|
-
.returns(T::Array[Gemfile::
|
459
|
+
.returns(T::Array[Gemfile::GemSpec])
|
460
460
|
end
|
461
461
|
def gems_to_generate(gem_names)
|
462
462
|
return bundle.dependencies if gem_names.empty?
|
@@ -486,7 +486,7 @@ module Tapioca
|
|
486
486
|
[statement, sigil].compact.join("\n").strip.concat("\n\n")
|
487
487
|
end
|
488
488
|
|
489
|
-
sig { params(gem: Gemfile::
|
489
|
+
sig { params(gem: Gemfile::GemSpec).void }
|
490
490
|
def compile_gem_rbi(gem)
|
491
491
|
compiler = Compilers::SymbolTableCompiler.new
|
492
492
|
gem_name = set_color(gem.name, :yellow, :bold)
|
data/lib/tapioca/internal.rb
CHANGED
data/lib/tapioca/loader.rb
CHANGED
@@ -14,10 +14,9 @@ module Tapioca
|
|
14
14
|
def load_bundle(initialize_file, require_file)
|
15
15
|
require_helper(initialize_file)
|
16
16
|
|
17
|
-
|
18
|
-
load_rake
|
17
|
+
load_rails_application
|
19
18
|
|
20
|
-
require_bundle
|
19
|
+
gemfile.require_bundle
|
21
20
|
|
22
21
|
require_helper(require_file)
|
23
22
|
|
@@ -25,14 +24,11 @@ module Tapioca
|
|
25
24
|
end
|
26
25
|
|
27
26
|
sig { params(environment_load: T::Boolean, eager_load: T::Boolean).void }
|
28
|
-
def
|
27
|
+
def load_rails_application(environment_load: false, eager_load: false)
|
29
28
|
return unless File.exist?("config/application.rb")
|
30
29
|
|
31
|
-
safe_require("rails")
|
32
|
-
|
33
30
|
silence_deprecations
|
34
31
|
|
35
|
-
safe_require("rails/generators/test_case")
|
36
32
|
if environment_load
|
37
33
|
safe_require("./config/environment")
|
38
34
|
else
|
@@ -56,11 +52,6 @@ module Tapioca
|
|
56
52
|
require(file)
|
57
53
|
end
|
58
54
|
|
59
|
-
sig { void }
|
60
|
-
def require_bundle
|
61
|
-
gemfile.require
|
62
|
-
end
|
63
|
-
|
64
55
|
sig { returns(T::Array[T.untyped]) }
|
65
56
|
def rails_engines
|
66
57
|
engines = []
|
@@ -84,11 +75,6 @@ module Tapioca
|
|
84
75
|
nil
|
85
76
|
end
|
86
77
|
|
87
|
-
sig { void }
|
88
|
-
def load_rake
|
89
|
-
safe_require("rake")
|
90
|
-
end
|
91
|
-
|
92
78
|
sig { void }
|
93
79
|
def silence_deprecations
|
94
80
|
# Stop any ActiveSupport Deprecations from being reported
|
@@ -11,9 +11,11 @@ module Tapioca
|
|
11
11
|
def visit(node)
|
12
12
|
return unless node.is_a?(Tree)
|
13
13
|
visit_all(node.nodes)
|
14
|
+
original_order = node.nodes.map.with_index.to_h
|
14
15
|
node.nodes.sort! do |a, b|
|
15
16
|
res = node_rank(a) <=> node_rank(b)
|
16
17
|
res = node_name(a) <=> node_name(b) if res == 0
|
18
|
+
res = (original_order[a] || 0) <=> (original_order[b] || 0) if res == 0
|
17
19
|
res || 0
|
18
20
|
end
|
19
21
|
end
|
@@ -23,27 +25,29 @@ module Tapioca
|
|
23
25
|
sig { params(node: Node).returns(Integer) }
|
24
26
|
def node_rank(node)
|
25
27
|
case node
|
26
|
-
when Group then
|
27
|
-
when Include, Extend then
|
28
|
-
when Helper then
|
29
|
-
when TypeMember then
|
30
|
-
when MixesInClassMethods then
|
31
|
-
when TStructField then
|
32
|
-
when TEnumBlock then
|
28
|
+
when Group then group_rank(node.kind)
|
29
|
+
when Include, Extend then 10
|
30
|
+
when Helper then 20
|
31
|
+
when TypeMember then 30
|
32
|
+
when MixesInClassMethods then 40
|
33
|
+
when TStructField then 50
|
34
|
+
when TEnumBlock then 60
|
33
35
|
when Method
|
34
36
|
if node.name == "initialize"
|
35
|
-
|
37
|
+
71
|
38
|
+
elsif !node.is_singleton
|
39
|
+
72
|
36
40
|
else
|
37
|
-
|
41
|
+
73
|
38
42
|
end
|
39
|
-
when Scope, Const then
|
43
|
+
when Scope, Const then 80
|
40
44
|
else
|
41
|
-
|
45
|
+
100
|
42
46
|
end
|
43
47
|
end
|
44
48
|
|
45
49
|
sig { params(kind: Group::Kind).returns(Integer) }
|
46
|
-
def
|
50
|
+
def group_rank(kind)
|
47
51
|
case kind
|
48
52
|
when Group::Kind::Mixins then 0
|
49
53
|
when Group::Kind::Helpers then 1
|
data/lib/tapioca/version.rb
CHANGED
data/lib/tapioca.rb
CHANGED
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.4.
|
4
|
+
version: 0.4.27
|
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: 2021-
|
14
|
+
date: 2021-09-16 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: bundler
|
@@ -192,7 +192,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
192
192
|
- !ruby/object:Gem::Version
|
193
193
|
version: '0'
|
194
194
|
requirements: []
|
195
|
-
rubygems_version: 3.2.
|
195
|
+
rubygems_version: 3.2.20
|
196
196
|
signing_key:
|
197
197
|
specification_version: 4
|
198
198
|
summary: A Ruby Interface file generator for gems, core types and the Ruby standard
|