tapioca 0.4.23 → 0.4.27

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3fe702a52ed1226bf7c94e4288d722665e8444e89066a7cb9fda8066a2bebc3a
4
- data.tar.gz: 1bb7b3bd18bf1b136b6c01afe6f27a82a49c31558a5298ebe2fb045476f7ec0d
3
+ metadata.gz: 91440af4ff5a8cd586284d4d5a2cc35600ec803b825bdcd57492a3eb94b65bf3
4
+ data.tar.gz: d6db15fe94c5cd0e8100f8bf1fd8fb9a760123891cee3b079470011719dc55e0
5
5
  SHA512:
6
- metadata.gz: 75ba6fe1ba52763c5c31f6f792f2bc766d8874fbd4814bd16137e3238926c1efb35bb4663bdc8ae423bed1d489425b5f3a569e41b2e75d8318ab7cad800f597c
7
- data.tar.gz: e15284dee1f66fca6a032194b359f54523bbc2c3981423268ffd3402e74bdd66403a08239c712145b0455fa7b0c4d7c5600d9d5ae398d9dd2b88cf4ddc3376c7
6
+ metadata.gz: 536bcacea8d4b5848dc8075fc94f50d34d80c23f00b9ea331862f911be6eb58c3a62b30d529663ddfd60441f632aab62e6250d8dc1c7a1a8f32dbfc0d510ae18
7
+ data.tar.gz: 57942419606b3d054fb392b6c3c026bff5aa7f63cb3cfc58defb8dbc81e49e72902eb26a8ebb9713561f21d4822a644fd6b9a36c7f2c0a135461b3b4e1d9c267
@@ -17,7 +17,7 @@ module Tapioca
17
17
 
18
18
  attr_reader(:gem, :indent)
19
19
 
20
- sig { params(gem: Gemfile::Gem, indent: Integer).void }
20
+ sig { params(gem: Gemfile::GemSpec, indent: Integer).void }
21
21
  def initialize(gem, indent = 0)
22
22
  @gem = gem
23
23
  @indent = indent
@@ -8,7 +8,7 @@ module Tapioca
8
8
 
9
9
  sig do
10
10
  params(
11
- gem: Gemfile::Gem,
11
+ gem: Gemfile::GemSpec,
12
12
  indent: Integer
13
13
  ).returns(String)
14
14
  end
@@ -20,7 +20,7 @@ module Tapioca
20
20
  sig { returns(Bundler::Definition) }
21
21
  attr_reader(:definition)
22
22
 
23
- sig { returns(T::Array[Gem]) }
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[Gem])
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(Gem)) }
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 require
46
- T.unsafe(runtime).setup(*groups).require(*groups)
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[Gem], T::Array[String]]) }
54
+ sig { returns([T::Array[GemSpec], T::Array[String]]) }
55
55
  def load_dependencies
56
- deps = definition.locked_gems.dependencies.values
57
-
58
- missing_specs = T::Array[String].new
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 Gem
95
+ class GemSpec
87
96
  extend(T::Sig)
88
97
 
89
98
  IGNORED_GEMS = T.let(%w{
@@ -260,7 +260,7 @@ module Tapioca
260
260
  def load_application(eager_load:)
261
261
  say("Loading Rails application... ")
262
262
 
263
- loader.load_rails(
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::Gem])
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::Gem).void }
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)
@@ -3,7 +3,6 @@
3
3
 
4
4
  require "tapioca"
5
5
  require "tapioca/loader"
6
- require "tapioca/constant_locator"
7
6
  require "tapioca/generic_type_registry"
8
7
  require "tapioca/sorbet_ext/generic_name_patch"
9
8
  require "tapioca/sorbet_ext/fixed_hash_patch"
@@ -14,10 +14,9 @@ module Tapioca
14
14
  def load_bundle(initialize_file, require_file)
15
15
  require_helper(initialize_file)
16
16
 
17
- load_rails
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 load_rails(environment_load: false, eager_load: false)
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 kind_rank(node.kind)
27
- when Include, Extend then 0
28
- when Helper then 1
29
- when TypeMember then 2
30
- when MixesInClassMethods then 3
31
- when TStructField then 4
32
- when TEnumBlock then 5
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
- 7
37
+ 71
38
+ elsif !node.is_singleton
39
+ 72
36
40
  else
37
- 8
41
+ 73
38
42
  end
39
- when Scope, Const then 9
43
+ when Scope, Const then 80
40
44
  else
41
- 10
45
+ 100
42
46
  end
43
47
  end
44
48
 
45
49
  sig { params(kind: Group::Kind).returns(Integer) }
46
- def kind_rank(kind)
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
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Tapioca
5
- VERSION = "0.4.23"
5
+ VERSION = "0.4.27"
6
6
  end
data/lib/tapioca.rb CHANGED
@@ -17,5 +17,6 @@ module Tapioca
17
17
  class Error < StandardError; end
18
18
  end
19
19
 
20
+ require "tapioca/constant_locator"
20
21
  require "tapioca/compilers/dsl/base"
21
22
  require "tapioca/version"
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.23
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-05-25 00:00:00.000000000 Z
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.17
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