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 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