rbi 0.1.8 → 0.1.10

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: 502c584fe293212d2f14f1a6b8d76457645afe9a4bc6355cd32c2179bb9a4e68
4
- data.tar.gz: 4ed5b4fd62249dec73277ab31fc07595f1cdcfacdec5d6f13de9951ccffecc0c
3
+ metadata.gz: 4161675b7c71e44d7f0f7ee6b2b6901509bc367ab9d34fdcdca5fb7dfb600cff
4
+ data.tar.gz: b34c191ab1806649d81e5620dcaf57a86b9a5881a164724f5f900176dde2e0d1
5
5
  SHA512:
6
- metadata.gz: 84333e72029b10d6a9ee7fc2a2392e08d6e9fc2d0871deec2a35e6e1042fde559efba0de2df008b91fcecfff2ba1b1b414275fb6a29c0a2cc52db62b08ae9915
7
- data.tar.gz: 1162d80c92024e93af674629594c726bd2b5b965bebc63150f6384f488d0a24dcf7c52f2c56552aecec2010d26352b43fc88e3191cbfc2a042ea8ea64eca7e00
6
+ metadata.gz: 2efc52240df29f1ddffed5daeff5d51c5b63a234d30219b70cf283e7b53086845f23f4438894991f864006198779bfaeea47857b60715086853c5eb321a6762b
7
+ data.tar.gz: fa1c376c7432db658ec2d8fa356e74dc9c22f55d2035743a7f28a603c4339df9102bfc95dbe6d1d05d18f0a453496836ae568209adbc3736de4bb64ca7e6385c
data/Gemfile CHANGED
@@ -10,7 +10,7 @@ group(:development, :test) do
10
10
  gem("minitest")
11
11
  gem("minitest-reporters")
12
12
  gem("rake", "~> 13.1")
13
- gem("rubocop", "~> 1.60", require: false)
13
+ gem("rubocop", "~> 1.62", require: false)
14
14
  gem("rubocop-shopify", require: false)
15
15
  gem("rubocop-sorbet", require: false)
16
16
  gem("sorbet", ">= 0.5.9204", require: false)
data/lib/rbi/index.rb CHANGED
@@ -70,7 +70,7 @@ module RBI
70
70
  end
71
71
  end
72
72
 
73
- # A Node that can be refered to by a unique ID inside an index
73
+ # A Node that can be referred to by a unique ID inside an index
74
74
  module Indexable
75
75
  extend T::Sig
76
76
  extend T::Helpers
data/lib/rbi/model.rb CHANGED
@@ -534,6 +534,79 @@ module RBI
534
534
  @params << param
535
535
  end
536
536
 
537
+ sig { params(name: String).void }
538
+ def add_param(name)
539
+ @params << ReqParam.new(name)
540
+ end
541
+
542
+ sig { params(name: String, default_value: String).void }
543
+ def add_opt_param(name, default_value)
544
+ @params << OptParam.new(name, default_value)
545
+ end
546
+
547
+ sig { params(name: String).void }
548
+ def add_rest_param(name)
549
+ @params << RestParam.new(name)
550
+ end
551
+
552
+ sig { params(name: String).void }
553
+ def add_kw_param(name)
554
+ @params << KwParam.new(name)
555
+ end
556
+
557
+ sig { params(name: String, default_value: String).void }
558
+ def add_kw_opt_param(name, default_value)
559
+ @params << KwOptParam.new(name, default_value)
560
+ end
561
+
562
+ sig { params(name: String).void }
563
+ def add_kw_rest_param(name)
564
+ @params << KwRestParam.new(name)
565
+ end
566
+
567
+ sig { params(name: String).void }
568
+ def add_block_param(name)
569
+ @params << BlockParam.new(name)
570
+ end
571
+
572
+ sig do
573
+ params(
574
+ params: T::Array[SigParam],
575
+ return_type: T.nilable(String),
576
+ is_abstract: T::Boolean,
577
+ is_override: T::Boolean,
578
+ is_overridable: T::Boolean,
579
+ is_final: T::Boolean,
580
+ type_params: T::Array[String],
581
+ checked: T.nilable(Symbol),
582
+ block: T.proc.params(node: Sig).void,
583
+ ).void
584
+ end
585
+ def add_sig(
586
+ params: [],
587
+ return_type: nil,
588
+ is_abstract: false,
589
+ is_override: false,
590
+ is_overridable: false,
591
+ is_final: false,
592
+ type_params: [],
593
+ checked: nil,
594
+ &block
595
+ )
596
+ sig = Sig.new(
597
+ params: params,
598
+ return_type: return_type,
599
+ is_abstract: is_abstract,
600
+ is_override: is_override,
601
+ is_overridable: is_overridable,
602
+ is_final: is_final,
603
+ type_params: type_params,
604
+ checked: checked,
605
+ &block
606
+ )
607
+ @sigs << sig
608
+ end
609
+
537
610
  sig { returns(String) }
538
611
  def fully_qualified_name
539
612
  if is_singleton
@@ -1085,6 +1158,11 @@ module RBI
1085
1158
  @params << param
1086
1159
  end
1087
1160
 
1161
+ sig { params(name: String, type: String).void }
1162
+ def add_param(name, type)
1163
+ @params << SigParam.new(name, type)
1164
+ end
1165
+
1088
1166
  sig { params(other: Object).returns(T::Boolean) }
1089
1167
  def ==(other)
1090
1168
  return false unless other.is_a?(Sig)
