rails_sorbet_enum 0.1.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 (65) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +21 -0
  3. data/.ruby-version +1 -0
  4. data/README.md +35 -0
  5. data/Rakefile +16 -0
  6. data/lib/rails_sorbet_enum/concern.rb +46 -0
  7. data/lib/rails_sorbet_enum/require.rb +5 -0
  8. data/lib/rails_sorbet_enum/version.rb +6 -0
  9. data/lib/rails_sorbet_enum.rb +6 -0
  10. data/lib/tapioca/dsl/compilers/rails_sorbet_enum_compiler.rb +60 -0
  11. data/sig/rails_sorbet_enum.rbs +4 -0
  12. data/sorbet/config +4 -0
  13. data/sorbet/rbi/annotations/.gitattributes +1 -0
  14. data/sorbet/rbi/annotations/minitest.rbi +119 -0
  15. data/sorbet/rbi/annotations/rainbow.rbi +269 -0
  16. data/sorbet/rbi/gems/.gitattributes +1 -0
  17. data/sorbet/rbi/gems/activemodel@8.0.2.rbi +6943 -0
  18. data/sorbet/rbi/gems/activerecord@8.0.2.rbi +43484 -0
  19. data/sorbet/rbi/gems/activesupport@8.0.2.rbi +20540 -0
  20. data/sorbet/rbi/gems/ast@2.4.3.rbi +586 -0
  21. data/sorbet/rbi/gems/base64@0.3.0.rbi +545 -0
  22. data/sorbet/rbi/gems/benchmark@0.4.1.rbi +619 -0
  23. data/sorbet/rbi/gems/bigdecimal@3.2.2.rbi +275 -0
  24. data/sorbet/rbi/gems/concurrent-ruby@1.3.5.rbi +11734 -0
  25. data/sorbet/rbi/gems/connection_pool@2.5.3.rbi +9 -0
  26. data/sorbet/rbi/gems/drb@2.2.3.rbi +1661 -0
  27. data/sorbet/rbi/gems/erubi@1.13.1.rbi +157 -0
  28. data/sorbet/rbi/gems/i18n@1.14.7.rbi +2383 -0
  29. data/sorbet/rbi/gems/json@2.12.2.rbi +2287 -0
  30. data/sorbet/rbi/gems/language_server-protocol@3.17.0.5.rbi +9 -0
  31. data/sorbet/rbi/gems/lint_roller@1.1.0.rbi +323 -0
  32. data/sorbet/rbi/gems/logger@1.7.0.rbi +963 -0
  33. data/sorbet/rbi/gems/minitest@5.25.5.rbi +1547 -0
  34. data/sorbet/rbi/gems/netrc@0.11.0.rbi +177 -0
  35. data/sorbet/rbi/gems/parallel@1.27.0.rbi +291 -0
  36. data/sorbet/rbi/gems/parser@3.3.9.0.rbi +5537 -0
  37. data/sorbet/rbi/gems/prism@1.4.0.rbi +41790 -0
  38. data/sorbet/rbi/gems/racc@1.8.1.rbi +168 -0
  39. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +403 -0
  40. data/sorbet/rbi/gems/rake@13.3.0.rbi +3039 -0
  41. data/sorbet/rbi/gems/rbi@0.3.6.rbi +5162 -0
  42. data/sorbet/rbi/gems/rbs@4.0.0.dev.4.rbi +7813 -0
  43. data/sorbet/rbi/gems/regexp_parser@2.10.0.rbi +3833 -0
  44. data/sorbet/rbi/gems/require-hooks@0.2.2.rbi +110 -0
  45. data/sorbet/rbi/gems/rexml@3.4.1.rbi +5205 -0
  46. data/sorbet/rbi/gems/rubocop-ast@1.46.0.rbi +7425 -0
  47. data/sorbet/rbi/gems/rubocop-sorbet@0.10.5.rbi +2386 -0
  48. data/sorbet/rbi/gems/rubocop@1.79.1.rbi +63686 -0
  49. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +1318 -0
  50. data/sorbet/rbi/gems/securerandom@0.4.1.rbi +75 -0
  51. data/sorbet/rbi/gems/spoom@1.7.5.rbi +5832 -0
  52. data/sorbet/rbi/gems/sqlite3@2.7.3.rbi +1989 -0
  53. data/sorbet/rbi/gems/tapioca@0.17.7.rbi +3692 -0
  54. data/sorbet/rbi/gems/thor@1.4.0.rbi +4399 -0
  55. data/sorbet/rbi/gems/timeout@0.4.3.rbi +157 -0
  56. data/sorbet/rbi/gems/tzinfo@2.0.6.rbi +5919 -0
  57. data/sorbet/rbi/gems/unicode-display_width@3.1.4.rbi +132 -0
  58. data/sorbet/rbi/gems/unicode-emoji@4.0.4.rbi +251 -0
  59. data/sorbet/rbi/gems/uri@1.0.3.rbi +2349 -0
  60. data/sorbet/rbi/gems/with_model@2.2.0.rbi +282 -0
  61. data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +430 -0
  62. data/sorbet/rbi/gems/yard@0.9.37.rbi +18419 -0
  63. data/sorbet/tapioca/config.yml +13 -0
  64. data/sorbet/tapioca/require.rb +11 -0
  65. metadata +163 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 96bafabeef49a552e30d79d812f9be8fd0a647fbe5502fe8c5c31cef92509297
