packwerk 1.0.0

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.
Files changed (153) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
  3. data/.github/probots.yml +2 -0
  4. data/.github/pull_request_template.md +27 -0
  5. data/.github/workflows/ci.yml +50 -0
  6. data/.gitignore +12 -0
  7. data/.rubocop.yml +46 -0
  8. data/.ruby-version +1 -0
  9. data/CODEOWNERS +1 -0
  10. data/CODE_OF_CONDUCT.md +76 -0
  11. data/CONTRIBUTING.md +17 -0
  12. data/Gemfile +22 -0
  13. data/Gemfile.lock +236 -0
  14. data/LICENSE.md +7 -0
  15. data/README.md +73 -0
  16. data/Rakefile +13 -0
  17. data/TROUBLESHOOT.md +67 -0
  18. data/USAGE.md +250 -0
  19. data/bin/console +15 -0
  20. data/bin/setup +8 -0
  21. data/dev.yml +32 -0
  22. data/docs/cohesion.png +0 -0
  23. data/exe/packwerk +6 -0
  24. data/lib/packwerk.rb +44 -0
  25. data/lib/packwerk/application_validator.rb +343 -0
  26. data/lib/packwerk/association_inspector.rb +44 -0
  27. data/lib/packwerk/checking_deprecated_references.rb +40 -0
  28. data/lib/packwerk/cli.rb +238 -0
  29. data/lib/packwerk/configuration.rb +82 -0
  30. data/lib/packwerk/const_node_inspector.rb +44 -0
  31. data/lib/packwerk/constant_discovery.rb +60 -0
  32. data/lib/packwerk/constant_name_inspector.rb +22 -0
  33. data/lib/packwerk/dependency_checker.rb +28 -0
  34. data/lib/packwerk/deprecated_references.rb +92 -0
  35. data/lib/packwerk/file_processor.rb +43 -0
  36. data/lib/packwerk/files_for_processing.rb +67 -0
  37. data/lib/packwerk/formatters/progress_formatter.rb +46 -0
  38. data/lib/packwerk/generators/application_validation.rb +62 -0
  39. data/lib/packwerk/generators/configuration_file.rb +69 -0
  40. data/lib/packwerk/generators/inflections_file.rb +43 -0
  41. data/lib/packwerk/generators/root_package.rb +37 -0
  42. data/lib/packwerk/generators/templates/inflections.yml +6 -0
  43. data/lib/packwerk/generators/templates/package.yml +17 -0
  44. data/lib/packwerk/generators/templates/packwerk +23 -0
  45. data/lib/packwerk/generators/templates/packwerk.yml.erb +23 -0
  46. data/lib/packwerk/generators/templates/packwerk_validator_test.rb +11 -0
  47. data/lib/packwerk/graph.rb +74 -0
  48. data/lib/packwerk/inflections/custom.rb +33 -0
  49. data/lib/packwerk/inflections/default.rb +73 -0
  50. data/lib/packwerk/inflector.rb +41 -0
  51. data/lib/packwerk/node.rb +259 -0
  52. data/lib/packwerk/node_processor.rb +49 -0
  53. data/lib/packwerk/node_visitor.rb +22 -0
  54. data/lib/packwerk/offense.rb +44 -0
  55. data/lib/packwerk/output_styles.rb +41 -0
  56. data/lib/packwerk/package.rb +56 -0
  57. data/lib/packwerk/package_set.rb +59 -0
  58. data/lib/packwerk/parsed_constant_definitions.rb +62 -0
  59. data/lib/packwerk/parsers.rb +23 -0
  60. data/lib/packwerk/parsers/erb.rb +66 -0
  61. data/lib/packwerk/parsers/factory.rb +34 -0
  62. data/lib/packwerk/parsers/ruby.rb +42 -0
  63. data/lib/packwerk/privacy_checker.rb +45 -0
  64. data/lib/packwerk/reference.rb +6 -0
  65. data/lib/packwerk/reference_extractor.rb +81 -0
  66. data/lib/packwerk/reference_lister.rb +23 -0
  67. data/lib/packwerk/run_context.rb +103 -0
  68. data/lib/packwerk/sanity_checker.rb +10 -0
  69. data/lib/packwerk/spring_command.rb +28 -0
  70. data/lib/packwerk/updating_deprecated_references.rb +51 -0
  71. data/lib/packwerk/version.rb +6 -0
  72. data/lib/packwerk/violation_type.rb +13 -0
  73. data/library.yml +6 -0
  74. data/packwerk.gemspec +58 -0
  75. data/service.yml +6 -0
  76. data/shipit.rubygems.yml +1 -0
  77. data/sorbet/config +2 -0
  78. data/sorbet/rbi/gems/actioncable@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +840 -0
  79. data/sorbet/rbi/gems/actionmailbox@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +571 -0
  80. data/sorbet/rbi/gems/actionmailer@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +568 -0
  81. data/sorbet/rbi/gems/actionpack@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +5216 -0
  82. data/sorbet/rbi/gems/actiontext@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +663 -0
  83. data/sorbet/rbi/gems/actionview@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +2504 -0
  84. data/sorbet/rbi/gems/activejob@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +635 -0
  85. data/sorbet/rbi/gems/activemodel@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +1201 -0
  86. data/sorbet/rbi/gems/activerecord@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +8011 -0
  87. data/sorbet/rbi/gems/activestorage@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +904 -0
  88. data/sorbet/rbi/gems/activesupport@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +3888 -0
  89. data/sorbet/rbi/gems/ast@2.4.1.rbi +54 -0
  90. data/sorbet/rbi/gems/better_html@1.0.15.rbi +317 -0
  91. data/sorbet/rbi/gems/builder@3.2.4.rbi +8 -0
  92. data/sorbet/rbi/gems/byebug@11.1.3.rbi +8 -0
  93. data/sorbet/rbi/gems/coderay@1.1.3.rbi +8 -0
  94. data/sorbet/rbi/gems/colorize@0.8.1.rbi +40 -0
  95. data/sorbet/rbi/gems/commander@4.5.2.rbi +8 -0
  96. data/sorbet/rbi/gems/concurrent-ruby@1.1.6.rbi +1966 -0
  97. data/sorbet/rbi/gems/constant_resolver@0.1.5.rbi +26 -0
  98. data/sorbet/rbi/gems/crass@1.0.6.rbi +138 -0
  99. data/sorbet/rbi/gems/erubi@1.9.0.rbi +39 -0
  100. data/sorbet/rbi/gems/globalid@0.4.2.rbi +178 -0
  101. data/sorbet/rbi/gems/highline@2.0.3.rbi +8 -0
  102. data/sorbet/rbi/gems/html_tokenizer@0.0.7.rbi +46 -0
  103. data/sorbet/rbi/gems/i18n@1.8.2.rbi +633 -0
  104. data/sorbet/rbi/gems/jaro_winkler@1.5.4.rbi +8 -0
  105. data/sorbet/rbi/gems/loofah@2.5.0.rbi +272 -0
  106. data/sorbet/rbi/gems/m@1.5.1.rbi +108 -0
  107. data/sorbet/rbi/gems/mail@2.7.1.rbi +2490 -0
  108. data/sorbet/rbi/gems/marcel@0.3.3.rbi +30 -0
  109. data/sorbet/rbi/gems/method_source@1.0.0.rbi +76 -0
  110. data/sorbet/rbi/gems/mimemagic@0.3.5.rbi +47 -0
  111. data/sorbet/rbi/gems/mini_mime@1.0.2.rbi +71 -0
  112. data/sorbet/rbi/gems/mini_portile2@2.4.0.rbi +8 -0
  113. data/sorbet/rbi/gems/minitest@5.14.0.rbi +542 -0
  114. data/sorbet/rbi/gems/mocha@1.11.2.rbi +964 -0
  115. data/sorbet/rbi/gems/nio4r@2.5.2.rbi +89 -0
  116. data/sorbet/rbi/gems/nokogiri@1.10.9.rbi +1608 -0
  117. data/sorbet/rbi/gems/parallel@1.19.1.rbi +8 -0
  118. data/sorbet/rbi/gems/parlour@4.0.1.rbi +561 -0
  119. data/sorbet/rbi/gems/parser@2.7.1.4.rbi +1632 -0
  120. data/sorbet/rbi/gems/pry@0.13.1.rbi +8 -0
  121. data/sorbet/rbi/gems/rack-test@1.1.0.rbi +335 -0
  122. data/sorbet/rbi/gems/rack@2.2.2.rbi +1730 -0
  123. data/sorbet/rbi/gems/rails-dom-testing@2.0.3.rbi +123 -0
  124. data/sorbet/rbi/gems/rails-html-sanitizer@1.3.0.rbi +213 -0
  125. data/sorbet/rbi/gems/rails@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +8 -0
  126. data/sorbet/rbi/gems/railties@6.1.0.alpha-d80c18a391e33552ae2d943e68af56946f883f65.rbi +869 -0
  127. data/sorbet/rbi/gems/rainbow@3.0.0.rbi +155 -0
  128. data/sorbet/rbi/gems/rake@13.0.1.rbi +841 -0
  129. data/sorbet/rbi/gems/rexml@3.2.4.rbi +8 -0
  130. data/sorbet/rbi/gems/rubocop-performance@1.5.2.rbi +8 -0
  131. data/sorbet/rbi/gems/rubocop-shopify@1.0.2.rbi +8 -0
  132. data/sorbet/rbi/gems/rubocop-sorbet@0.3.7.rbi +8 -0
  133. data/sorbet/rbi/gems/rubocop@0.82.0.rbi +8 -0
  134. data/sorbet/rbi/gems/ruby-progressbar@1.10.1.rbi +8 -0
  135. data/sorbet/rbi/gems/smart_properties@1.15.0.rbi +168 -0
  136. data/sorbet/rbi/gems/spoom@1.0.4.rbi +418 -0
  137. data/sorbet/rbi/gems/spring@2.1.0.rbi +160 -0
  138. data/sorbet/rbi/gems/sprockets-rails@3.2.1.rbi +431 -0
  139. data/sorbet/rbi/gems/sprockets@4.0.0.rbi +1132 -0
  140. data/sorbet/rbi/gems/tapioca@0.4.5.rbi +518 -0
  141. data/sorbet/rbi/gems/thor@1.0.1.rbi +892 -0
  142. data/sorbet/rbi/gems/tzinfo@2.0.2.rbi +547 -0
  143. data/sorbet/rbi/gems/unicode-display_width@1.7.0.rbi +8 -0
  144. data/sorbet/rbi/gems/websocket-driver@0.7.1.rbi +438 -0
  145. data/sorbet/rbi/gems/websocket-extensions@0.1.4.rbi +71 -0
  146. data/sorbet/rbi/gems/zeitwerk@2.3.0.rbi +8 -0
  147. data/sorbet/tapioca/require.rb +25 -0
  148. data/static/packwerk-check-demo.png +0 -0
  149. data/static/packwerk_check.gif +0 -0
  150. data/static/packwerk_check_violation.gif +0 -0
  151. data/static/packwerk_update.gif +0 -0
  152. data/static/packwerk_validate.gif +0 -0
  153. metadata +341 -0
