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 +4 -4
- data/Gemfile +1 -1
- data/lib/rbi/index.rb +1 -1
- data/lib/rbi/model.rb +78 -0
- data/lib/rbi/rewriters/filter_versions.rb +123 -0
- data/lib/rbi/version.rb +1 -1
- data/lib/rbi.rb +1 -0
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4161675b7c71e44d7f0f7ee6b2b6901509bc367ab9d34fdcdca5fb7dfb600cff
|
4
|
+
data.tar.gz: b34c191ab1806649d81e5620dcaf57a86b9a5881a164724f5f900176dde2e0d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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
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
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.
|
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-
|
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
|
+
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.
|
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.
|
96
|
+
rubygems_version: 3.5.7
|
96
97
|
signing_key:
|
97
98
|
specification_version: 4
|
98
99
|
summary: RBI generation framework
|