4
+ data.tar.gz: f77529b1c8592ee3e5756e9de84373ad2a241477448f6bf78c5b06de73a0b1c8
5
+ SHA512:
6
+ metadata.gz: 2f68bc575101df45bf6c82e3b855fba15b03a148576516a88686883f4dec45f89429d9c1911b041134da2d4d9820a21d73e9f26ff4a087f559b0329e72a09bfe
7
+ data.tar.gz: b66f0e77ad304f584f0d38872aeef8990eb34f4333142b9e75eb673d9051818e207ddc1f195ad197847a216384e0cb46c0d63e05eda97f4cafe553097bd1e76c
data/.rubocop.yml ADDED
@@ -0,0 +1,21 @@
1
+ plugins:
2
+ - rubocop-sorbet
3
+
4
+ AllCops:
5
+ NewCops: enable
6
+ TargetRubyVersion: 3.1
7
+
8
+ Metrics/AbcSize:
9
+ Enabled: false
10
+
11
+ Metrics/MethodLength:
12
+ Enabled: false
13
+
14
+ Style/Documentation:
15
+ Enabled: false
16
+
17
+ Style/StringLiterals:
18
+ EnforcedStyle: double_quotes
19
+
20
+ Style/StringLiteralsInInterpolation:
21
+ EnforcedStyle: double_quotes
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.4.5
data/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # RailsSorbetEnum
2
+
3
+ TODO: Delete this and the text below, and describe your gem
4
+
5
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/rails_sorbet_enum`. To experiment with that code, run `bin/console` for an interactive prompt.
6
+
7
+ ## Installation
8
+
9
+ TODO: Replace `UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG` with your gem name right after releasing it to RubyGems.org. Please do not do it earlier due to security reasons. Alternatively, replace this section with instructions to install your gem from git if you don't plan to release to RubyGems.org.
10
+
11
+ Install the gem and add to the application's Gemfile by executing:
12
+
13
+ ```bash
14
+ bundle add UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
15
+ ```
16
+
17
+ If bundler is not being used to manage dependencies, install the gem by executing:
18
+
19
+ ```bash
20
+ gem install UPDATE_WITH_YOUR_GEM_NAME_IMMEDIATELY_AFTER_RELEASE_TO_RUBYGEMS_ORG
21
+ ```
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/rails_sorbet_enum.
data/Rakefile ADDED
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "minitest/test_task"
5
+
6
+ Minitest::TestTask.create
7
+
8
+ require "rubocop/rake_task"
9
+
10
+ RuboCop::RakeTask.new
11
+
12
+ task :sorbet do
13
+ sh("srb tc")
14
+ end
15
+
16
+ task default: %i[test rubocop sorbet]
@@ -0,0 +1,46 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ require "active_record"
5
+ require "active_support"
6
+ require "sorbet-runtime"
7
+
8
+ module RailsSorbetEnum
9
+ # Concern allows ActiveRecord models to use typechecked Sorbet T::Enums
10
+ # with backing ActiveRecord::Enum fields
11
+ module Concern
12
+ extend ActiveSupport::Concern
13
+
14
+ # ClassMethods mixed into the ActiveRecord
15
+ class_methods do
16
+ extend T::Sig
17
+ extend T::Helpers
18
+
19
+ include ::ActiveRecord::Enum
20
+
21
+ sig { params(name: Symbol, type: T.class_of(T::Enum)).void }
22
+ def sorbet_enum(name, type)
23
+ sorbet_enum_attributes << [name, type]
24
+
25
+ # The Rails enum values are the serialized T::Enum ones
26
+ T.unsafe(self).enum(name, type.values.map(&:serialize).index_with(&:to_s))
27
+
28
+ T.unsafe(self).define_method("#{name}_enum") do
29
+ val = T.unsafe(self).public_send(name)
30
+ return unless val
31
+
32
+ type.deserialize(val)
33
+ end
34
+
35
+ T.unsafe(self).define_method("#{name}_enum=") do |arg|
36
+ T.unsafe(self).public_send("#{name}=", arg.serialize)
37
+ end
38
+ end
39
+
40
+ sig { returns(T::Array[[Symbol, T.class_of(T::Enum)]]) }
41
+ def sorbet_enum_attributes
42
+ @sorbet_enum_attributes ||= []
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,5 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "version"
5
+ require_relative "concern"
@@ -0,0 +1,6 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module RailsSorbetEnum
5
+ VERSION = "0.1.0"
6
+ end
@@ -0,0 +1,6 @@
1
+ # typed: false
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "rails_sorbet_enum/require"
5
+
6
+ module RailsSorbetEnum; end
@@ -0,0 +1,60 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require "tapioca"
5
+
6
+ require_relative "../../../rails_sorbet_enum/concern"
7
+
8
+ module Tapioca
9
+ module Dsl
10
+ module Compilers
11
+ # This Tapioca compiler generates RBI for Rails models that include RailsSorbetEnum::Concern.
12
+ class RailsSorbetEnumCompiler < Tapioca::Dsl::Compiler
13
+ extend T::Sig
14
+
15
+ ConstantType = type_member { { fixed: T.class_of(RailsSorbetEnum::Concern) } }
16
+
17
+ RBI_MODULE_NAME = "RailsSorbetEnumMethods"
18
+
19
+ class << self
20
+ extend T::Sig
21
+
22
+ sig { override.returns(T::Enumerable[Module]) }
23
+ def gather_constants
24
+ all_classes
25
+ .select { |c| c < RailsSorbetEnum::Concern }
26
+ end
27
+ end
28
+
29
+ sig { override.void }
30
+ def decorate
31
+ root.create_path(constant) do |klass|
32
+ klass.create_module(RBI_MODULE_NAME) do |methods_mod|
33
+ T.unsafe(constant).sorbet_enum_attributes.each do |enum_name, enum_type|
34
+ return_type =
35
+ if T.unsafe(constant).column_for_attribute(enum_name).null
36
+ "T.nilable(#{enum_type.name})"
37
+ else
38
+ enum_type.name
39
+ end
40
+
41
+ methods_mod.create_method(
42
+ "#{enum_name}_enum",
43
+ return_type: return_type
44
+ )
45
+ methods_mod.create_method(
46
+ "#{enum_name}_enum=",
47
+ parameters: [
48
+ create_param("value", type: enum_type.name)
49
+ ],
50
+ return_type: "void"
51
+ )
52
+ end
53
+ end
54
+ klass.create_include(RBI_MODULE_NAME)
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,4 @@
1
+ module RailsSorbetEnum
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
data/sorbet/config ADDED
@@ -0,0 +1,4 @@
1
+ --dir
2
+ .
3
+ --ignore=tmp/
4
+ --ignore=vendor/
@@ -0,0 +1 @@
1
+ **/*.rbi linguist-vendored=true
@@ -0,0 +1,119 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This file was pulled from a central RBI files repository.
5
+ # Please run `bin/tapioca annotations` to update it.
6
+
7
+ module Minitest::Assertions
8
+ sig { params(test: T.anything, msg: T.anything).returns(TrueClass) }
9
+ def assert(test, msg = nil); end
10
+
11
+ sig { params(obj: T.anything, msg: T.anything).returns(TrueClass) }
12
+ def assert_empty(obj, msg = nil); end
13
+
14
+ sig { params(exp: T.anything, act: T.anything, msg: T.anything).returns(TrueClass) }
15
+ def assert_equal(exp, act, msg = nil); end
16
+
17
+ sig { params(exp: T.anything, act: T.anything, delta: Numeric, msg: T.anything).returns(TrueClass) }
18
+ def assert_in_delta(exp, act, delta = T.unsafe(nil), msg = nil); end
19
+
20
+ sig { params(a: T.anything, b: T.anything, epsilon: Numeric, msg: T.anything).returns(TrueClass) }
21
+ def assert_in_epsilon(a, b, epsilon = T.unsafe(nil), msg = nil); end
22
+
23
+ sig { params(collection: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) }
24
+ def assert_includes(collection, obj, msg = nil); end
25
+
26
+ sig { params(cls: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) }
27
+ def assert_instance_of(cls, obj, msg = nil); end
28
+
29
+ sig { params(cls: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) }
30
+ def assert_kind_of(cls, obj, msg = nil); end
31
+
32
+ sig { params(matcher: T.any(String, Regexp), obj: T.anything, msg: T.anything).returns(MatchData) }
33
+ def assert_match(matcher, obj, msg = nil); end
34
+
35
+ sig { params(obj: T.anything, msg: T.anything).returns(TrueClass) }
36
+ def assert_nil(obj, msg = nil); end
37
+
38
+ sig { params(o1: T.anything, op: T.any(Symbol, String), o2: T.anything, msg: T.anything).returns(TrueClass) }
39
+ def assert_operator(o1, op, o2 = T.unsafe(nil), msg = nil); end
40
+
41
+ sig { params(stdout: T.nilable(T.any(String, Regexp)), stderr: T.nilable(T.any(String, Regexp)), block: T.proc.void).returns(T::Boolean) }
42
+ def assert_output(stdout = nil, stderr = nil, &block); end
43
+
44
+ sig { params(path: T.any(String, Pathname), msg: T.anything).returns(TrueClass) }
45
+ def assert_path_exists(path, msg = nil); end
46
+
47
+ sig { params(block: T.proc.void).returns(TrueClass) }
48
+ def assert_pattern(&block); end
49
+
50
+ sig { params(o1: T.anything, op: T.any(String, Symbol), msg: T.anything).returns(TrueClass) }
51
+ def assert_predicate(o1, op, msg = nil); end
52
+
53
+ sig { params(exp: NilClass, block: T.proc.void).returns(StandardError) }
54
+ sig { type_parameters(:T).params(exp: T.any(T::Class[T.type_parameter(:T)], Regexp, String), block: T.proc.void).returns(T.type_parameter(:T)) }
55
+ def assert_raises(*exp, &block); end
56
+
57
+ sig { params(obj: T.anything, meth: T.any(String, Symbol), msg: T.anything, include_all: T::Boolean).returns(TrueClass) }
58
+ def assert_respond_to(obj, meth, msg = nil, include_all: false); end
59
+
60
+ sig { params(exp: T.anything, act: T.anything, msg: T.anything).returns(TrueClass) }
61
+ def assert_same(exp, act, msg = nil); end
62
+
63
+ sig { params(send_ary: T::Array[T.anything], m: T.anything).returns(T::Boolean) }
64
+ def assert_send(send_ary, m = nil); end
65
+
66
+ sig { params(block: T.proc.void).returns(T::Boolean) }
67
+ def assert_silent(&block); end
68
+
69
+ sig { params(sym: Symbol, msg: T.anything, block: T.proc.void).returns(T.anything) }
70
+ def assert_throws(sym, msg = nil, &block); end
71
+
72
+ sig { params(test: T.anything, msg: T.anything).returns(TrueClass) }
73
+ def refute(test, msg = nil); end
74
+
75
+ sig { params(obj: T.anything, msg: T.anything).returns(TrueClass) }
76
+ def refute_empty(obj, msg = nil); end
77
+
78
+ sig { params(exp: T.anything, act: T.anything, msg: T.anything).returns(TrueClass) }
79
+ def refute_equal(exp, act, msg = nil); end
80
+
81
+ sig { params(exp: T.anything, act: T.anything, delta: Numeric, msg: T.anything).returns(TrueClass) }
82
+ def refute_in_delta(exp, act, delta = T.unsafe(nil), msg = nil); end
83
+
84
+ sig { params(a: T.anything, b: T.anything, epsilon: Numeric, msg: T.anything).returns(TrueClass) }
85
+ def refute_in_epsilon(a, b, epsilon = T.unsafe(nil), msg = nil); end
86
+
87
+ sig { params(collection: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) }
88
+ def refute_includes(collection, obj, msg = nil); end
89
+
90
+ sig { params(cls: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) }
91
+ def refute_instance_of(cls, obj, msg = nil); end
92
+
93
+ sig { params(cls: T.anything, obj: T.anything, msg: T.anything).returns(TrueClass) }
94
+ def refute_kind_of(cls, obj, msg = nil); end
95
+
96
+ sig { params(matcher: T.any(String, Regexp), obj: T.anything, msg: T.anything).returns(TrueClass) }
97
+ def refute_match(matcher, obj, msg = nil); end
98
+
99
+ sig { params(obj: T.anything, msg: T.anything).returns(TrueClass) }
100
+ def refute_nil(obj, msg = nil); end
101
+
102
+ sig { params(block: T.proc.void).returns(TrueClass) }
103
+ def refute_pattern(&block); end
104
+
105
+ sig { params(o1: T.anything, op: T.any(Symbol, String), o2: T.anything, msg: T.anything).returns(TrueClass) }
106
+ def refute_operator(o1, op, o2 = T.unsafe(nil), msg = nil); end
107
+
108
+ sig { params(path: T.any(String, Pathname), msg: T.anything).returns(TrueClass) }
109
+ def refute_path_exists(path, msg = nil); end
110
+
111
+ sig { params(o1: T.anything, op: T.any(String, Symbol), msg: T.anything).returns(TrueClass) }
112
+ def refute_predicate(o1, op, msg = nil); end
113
+
114
+ sig { params(obj: T.anything, meth: T.any(String, Symbol), msg: T.anything, include_all: T::Boolean).returns(TrueClass) }
115
+ def refute_respond_to(obj, meth, msg = nil, include_all: false); end
116
+
117
+ sig { params(exp: T.anything, act: T.anything, msg: T.anything).returns(TrueClass) }
118
+ def refute_same(exp, act, msg = nil); end
119
+ end
@@ -0,0 +1,269 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This file was pulled from a central RBI files repository.
5
+ # Please run `bin/tapioca annotations` to update it.
6
+
7
+ module Rainbow
8
+ # @shim: https://github.com/sickill/rainbow/blob/master/lib/rainbow.rb#L10-L12
9
+ sig { returns(T::Boolean) }
10
+ attr_accessor :enabled
11
+
12
+ class Color
13
+ sig { returns(Symbol) }
14
+ attr_reader :ground
15
+
16
+ sig { params(ground: Symbol, values: T.any([Integer], [Integer, Integer, Integer])).returns(Color) }
17
+ def self.build(ground, values); end
18
+
19
+ sig { params(hex: String).returns([Integer, Integer, Integer]) }
20
+ def self.parse_hex_color(hex); end
21
+
22
+ class Indexed < Rainbow::Color
23
+ sig { returns(Integer) }
24
+ attr_reader :num
25
+
26
+ sig { params(ground: Symbol, num: Integer).void }
27
+ def initialize(ground, num); end
28
+
29
+ sig { returns(T::Array[Integer]) }
30
+ def codes; end
31
+ end
32
+
33
+ class Named < Rainbow::Color::Indexed
34
+ NAMES = T.let(nil, T::Hash[Symbol, Integer])
35
+
36
+ sig { params(ground: Symbol, name: Symbol).void }
37
+ def initialize(ground, name); end
38
+
39
+ sig { returns(T::Array[Symbol]) }
40
+ def self.color_names; end
41
+
42
+ sig { returns(String) }
43
+ def self.valid_names; end
44
+ end
45
+
46
+ class RGB < Rainbow::Color::Indexed
47
+ sig { returns(Integer) }
48
+ attr_reader :r, :g, :b
49
+
50
+ sig { params(ground: Symbol, values: Integer).void }
51
+ def initialize(ground, *values); end
52
+
53
+ sig { returns(T::Array[Integer]) }
54
+ def codes; end
55
+
56
+ sig { params(value: Numeric).returns(Integer) }
57
+ def self.to_ansi_domain(value); end
58
+ end
59
+
60
+ class X11Named < Rainbow::Color::RGB
61
+ include Rainbow::X11ColorNames
62
+
63
+ sig { params(ground: Symbol, name: Symbol).void }
64
+ def initialize(ground, name); end
65
+
66
+ sig { returns(T::Array[Symbol]) }
67
+ def self.color_names; end
68
+
69
+ sig { returns(String) }
70
+ def self.valid_names; end
71
+ end
72
+ end
73
+
74
+ sig { returns(Wrapper) }
75
+ def self.global; end
76
+
77
+ sig { returns(T::Boolean) }
78
+ def self.enabled; end
79
+
80
+ sig { params(value: T::Boolean).returns(T::Boolean) }
81
+ def self.enabled=(value); end
82
+
83
+ sig { params(string: String).returns(String) }
84
+ def self.uncolor(string); end
85
+
86
+ class NullPresenter < String
87
+ sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
88
+ def color(*values); end
89
+
90
+ sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
91
+ def foreground(*values); end
92
+
93
+ sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
94
+ def fg(*values); end
95
+
96
+ sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
97
+ def background(*values); end
98
+
99
+ sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(NullPresenter) }
100
+ def bg(*values); end
101
+
102
+ sig { returns(NullPresenter) }
103
+ def reset; end
104
+
105
+ sig { returns(NullPresenter) }
106
+ def bright; end
107
+
108
+ sig { returns(NullPresenter) }
109
+ def faint; end
110
+
111
+ sig { returns(NullPresenter) }
112
+ def italic; end
113
+
114
+ sig { returns(NullPresenter) }
115
+ def underline; end
116
+
117
+ sig { returns(NullPresenter) }
118
+ def blink; end
119
+
120
+ sig { returns(NullPresenter) }
121
+ def inverse; end
122
+
123
+ sig { returns(NullPresenter) }
124
+ def hide; end
125
+
126
+ sig { returns(NullPresenter) }
127
+ def cross_out; end
128
+
129
+ sig { returns(NullPresenter) }
130
+ def black; end
131
+
132
+ sig { returns(NullPresenter) }
133
+ def red; end
134
+
135
+ sig { returns(NullPresenter) }
136
+ def green; end
137
+
138
+ sig { returns(NullPresenter) }
139
+ def yellow; end
140
+
141
+ sig { returns(NullPresenter) }
142
+ def blue; end
143
+
144
+ sig { returns(NullPresenter) }
145
+ def magenta; end
146
+
147
+ sig { returns(NullPresenter) }
148
+ def cyan; end
149
+
150
+ sig { returns(NullPresenter) }
151
+ def white; end
152
+
153
+ sig { returns(NullPresenter) }
154
+ def bold; end
155
+
156
+ sig { returns(NullPresenter) }
157
+ def dark; end
158
+
159
+ sig { returns(NullPresenter) }
160
+ def strike; end
161
+ end
162
+
163
+ class Presenter < String
164
+ TERM_EFFECTS = T.let(nil, T::Hash[Symbol, Integer])
165
+
166
+ sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
167
+ def color(*values); end
168
+
169
+ sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
170
+ def foreground(*values); end
171
+
172
+ sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
173
+ def fg(*values); end
174
+
175
+ sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
176
+ def background(*values); end
177
+
178
+ sig { params(values: T.any([Integer], [Integer, Integer, Integer])).returns(Presenter) }
179
+ def bg(*values); end
180
+
181
+ sig { returns(Presenter) }
182
+ def reset; end
183
+
184
+ sig { returns(Presenter) }
185
+ def bright; end
186
+
187
+ sig { returns(Presenter) }
188
+ def faint; end
189
+
190
+ sig { returns(Presenter) }
191
+ def italic; end
192
+
193
+ sig { returns(Presenter) }
194
+ def underline; end
195
+
196
+ sig { returns(Presenter) }
197
+ def blink; end
198
+
199
+ sig { returns(Presenter) }
200
+ def inverse; end
201
+
202
+ sig { returns(Presenter) }
203
+ def hide; end
204
+
205
+ sig { returns(Presenter) }
206
+ def cross_out; end
207
+
208
+ sig { returns(Presenter) }
209
+ def black; end
210
+
211
+ sig { returns(Presenter) }
212
+ def red; end
213
+
214
+ sig { returns(Presenter) }
215
+ def green; end
216
+
217
+ sig { returns(Presenter) }
218
+ def yellow; end
219
+
220
+ sig { returns(Presenter) }
221
+ def blue; end
222
+
223
+ sig { returns(Presenter) }
224
+ def magenta; end
225
+
226
+ sig { returns(Presenter) }
227
+ def cyan; end
228
+
229
+ sig { returns(Presenter) }
230
+ def white; end
231
+
232
+ sig { returns(Presenter) }
233
+ def bold; end
234
+
235
+ sig { returns(Presenter) }
236
+ def dark; end
237
+
238
+ sig { returns(Presenter) }
239
+ def strike; end
240
+ end
241
+
242
+ class StringUtils
243
+ sig { params(string: String, codes: T::Array[Integer]).returns(String) }
244
+ def self.wrap_with_sgr(string, codes); end
245
+
246
+ sig { params(string: String).returns(String) }
247
+ def self.uncolor(string); end
248
+ end
249
+
250
+ VERSION = T.let(nil, String)
251
+
252
+ class Wrapper
253
+ sig { returns(T::Boolean) }
254
+ attr_accessor :enabled
255
+
256
+ sig { params(enabled: T::Boolean).void }
257
+ def initialize(enabled = true); end
258
+
259
+ sig { params(string: String).returns(T.any(Rainbow::Presenter, Rainbow::NullPresenter)) }
260
+ def wrap(string); end
261
+ end
262
+
263
+ module X11ColorNames
264
+ NAMES = T.let(nil, T::Hash[Symbol, [Integer, Integer, Integer]])
265
+ end
266
+ end
267
+
268
+ sig { params(string: String).returns(Rainbow::Presenter) }
269
+ def Rainbow(string); end
@@ -0,0 +1 @@
1
+ **/*.rbi linguist-generated=true