@@ -0,0 +1,26 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `constant_resolver` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ class ConstantResolver
8
+ def initialize(root_path:, load_paths:, inflector: T.unsafe(nil)); end
9
+
10
+ def config; end
11
+ def file_map; end
12
+ def resolve(const_name, current_namespace_path: T.unsafe(nil)); end
13
+
14
+ private
15
+
16
+ def resolve_constant(const_name, current_namespace_path, original_name: T.unsafe(nil)); end
17
+ def resolve_traversing_namespace_path(const_name, current_namespace_path); end
18
+ end
19
+
20
+ class ConstantResolver::ConstantContext < ::Struct
21
+ end
22
+
23
+ class ConstantResolver::Error < ::StandardError
24
+ end
25
+
26
+ ConstantResolver::VERSION = T.let(T.unsafe(nil), String)
@@ -0,0 +1,138 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `crass` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ module Crass
8
+ class << self
9
+ def parse(input, options = T.unsafe(nil)); end
10
+ def parse_properties(input, options = T.unsafe(nil)); end
11
+ end
12
+ end
13
+
14
+ class Crass::Parser
15
+ def initialize(input, options = T.unsafe(nil)); end
16
+
17
+ def consume_at_rule(input = T.unsafe(nil)); end
18
+ def consume_component_value(input = T.unsafe(nil)); end
19
+ def consume_declaration(input = T.unsafe(nil)); end
20
+ def consume_declarations(input = T.unsafe(nil), options = T.unsafe(nil)); end
21
+ def consume_function(input = T.unsafe(nil)); end
22
+ def consume_qualified_rule(input = T.unsafe(nil)); end
23
+ def consume_rules(flags = T.unsafe(nil)); end
24
+ def consume_simple_block(input = T.unsafe(nil)); end
25
+ def create_node(type, properties = T.unsafe(nil)); end
26
+ def create_selector(input); end
27
+ def create_style_rule(rule); end
28
+ def parse_component_value(input = T.unsafe(nil)); end
29
+ def parse_component_values(input = T.unsafe(nil)); end
30
+ def parse_declaration(input = T.unsafe(nil)); end
31
+ def parse_declarations(input = T.unsafe(nil), options = T.unsafe(nil)); end
32
+ def parse_properties(input = T.unsafe(nil)); end
33
+ def parse_rule(input = T.unsafe(nil)); end
34
+ def parse_value(nodes); end
35
+ def tokens; end
36
+
37
+ class << self
38
+ def parse_properties(input, options = T.unsafe(nil)); end
39
+ def parse_rules(input, options = T.unsafe(nil)); end
40
+ def parse_stylesheet(input, options = T.unsafe(nil)); end
41
+ def stringify(nodes, options = T.unsafe(nil)); end
42
+ end
43
+ end
44
+
45
+ Crass::Parser::BLOCK_END_TOKENS = T.let(T.unsafe(nil), Hash)
46
+
47
+ class Crass::Scanner
48
+ def initialize(input); end
49
+
50
+ def consume; end
51
+ def consume_rest; end
52
+ def current; end
53
+ def eos?; end
54
+ def mark; end
55
+ def marked; end
56
+ def marker; end
57
+ def marker=(_); end
58
+ def peek(length = T.unsafe(nil)); end
59
+ def pos; end
60
+ def pos=(_); end
61
+ def reconsume; end
62
+ def reset; end
63
+ def scan(pattern); end
64
+ def scan_until(pattern); end
65
+ def string; end
66
+ end
67
+
68
+ class Crass::TokenScanner
69
+ def initialize(tokens); end
70
+
71
+ def collect; end
72
+ def consume; end
73
+ def current; end
74
+ def peek; end
75
+ def pos; end
76
+ def reconsume; end
77
+ def reset; end
78
+ def tokens; end
79
+ end
80
+
81
+ class Crass::Tokenizer
82
+ def initialize(input, options = T.unsafe(nil)); end
83
+
84
+ def consume; end
85
+ def consume_bad_url; end
86
+ def consume_comments; end
87
+ def consume_escaped; end
88
+ def consume_ident; end
89
+ def consume_name; end
90
+ def consume_number; end
91
+ def consume_numeric; end
92
+ def consume_string(ending = T.unsafe(nil)); end
93
+ def consume_unicode_range; end
94
+ def consume_url; end
95
+ def convert_string_to_number(str); end
96
+ def create_token(type, properties = T.unsafe(nil)); end
97
+ def preprocess(input); end
98
+ def start_identifier?(text = T.unsafe(nil)); end
99
+ def start_number?(text = T.unsafe(nil)); end
100
+ def tokenize; end
101
+ def valid_escape?(text = T.unsafe(nil)); end
102
+
103
+ class << self
104
+ def tokenize(input, options = T.unsafe(nil)); end
105
+ end
106
+ end
107
+
108
+ Crass::Tokenizer::RE_COMMENT_CLOSE = T.let(T.unsafe(nil), Regexp)
109
+
110
+ Crass::Tokenizer::RE_DIGIT = T.let(T.unsafe(nil), Regexp)
111
+
112
+ Crass::Tokenizer::RE_ESCAPE = T.let(T.unsafe(nil), Regexp)
113
+
114
+ Crass::Tokenizer::RE_HEX = T.let(T.unsafe(nil), Regexp)
115
+
116
+ Crass::Tokenizer::RE_NAME = T.let(T.unsafe(nil), Regexp)
117
+
118
+ Crass::Tokenizer::RE_NAME_START = T.let(T.unsafe(nil), Regexp)
119
+
120
+ Crass::Tokenizer::RE_NON_PRINTABLE = T.let(T.unsafe(nil), Regexp)
121
+
122
+ Crass::Tokenizer::RE_NUMBER_DECIMAL = T.let(T.unsafe(nil), Regexp)
123
+
124
+ Crass::Tokenizer::RE_NUMBER_EXPONENT = T.let(T.unsafe(nil), Regexp)
125
+
126
+ Crass::Tokenizer::RE_NUMBER_SIGN = T.let(T.unsafe(nil), Regexp)
127
+
128
+ Crass::Tokenizer::RE_NUMBER_STR = T.let(T.unsafe(nil), Regexp)
129
+
130
+ Crass::Tokenizer::RE_QUOTED_URL_START = T.let(T.unsafe(nil), Regexp)
131
+
132
+ Crass::Tokenizer::RE_UNICODE_RANGE_END = T.let(T.unsafe(nil), Regexp)
133
+
134
+ Crass::Tokenizer::RE_UNICODE_RANGE_START = T.let(T.unsafe(nil), Regexp)
135
+
136
+ Crass::Tokenizer::RE_WHITESPACE = T.let(T.unsafe(nil), Regexp)
137
+
138
+ Crass::Tokenizer::RE_WHITESPACE_ANCHORED = T.let(T.unsafe(nil), Regexp)
@@ -0,0 +1,39 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `erubi` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ module Erubi
8
+ class << self
9
+ def h(value); end
10
+ end
11
+ end
12
+
13
+ class Erubi::Engine
14
+ def initialize(input, properties = T.unsafe(nil)); end
15
+
16
+ def bufvar; end
17
+ def filename; end
18
+ def src; end
19
+
20
+ private
21
+
22
+ def add_code(code); end
23
+ def add_expression(indicator, code); end
24
+ def add_expression_result(code); end
25
+ def add_expression_result_escaped(code); end
26
+ def add_postamble(postamble); end
27
+ def add_text(text); end
28
+ def handle(indicator, code, tailch, rspace, lspace); end
29
+ end
30
+
31
+ Erubi::RANGE_ALL = T.let(T.unsafe(nil), Range)
32
+
33
+ Erubi::RANGE_FIRST = T.let(T.unsafe(nil), Integer)
34
+
35
+ Erubi::RANGE_LAST = T.let(T.unsafe(nil), Integer)
36
+
37
+ Erubi::TEXT_END = T.let(T.unsafe(nil), String)
38
+
39
+ Erubi::VERSION = T.let(T.unsafe(nil), String)
@@ -0,0 +1,178 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `globalid` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ class GlobalID
8
+ extend(::ActiveSupport::Autoload)
9
+
10
+ def initialize(gid, options = T.unsafe(nil)); end
11
+
12
+ def ==(other); end
13
+ def app(*args, &block); end
14
+ def eql?(other); end
15
+ def find(options = T.unsafe(nil)); end
16
+ def hash; end
17
+ def model_class; end
18
+ def model_id(*args, &block); end
19
+ def model_name(*args, &block); end
20
+ def params(*args, &block); end
21
+ def to_param; end
22
+ def to_s(*args, &block); end
23
+ def uri; end
24
+
25
+ class << self
26
+ def app; end
27
+ def app=(app); end
28
+ def create(model, options = T.unsafe(nil)); end
29
+ def eager_load!; end
30
+ def find(gid, options = T.unsafe(nil)); end
31
+ def parse(gid, options = T.unsafe(nil)); end
32
+
33
+ private
34
+
35
+ def parse_encoded_gid(gid, options); end
36
+ def repad_gid(gid); end
37
+ end
38
+ end
39
+
40
+ module GlobalID::Identification
41
+ extend(::ActiveSupport::Concern)
42
+
43
+ def to_gid(options = T.unsafe(nil)); end
44
+ def to_gid_param(options = T.unsafe(nil)); end
45
+ def to_global_id(options = T.unsafe(nil)); end
46
+ def to_sgid(options = T.unsafe(nil)); end
47
+ def to_sgid_param(options = T.unsafe(nil)); end
48
+ def to_signed_global_id(options = T.unsafe(nil)); end
49
+ end
50
+
51
+ module GlobalID::Locator
52
+ class << self
53
+ def locate(gid, options = T.unsafe(nil)); end
54
+ def locate_many(gids, options = T.unsafe(nil)); end
55
+ def locate_many_signed(sgids, options = T.unsafe(nil)); end
56
+ def locate_signed(sgid, options = T.unsafe(nil)); end
57
+ def use(app, locator = T.unsafe(nil), &locator_block); end
58
+
59
+ private
60
+
61
+ def find_allowed?(model_class, only = T.unsafe(nil)); end
62
+ def locator_for(gid); end
63
+ def normalize_app(app); end
64
+ def parse_allowed(gids, only = T.unsafe(nil)); end
65
+ end
66
+ end
67
+
68
+ class GlobalID::Locator::BaseLocator
69
+ def locate(gid); end
70
+ def locate_many(gids, options = T.unsafe(nil)); end
71
+
72
+ private
73
+
74
+ def find_records(model_class, ids, options); end
75
+ end
76
+
77
+ class GlobalID::Locator::BlockLocator
78
+ def initialize(block); end
79
+
80
+ def locate(gid); end
81
+ def locate_many(gids, options = T.unsafe(nil)); end
82
+ end
83
+
84
+ GlobalID::Locator::DEFAULT_LOCATOR = T.let(T.unsafe(nil), GlobalID::Locator::UnscopedLocator)
85
+
86
+ class GlobalID::Locator::UnscopedLocator < ::GlobalID::Locator::BaseLocator
87
+ def locate(gid); end
88
+
89
+ private
90
+
91
+ def find_records(model_class, ids, options); end
92
+ def unscoped(model_class); end
93
+ end
94
+
95
+ class GlobalID::Railtie < ::Rails::Railtie
96
+ end
97
+
98
+ class GlobalID::Verifier < ::ActiveSupport::MessageVerifier
99
+
100
+ private
101
+
102
+ def decode(data); end
103
+ def encode(data); end
104
+ end
105
+
106
+ class SignedGlobalID < ::GlobalID
107
+ def initialize(gid, options = T.unsafe(nil)); end
108
+
109
+ def ==(other); end
110
+ def expires_at; end
111
+ def purpose; end
112
+ def to_h; end
113
+ def to_param; end
114
+ def to_s; end
115
+ def verifier; end
116
+
117
+ private
118
+
119
+ def encoded_expiration; end
120
+ def pick_expiration(options); end
121
+
122
+ class << self
123
+ def expires_in; end
124
+ def expires_in=(_); end
125
+ def parse(sgid, options = T.unsafe(nil)); end
126
+ def pick_purpose(options); end
127
+ def pick_verifier(options); end
128
+ def verifier; end
129
+ def verifier=(_); end
130
+
131
+ private
132
+
133
+ def raise_if_expired(expires_at); end
134
+ def verify(sgid, options); end
135
+ end
136
+ end
137
+
138
+ class SignedGlobalID::ExpiredMessage < ::StandardError
139
+ end
140
+
141
+ class URI::GID < ::URI::Generic
142
+ def app; end
143
+ def model_id; end
144
+ def model_name; end
145
+ def params; end
146
+ def to_s; end
147
+
148
+ protected
149
+
150
+ def query=(query); end
151
+ def set_params(params); end
152
+ def set_path(path); end
153
+ def set_query(query); end
154
+
155
+ private
156
+
157
+ def check_host(host); end
158
+ def check_path(path); end
159
+ def check_scheme(scheme); end
160
+ def parse_query_params(query); end
161
+ def set_model_components(path, validate = T.unsafe(nil)); end
162
+ def validate_component(component); end
163
+ def validate_model_id(model_id, model_name); end
164
+
165
+ class << self
166
+ def build(args); end
167
+ def create(app, model, params = T.unsafe(nil)); end
168
+ def parse(uri); end
169
+ def validate_app(app); end
170
+ end
171
+ end
172
+
173
+ URI::GID::COMPONENT = T.let(T.unsafe(nil), Array)
174
+
175
+ class URI::GID::MissingModelIdError < ::URI::InvalidComponentError
176
+ end
177
+
178
+ URI::GID::PATH_REGEXP = T.let(T.unsafe(nil), Regexp)
@@ -0,0 +1,8 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `highline` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ # THIS IS AN EMPTY RBI FILE.
8
+ # see https://github.com/Shopify/tapioca/blob/master/README.md#manual-gem-requires
@@ -0,0 +1,46 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `html_tokenizer` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ module HtmlTokenizer
8
+ end
9
+
10
+ class HtmlTokenizer::Parser
11
+ def initialize; end
12
+
13
+ def append_placeholder(_); end
14
+ def attribute_name; end
15
+ def attribute_quoted?; end
16
+ def attribute_value; end
17
+ def cdata_text; end
18
+ def closing_tag?; end
19
+ def column_number; end
20
+ def comment_text; end
21
+ def context; end
22
+ def document; end
23
+ def document_length; end
24
+ def errors; end
25
+ def errors_count; end
26
+ def line_number; end
27
+ def parse(_); end
28
+ def quote_character; end
29
+ def rawtext_text; end
30
+ def self_closing_tag?; end
31
+ def tag_name; end
32
+ end
33
+
34
+ class HtmlTokenizer::ParserError < ::RuntimeError
35
+ def initialize(message, position, line, column); end
36
+
37
+ def column; end
38
+ def line; end
39
+ def position; end
40
+ end
41
+
42
+ class HtmlTokenizer::Tokenizer
43
+ def initialize; end
44
+
45
+ def tokenize(_); end
46
+ end
@@ -0,0 +1,633 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for types exported from the `i18n` gem.
3
+ # Please instead update this file by running `dev typecheck update`.
4
+
5
+ # typed: true
6
+
7
+ module I18n
8
+ extend(::I18n::Base)
9
+
10
+ class << self
11
+ def interpolate(string, values); end
12
+ def interpolate_hash(string, values); end
13
+ def new_double_nested_cache; end
14
+ end
15
+ end
16
+
17
+ class I18n::ArgumentError < ::ArgumentError
18
+ end
19
+
20
+ module I18n::Backend
21
+ end
22
+
23
+ module I18n::Backend::Base
24
+ include(::I18n::Backend::Transliterator)
25
+
26
+ def available_locales; end
27
+ def eager_load!; end
28
+ def exists?(locale, key); end
29
+ def load_translations(*filenames); end
30
+ def localize(locale, object, format = T.unsafe(nil), options = T.unsafe(nil)); end
31
+ def reload!; end
32
+ def store_translations(locale, data, options = T.unsafe(nil)); end
33
+ def translate(locale, key, options = T.unsafe(nil)); end
34
+
35
+ protected
36
+
37
+ def deep_interpolate(locale, data, values = T.unsafe(nil)); end
38
+ def default(locale, object, subject, options = T.unsafe(nil)); end
39
+ def eager_loaded?; end
40
+ def interpolate(locale, subject, values = T.unsafe(nil)); end
41
+ def load_file(filename); end
42
+ def load_json(filename); end
43
+ def load_rb(filename); end
44
+ def load_yaml(filename); end
45
+ def load_yml(filename); end
46
+ def lookup(locale, key, scope = T.unsafe(nil), options = T.unsafe(nil)); end
47
+ def pluralization_key(entry, count); end
48
+ def pluralize(locale, entry, count); end
49
+ def resolve(locale, object, subject, options = T.unsafe(nil)); end
50
+ def subtrees?; end
51
+ def translate_localization_format(locale, object, format, options); end
52
+ end
53
+
54
+ module I18n::Backend::Cache
55
+ def translate(locale, key, options = T.unsafe(nil)); end
56
+
57
+ protected
58
+
59
+ def _fetch(cache_key, &block); end
60
+ def cache_key(locale, key, options); end
61
+ def fetch(cache_key, &block); end
62
+
63
+ private
64
+
65
+ def digest_item(key); end
66
+ end
67
+
68
+ module I18n::Backend::CacheFile
69
+ def path_roots; end
70
+ def path_roots=(_); end
71
+
72
+ protected
73
+
74
+ def load_file(filename); end
75
+ def normalized_path(file); end
76
+ end
77
+
78
+ module I18n::Backend::Cascade
79
+ def lookup(locale, key, scope = T.unsafe(nil), options = T.unsafe(nil)); end
80
+ end
81
+
82
+ class I18n::Backend::Chain
83
+ include(::I18n::Backend::Transliterator)
84
+ include(::I18n::Backend::Base)
85
+ include(::I18n::Backend::Chain::Implementation)
86
+ end
87
+
88
+ module I18n::Backend::Chain::Implementation
89
+ include(::I18n::Backend::Transliterator)
90
+ include(::I18n::Backend::Base)
91
+
92
+ def initialize(*backends); end
93
+
94
+ def available_locales; end
95
+ def backends; end
96
+ def backends=(_); end
97
+ def eager_load!; end
98
+ def exists?(locale, key); end
99
+ def initialized?; end
100
+ def localize(locale, object, format = T.unsafe(nil), options = T.unsafe(nil)); end
101
+ def reload!; end
102
+ def store_translations(locale, data, options = T.unsafe(nil)); end
103
+ def translate(locale, key, default_options = T.unsafe(nil)); end
104
+
105
+ protected
106
+
107
+ def init_translations; end
108
+ def namespace_lookup?(result, options); end
109
+ def translations; end
110
+
111
+ private
112
+
113
+ def _deep_merge(hash, other_hash); end
114
+ end
115
+
116
+ module I18n::Backend::Fallbacks
117
+ def exists?(locale, key); end
118
+ def extract_non_symbol_default!(options); end
119
+ def translate(locale, key, options = T.unsafe(nil)); end
120
+ end
121
+
122
+ module I18n::Backend::Flatten
123
+ def flatten_keys(hash, escape, prev_key = T.unsafe(nil), &block); end
124
+ def flatten_translations(locale, data, escape, subtree); end
125
+ def links; end
126
+ def normalize_flat_keys(locale, key, scope, separator); end
127
+
128
+ protected
129
+
130
+ def escape_default_separator(key); end
131
+ def find_link(locale, key); end
132
+ def resolve_link(locale, key); end
133
+ def store_link(locale, key, link); end
134
+
135
+ class << self
136
+ def escape_default_separator(key); end
137
+ def normalize_flat_keys(locale, key, scope, separator); end
138
+ end
139
+ end
140
+
141
+ I18n::Backend::Flatten::FLATTEN_SEPARATOR = T.let(T.unsafe(nil), String)
142
+
143
+ I18n::Backend::Flatten::SEPARATOR_ESCAPE_CHAR = T.let(T.unsafe(nil), String)
144
+
145
+ module I18n::Backend::Gettext
146
+
147
+ protected
148
+
149
+ def load_po(filename); end
150
+ def normalize(locale, data); end
151
+ def normalize_pluralization(locale, key, value); end
152
+ def parse(filename); end
153
+ end
154
+
155
+ class I18n::Backend::Gettext::PoData < ::Hash
156
+ def set_comment(msgid_or_sym, comment); end
157
+ end
158
+
159
+ module I18n::Backend::InterpolationCompiler
160
+ def interpolate(locale, string, values); end
161
+ def store_translations(locale, data, options = T.unsafe(nil)); end
162
+
163
+ protected
164
+
165
+ def compile_all_strings_in(data); end
166
+ end
167
+
168
+ module I18n::Backend::InterpolationCompiler::Compiler
169
+ extend(::I18n::Backend::InterpolationCompiler::Compiler)
170
+
171
+ def compile_if_an_interpolation(string); end
172
+ def interpolated_str?(str); end
173
+
174
+ protected
175
+
176
+ def compile_interpolation_token(key); end
177
+ def compiled_interpolation_body(str); end
178
+ def direct_key(key); end
179
+ def escape_key_sym(key); end
180
+ def escape_plain_str(str); end
181
+ def handle_interpolation_token(interpolation, matchdata); end
182
+ def interpolate_key(key); end
183
+ def interpolate_or_raise_missing(key); end
184
+ def missing_key(key); end
185
+ def nil_key(key); end
186
+ def reserved_key(key); end
187
+ def tokenize(str); end
188
+ end
189
+
190
+ I18n::Backend::InterpolationCompiler::Compiler::INTERPOLATION_SYNTAX_PATTERN = T.let(T.unsafe(nil), Regexp)
191
+
192
+ I18n::Backend::InterpolationCompiler::Compiler::TOKENIZER = T.let(T.unsafe(nil), Regexp)
193
+
194
+ class I18n::Backend::KeyValue
195
+ include(::I18n::Backend::Flatten)
196
+ include(::I18n::Backend::Transliterator)
197
+ include(::I18n::Backend::Base)
198
+ include(::I18n::Backend::KeyValue::Implementation)
199
+ end
200
+
201
+ module I18n::Backend::KeyValue::Implementation
202
+ include(::I18n::Backend::Flatten)
203
+ include(::I18n::Backend::Transliterator)
204
+ include(::I18n::Backend::Base)
205
+
206
+ def initialize(store, subtrees = T.unsafe(nil)); end
207
+
208
+ def available_locales; end
209
+ def initialized?; end
210
+ def store; end
211
+ def store=(_); end
212
+ def store_translations(locale, data, options = T.unsafe(nil)); end
213
+
214
+ protected
215
+
216
+ def init_translations; end
217
+ def lookup(locale, key, scope = T.unsafe(nil), options = T.unsafe(nil)); end
218
+ def pluralize(locale, entry, count); end
219
+ def subtrees?; end
220
+ def translations; end
221
+ end
222
+
223
+ class I18n::Backend::KeyValue::SubtreeProxy
224
+ def initialize(master_key, store); end
225
+
226
+ def [](key); end
227
+ def has_key?(key); end
228
+ def inspect; end
229
+ def instance_of?(klass); end
230
+ def is_a?(klass); end
231
+ def kind_of?(klass); end
232
+ def nil?; end
233
+ end
234
+
235
+ module I18n::Backend::Memoize
236
+ def available_locales; end
237
+ def eager_load!; end
238
+ def reload!; end
239
+ def store_translations(locale, data, options = T.unsafe(nil)); end
240
+
241
+ protected
242
+
243
+ def lookup(locale, key, scope = T.unsafe(nil), options = T.unsafe(nil)); end
244
+ def memoized_lookup; end
245
+ def reset_memoizations!(locale = T.unsafe(nil)); end
246
+ end
247
+
248
+ module I18n::Backend::Metadata
249
+ def interpolate(locale, entry, values = T.unsafe(nil)); end
250
+ def pluralize(locale, entry, count); end
251
+ def translate(locale, key, options = T.unsafe(nil)); end
252
+
253
+ protected
254
+
255
+ def with_metadata(metadata, &block); end
256
+
257
+ class << self
258
+ def included(base); end
259
+ end
260
+ end
261
+
262
+ module I18n::Backend::Pluralization
263
+ def pluralize(locale, entry, count); end
264
+
265
+ protected
266
+
267
+ def pluralizer(locale); end
268
+ def pluralizers; end
269
+ end
270
+
271
+ class I18n::Backend::Simple
272
+ include(::I18n::Backend::Transliterator)
273
+ include(::I18n::Backend::Base)
274
+ include(::I18n::Backend::Simple::Implementation)
275
+ end
276
+
277
+ module I18n::Backend::Simple::Implementation
278
+ include(::I18n::Backend::Transliterator)
279
+ include(::I18n::Backend::Base)
280
+
281
+ def available_locales; end
282
+ def eager_load!; end
283
+ def initialized?; end
284
+ def reload!; end
285
+ def store_translations(locale, data, options = T.unsafe(nil)); end
286
+ def translations(do_init: T.unsafe(nil)); end
287
+
288
+ protected
289
+
290
+ def init_translations; end
291
+ def lookup(locale, key, scope = T.unsafe(nil), options = T.unsafe(nil)); end
292
+ end
293
+
294
+ module I18n::Backend::Transliterator
295
+ def transliterate(locale, string, replacement = T.unsafe(nil)); end
296
+
297
+ class << self
298
+ def get(rule = T.unsafe(nil)); end
299
+ end
300
+ end
301
+
302
+ I18n::Backend::Transliterator::DEFAULT_REPLACEMENT_CHAR = T.let(T.unsafe(nil), String)
303
+
304
+ class I18n::Backend::Transliterator::HashTransliterator
305
+ def initialize(rule = T.unsafe(nil)); end
306
+
307
+ def transliterate(string, replacement = T.unsafe(nil)); end
308
+
309
+ private
310
+
311
+ def add(hash); end
312
+ def add_default_approximations; end
313
+ def approximations; end
314
+ end
315
+
316
+ I18n::Backend::Transliterator::HashTransliterator::DEFAULT_APPROXIMATIONS = T.let(T.unsafe(nil), Hash)
317
+
318
+ class I18n::Backend::Transliterator::ProcTransliterator
319
+ def initialize(rule); end
320
+
321
+ def transliterate(string, replacement = T.unsafe(nil)); end
322
+ end
323
+
324
+ module I18n::Base
325
+ def available_locales; end
326
+ def available_locales=(value); end
327
+ def available_locales_initialized?; end
328
+ def backend; end
329
+ def backend=(value); end
330
+ def config; end
331
+ def config=(value); end
332
+ def default_locale; end
333
+ def default_locale=(value); end
334
+ def default_separator; end
335
+ def default_separator=(value); end
336
+ def eager_load!; end
337
+ def enforce_available_locales; end
338
+ def enforce_available_locales!(locale); end
339
+ def enforce_available_locales=(value); end
340
+ def exception_handler; end
341
+ def exception_handler=(value); end
342
+ def exists?(key, _locale = T.unsafe(nil), locale: T.unsafe(nil)); end
343
+ def l(object, locale: T.unsafe(nil), format: T.unsafe(nil), **options); end
344
+ def load_path; end
345
+ def load_path=(value); end
346
+ def locale; end
347
+ def locale=(value); end
348
+ def locale_available?(locale); end
349
+ def localize(object, locale: T.unsafe(nil), format: T.unsafe(nil), **options); end
350
+ def normalize_keys(locale, key, scope, separator = T.unsafe(nil)); end
351
+ def reload!; end
352
+ def t(key = T.unsafe(nil), *_, throw: T.unsafe(nil), raise: T.unsafe(nil), locale: T.unsafe(nil), **options); end
353
+ def t!(key, options = T.unsafe(nil)); end
354
+ def translate(key = T.unsafe(nil), *_, throw: T.unsafe(nil), raise: T.unsafe(nil), locale: T.unsafe(nil), **options); end
355
+ def translate!(key, options = T.unsafe(nil)); end
356
+ def transliterate(key, *_, throw: T.unsafe(nil), raise: T.unsafe(nil), locale: T.unsafe(nil), replacement: T.unsafe(nil), **options); end
357
+ def with_locale(tmp_locale = T.unsafe(nil)); end
358
+
359
+ private
360
+
361
+ def handle_exception(handling, exception, locale, key, options); end
362
+ def normalize_key(key, separator); end
363
+ end
364
+
365
+ class I18n::Config
366
+ def available_locales; end
367
+ def available_locales=(locales); end
368
+ def available_locales_initialized?; end
369
+ def available_locales_set; end
370
+ def backend; end
371
+ def backend=(backend); end
372
+ def clear_available_locales_set; end
373
+ def default_locale; end
374
+ def default_locale=(locale); end
375
+ def default_separator; end
376
+ def default_separator=(separator); end
377
+ def enforce_available_locales; end
378
+ def enforce_available_locales=(enforce_available_locales); end
379
+ def exception_handler; end
380
+ def exception_handler=(exception_handler); end
381
+ def interpolation_patterns; end
382
+ def interpolation_patterns=(interpolation_patterns); end
383
+ def load_path; end
384
+ def load_path=(load_path); end
385
+ def locale; end
386
+ def locale=(locale); end
387
+ def missing_interpolation_argument_handler; end
388
+ def missing_interpolation_argument_handler=(exception_handler); end
389
+ end
390
+
391
+ I18n::DEFAULT_INTERPOLATION_PATTERNS = T.let(T.unsafe(nil), Array)
392
+
393
+ class I18n::Disabled < ::I18n::ArgumentError
394
+ def initialize(method); end
395
+ end
396
+
397
+ I18n::EMPTY_HASH = T.let(T.unsafe(nil), Hash)
398
+
399
+ class I18n::ExceptionHandler
400
+ def call(exception, _locale, _key, _options); end
401
+ end
402
+
403
+ module I18n::Gettext
404
+ class << self
405
+ def extract_scope(msgid, separator); end
406
+ def plural_keys(*args); end
407
+ end
408
+ end
409
+
410
+ I18n::Gettext::CONTEXT_SEPARATOR = T.let(T.unsafe(nil), String)
411
+
412
+ module I18n::Gettext::Helpers
413
+ def N_(msgsid); end
414
+ def _(msgid, options = T.unsafe(nil)); end
415
+ def gettext(msgid, options = T.unsafe(nil)); end
416
+ def n_(msgid, msgid_plural, n = T.unsafe(nil)); end
417
+ def ngettext(msgid, msgid_plural, n = T.unsafe(nil)); end
418
+ def np_(msgctxt, msgid, msgid_plural, n = T.unsafe(nil)); end
419
+ def npgettext(msgctxt, msgid, msgid_plural, n = T.unsafe(nil)); end
420
+ def ns_(msgid, msgid_plural, n = T.unsafe(nil), separator = T.unsafe(nil)); end
421
+ def nsgettext(msgid, msgid_plural, n = T.unsafe(nil), separator = T.unsafe(nil)); end
422
+ def p_(msgctxt, msgid); end
423
+ def pgettext(msgctxt, msgid); end
424
+ def s_(msgid, separator = T.unsafe(nil)); end
425
+ def sgettext(msgid, separator = T.unsafe(nil)); end
426
+ end
427
+
428
+ I18n::Gettext::PLURAL_SEPARATOR = T.let(T.unsafe(nil), String)
429
+
430
+ I18n::INTERPOLATION_PATTERN = T.let(T.unsafe(nil), Regexp)
431
+
432
+ class I18n::InvalidLocale < ::I18n::ArgumentError
433
+ def initialize(locale); end
434
+
435
+ def locale; end
436
+ end
437
+
438
+ class I18n::InvalidLocaleData < ::I18n::ArgumentError
439
+ def initialize(filename, exception_message); end
440
+
441
+ def filename; end
442
+ end
443
+
444
+ class I18n::InvalidPluralizationData < ::I18n::ArgumentError
445
+ def initialize(entry, count, key); end
446
+
447
+ def count; end
448
+ def entry; end
449
+ def key; end
450
+ end
451
+
452
+ module I18n::Locale
453
+ end
454
+
455
+ class I18n::Locale::Fallbacks < ::Hash
456
+ def initialize(*mappings); end
457
+
458
+ def [](locale); end
459
+ def defaults; end
460
+ def defaults=(defaults); end
461
+ def map(mappings); end
462
+
463
+ protected
464
+
465
+ def compute(tags, include_defaults = T.unsafe(nil), exclude = T.unsafe(nil)); end
466
+ end
467
+
468
+ module I18n::Locale::Tag
469
+ class << self
470
+ def implementation; end
471
+ def implementation=(implementation); end
472
+ def tag(tag); end
473
+ end
474
+ end
475
+
476
+ module I18n::Locale::Tag::Parents
477
+ def parent; end
478
+ def parents; end
479
+ def self_and_parents; end
480
+ end
481
+
482
+ class I18n::Locale::Tag::Rfc4646 < ::Struct
483
+ include(::I18n::Locale::Tag::Parents)
484
+
485
+ def language; end
486
+ def region; end
487
+ def script; end
488
+ def to_a; end
489
+ def to_s; end
490
+ def to_sym; end
491
+ def variant; end
492
+
493
+ class << self
494
+ def parser; end
495
+ def parser=(parser); end
496
+ def tag(tag); end
497
+ end
498
+ end
499
+
500
+ module I18n::Locale::Tag::Rfc4646::Parser
501
+ class << self
502
+ def match(tag); end
503
+ end
504
+ end
505
+
506
+ I18n::Locale::Tag::Rfc4646::Parser::PATTERN = T.let(T.unsafe(nil), Regexp)
507
+
508
+ class I18n::Locale::Tag::Simple
509
+ include(::I18n::Locale::Tag::Parents)
510
+
511
+ def initialize(*tag); end
512
+
513
+ def subtags; end
514
+ def tag; end
515
+ def to_a; end
516
+ def to_s; end
517
+ def to_sym; end
518
+
519
+ class << self
520
+ def tag(tag); end
521
+ end
522
+ end
523
+
524
+ class I18n::Middleware
525
+ def initialize(app); end
526
+
527
+ def call(env); end
528
+ end
529
+
530
+ class I18n::MissingInterpolationArgument < ::I18n::ArgumentError
531
+ def initialize(key, values, string); end
532
+
533
+ def key; end
534
+ def string; end
535
+ def values; end
536
+ end
537
+
538
+ class I18n::MissingTranslation < ::I18n::ArgumentError
539
+ include(::I18n::MissingTranslation::Base)
540
+ end
541
+
542
+ module I18n::MissingTranslation::Base
543
+ def initialize(locale, key, options = T.unsafe(nil)); end
544
+
545
+ def key; end
546
+ def keys; end
547
+ def locale; end
548
+ def message; end
549
+ def options; end
550
+ def to_exception; end
551
+ def to_s; end
552
+ end
553
+
554
+ class I18n::MissingTranslationData < ::I18n::ArgumentError
555
+ include(::I18n::MissingTranslation::Base)
556
+ end
557
+
558
+ I18n::RESERVED_KEYS = T.let(T.unsafe(nil), Array)
559
+
560
+ I18n::RESERVED_KEYS_PATTERN = T.let(T.unsafe(nil), Regexp)
561
+
562
+ class I18n::ReservedInterpolationKey < ::I18n::ArgumentError
563
+ def initialize(key, string); end
564
+
565
+ def key; end
566
+ def string; end
567
+ end
568
+
569
+ module I18n::Tests
570
+ end
571
+
572
+ module I18n::Tests::Localization
573
+ class << self
574
+ def included(base); end
575
+ end
576
+ end
577
+
578
+ module I18n::Tests::Localization::Date
579
+ def setup; end
580
+ end
581
+
582
+ class I18n::UnknownFileType < ::I18n::ArgumentError
583
+ def initialize(type, filename); end
584
+
585
+ def filename; end
586
+ def type; end
587
+ end
588
+
589
+ I18n::VERSION = T.let(T.unsafe(nil), String)
590
+
591
+ module I18n::HashRefinements
592
+ end
593
+
594
+ I18n::JSON = ActiveSupport::JSON
595
+
596
+ I18n::Locale::Tag::RFC4646_FORMATS = T.let(T.unsafe(nil), Hash)
597
+
598
+ I18n::Locale::Tag::RFC4646_SUBTAGS = T.let(T.unsafe(nil), Array)
599
+
600
+ module I18n::Tests::Basics
601
+ def teardown; end
602
+ end
603
+
604
+ module I18n::Tests::Defaults
605
+ def setup; end
606
+ end
607
+
608
+ module I18n::Tests::Interpolation
609
+ end
610
+
611
+ module I18n::Tests::Link
612
+ end
613
+
614
+ module I18n::Tests::Localization::DateTime
615
+ def setup; end
616
+ end
617
+
618
+ module I18n::Tests::Localization::Procs
619
+ end
620
+
621
+ module I18n::Tests::Localization::Time
622
+ def setup; end
623
+ end
624
+
625
+ module I18n::Tests::Lookup
626
+ def setup; end
627
+ end
628
+
629
+ module I18n::Tests::Pluralization
630
+ end
631
+
632
+ module I18n::Tests::Procs
633
+ end