@@ -0,0 +1,123 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module RBI
5
+ module Rewriters
6
+ # Take a gem version and filter out all RBI that is not relevant to that version based on @version annotations
7
+ # in comments. As an example:
8
+ #
9
+ # ~~~rb
10
+ # tree = Parser.parse_string(<<~RBI)
11
+ # class Foo
12
+ # # @version > 0.3.0
13
+ # def bar
14
+ # end
15
+ #
16
+ # # @version <= 0.3.0
17
+ # def bar(arg1)
18
+ # end
19
+ # end
20
+ # RBI
21
+ #
22
+ # Rewriters::FilterVersions.filter(tree, Gem::Version.new("0.3.1"))
23
+ #
24
+ # assert_equal(<<~RBI, tree.string)
25
+ # class Foo
26
+ # # @version > 0.3.0
27
+ # def bar
28
+ # end
29
+ # end
30
+ # RBI
31
+ # ~~~
32
+ #
33
+ # Supported operators:
34
+ # - equals `=`
35
+ # - not equals `!=`
36
+ # - greater than `>`
37
+ # - greater than or equal to `>=`
38
+ # - less than `<`
39
+ # - less than or equal to `<=`
40
+ # - pessimistic or twiddle-wakka`~>`
41
+ #
42
+ # And/or logic:
43
+ # - "And" logic: put multiple versions on the same line
44
+ # - e.g. `@version > 0.3.0, <1.0.0` means version must be greater than 0.3.0 AND less than 1.0.0
45
+ # - "Or" logic: put multiple versions on subsequent lines
46
+ # - e.g. the following means version must be less than 0.3.0 OR greater than 1.0.0
47
+ # ```
48
+ # # @version < 0.3.0
49
+ # # @version > 1.0.0
50
+ # ```
51
+ # Prerelease versions:
52
+ # - Prerelease versions are considered less than their non-prerelease counterparts
53
+ # - e.g. `0.4.0-prerelease` is less than `0.4.0`
54
+ #
55
+ # RBI with no versions:
56
+ # - RBI with no version annotations are automatically counted towards ALL versions
57
+ class FilterVersions < Visitor
58
+ extend T::Sig
59
+
60
+ VERSION_PREFIX = "version "
61
+
62
+ class << self
63
+ extend T::Sig
64
+
65
+ sig { params(tree: Tree, version: Gem::Version).void }
66
+ def filter(tree, version)
67
+ v = new(version)
68
+ v.visit(tree)
69
+ end
70
+ end
71
+
72
+ sig { params(version: Gem::Version).void }
73
+ def initialize(version)
74
+ super()
75
+ @version = version
76
+ end
77
+
78
+ sig { override.params(node: T.nilable(Node)).void }
79
+ def visit(node)
80
+ return unless node
81
+
82
+ unless node.satisfies_version?(@version)
83
+ node.detach
84
+ return
85
+ end
86
+
87
+ visit_all(node.nodes.dup) if node.is_a?(Tree)
88
+ end
89
+ end
90
+ end
91
+
92
+ class Node
93
+ sig { params(version: Gem::Version).returns(T::Boolean) }
94
+ def satisfies_version?(version)
95
+ return true unless is_a?(NodeWithComments)
96
+
97
+ requirements = version_requirements
98
+ requirements.empty? || requirements.any? { |req| req.satisfied_by?(version) }
99
+ end
100
+ end
101
+
102
+ class NodeWithComments
103
+ sig { returns(T::Array[Gem::Requirement]) }
104
+ def version_requirements
105
+ annotations.select do |annotation|
106
+ annotation.start_with?(Rewriters::FilterVersions::VERSION_PREFIX)
107
+ end.map do |annotation|
108
+ versions = annotation.delete_prefix(Rewriters::FilterVersions::VERSION_PREFIX).split(/, */)
109
+ Gem::Requirement.new(versions)
110
+ end
111
+ end
112
+ end
113
+
114
+ class Tree
115
+ extend T::Sig
116
+
117
+ sig { params(version: Gem::Version).void }
118
+ def filter_versions!(version)
119
+ visitor = Rewriters::FilterVersions.new(version)
120
+ visitor.visit(self)
121
+ end
122
+ end
123
+ end
data/lib/rbi/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module RBI
5
- VERSION = "0.1.8"
5
+ VERSION = "0.1.10"
6
6
  end
data/lib/rbi.rb CHANGED
@@ -10,6 +10,7 @@ require "rbi/index"
10
10
  require "rbi/rewriters/add_sig_templates"
11
11
  require "rbi/rewriters/annotate"
12
12
  require "rbi/rewriters/deannotate"
13
+ require "rbi/rewriters/filter_versions"
13
14
  require "rbi/rewriters/merge_trees"
14
15
  require "rbi/rewriters/nest_singleton_methods"
15
16
  require "rbi/rewriters/nest_non_public_methods"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre Terrasa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-06 00:00:00.000000000 Z
11
+ date: 2024-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prism
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: 0.18.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '0.22'
22
+ version: '0.25'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: 0.18.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '0.22'
32
+ version: '0.25'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: sorbet-runtime
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -64,6 +64,7 @@ files:
64
64
  - lib/rbi/rewriters/add_sig_templates.rb
65
65
  - lib/rbi/rewriters/annotate.rb
66
66
  - lib/rbi/rewriters/deannotate.rb
67
+ - lib/rbi/rewriters/filter_versions.rb
67
68
  - lib/rbi/rewriters/group_nodes.rb
68
69
  - lib/rbi/rewriters/merge_trees.rb
69
70
  - lib/rbi/rewriters/nest_non_public_methods.rb
@@ -92,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
93
  - !ruby/object:Gem::Version
93
94
  version: '0'
94
95
  requirements: []
95
- rubygems_version: 3.5.5
96
+ rubygems_version: 3.5.7
96
97
  signing_key:
97
98
  specification_version: 4
98
99
  summary: RBI generation framework