tcepsni 0.3.1 → 0.4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -0
- data/lib/tcepsni/parser.rb +169 -99
- data/lib/tcepsni/vendor/activesupport/ordered_options.rb +9 -6
- data/lib/tcepsni/vendor/ipaddr.rb +1 -2
- data/lib/tcepsni/vendor/pathname.rb +1 -3
- data/lib/tcepsni/vendor/rails/paths/root.rb +15 -8
- data/lib/tcepsni/vendor/string_scanner.rb +18 -13
- data/lib/tcepsni/version.rb +1 -1
- data/lib/tcepsni.rb +0 -4
- data/sig/tcepsni.gen.rbs +25 -34
- data/sig/tcepsni.rbs +34 -3
- data/tcepsni.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93737301f5ec57317f38a815c3f51d40c2227668290e3baa6b642ffd82fb2396
|
4
|
+
data.tar.gz: ede377edc499d3469a7fbf6d2c5bea2e2e88568821c71cd5c4de937d72b20d7d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2b2779e7457a92b0678b695c17922e9e21960aa812d9ddf940697a80184541f318f457dae3a437be3bff93ead01cc95c08bd7e0cc3dd49fab8d954bdb518abd
|
7
|
+
data.tar.gz: 3ccb55ba0d3906d0722b0e39d7c69c5888749eb606cf671255aa7c7226dabddc8deaf6b09176fa6171d2e163da3574235b9d44f220bd9960a44b13890ec420cc
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,28 @@
|
|
2
2
|
|
3
3
|
## Unreleased
|
4
4
|
|
5
|
+
## 0.4.0 - 2024-08-04
|
6
|
+
|
7
|
+
### Changed
|
8
|
+
|
9
|
+
* `parse_string` now parses leading double quote
|
10
|
+
* `parse_array` now parses leading bracket
|
11
|
+
* `parse_hash` now parses leading brace
|
12
|
+
* `parse_object` now consider vendors
|
13
|
+
* `parse_object`, `parse_integer`, `parse_expression`, and `parse_attributes` do not raise errors
|
14
|
+
|
15
|
+
### Removed
|
16
|
+
|
17
|
+
* `Tcepsni::Class#encoding?`
|
18
|
+
|
19
|
+
### Added
|
20
|
+
|
21
|
+
* Simple `Range` support and `parse_range`
|
22
|
+
* `parse_float`
|
23
|
+
* `parse_time`
|
24
|
+
* `parse_attribute`
|
25
|
+
* `parse_encoding`
|
26
|
+
|
5
27
|
## 0.3.1 - 2024-07-21
|
6
28
|
|
7
29
|
Update gemspec fields etc.
|
data/lib/tcepsni/parser.rb
CHANGED
@@ -3,6 +3,8 @@ require 'forwardable'
|
|
3
3
|
|
4
4
|
module Tcepsni
|
5
5
|
class Parser
|
6
|
+
FAIL = Data.define
|
7
|
+
|
6
8
|
def initialize(source, vendors:)
|
7
9
|
@scanner = ::StringScanner.new(source)
|
8
10
|
@vendors = vendors.flat_map { |vendor| [*vendor.dependencies, vendor] }.uniq
|
@@ -10,156 +12,224 @@ module Tcepsni
|
|
10
12
|
|
11
13
|
# If it returned nil when failed, it collides with normal nil value.
|
12
14
|
def parse_expression
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
pos = @scanner.pos
|
29
|
-
@vendors.select { |vendor| vendor.object? }.each do |vendor|
|
30
|
-
@scanner.pos = pos
|
31
|
-
return vendor.parse(self)
|
32
|
-
rescue Error
|
33
|
-
next
|
34
|
-
end
|
35
|
-
@scanner.pos = pos
|
36
|
-
parse_object
|
37
|
-
elsif (digits = @scanner.scan(/\d+/))
|
38
|
-
int = Integer(digits)
|
39
|
-
if @scanner.skip('.')
|
40
|
-
int2 = parse_integer
|
41
|
-
Float("#{int}.#{int2}")
|
42
|
-
elsif digits.size == 4 && @scanner.skip(/-(?<month>[01]\d)-(?<day>\d\d) (?<hour>[012]\d):(?<minute>[0-5]\d):(?<second>[0-5]\d) (?<zone>[+-]\d\d\d\d)/)
|
43
|
-
Time.new(Integer(int), @scanner[:month], @scanner[:day],
|
44
|
-
@scanner[:hour], @scanner[:minute], @scanner[:second],
|
45
|
-
@scanner[:zone])
|
46
|
-
else
|
47
|
-
int
|
48
|
-
end
|
49
|
-
else
|
50
|
-
parse_class
|
51
|
-
end
|
15
|
+
FAIL == (expr = parse_nil) or return expr
|
16
|
+
FAIL == (expr = parse_false) or return expr
|
17
|
+
(expr = (parse_true or
|
18
|
+
parse_symbol or
|
19
|
+
parse_string or
|
20
|
+
parse_array or
|
21
|
+
parse_hash or
|
22
|
+
parse_encoding or
|
23
|
+
parse_object or
|
24
|
+
parse_range or
|
25
|
+
parse_float or
|
26
|
+
parse_time or
|
27
|
+
parse_integer or
|
28
|
+
parse_class)) and return expr
|
29
|
+
FAIL
|
52
30
|
end
|
53
31
|
|
54
32
|
alias parse parse_expression
|
55
33
|
|
34
|
+
def parse_nil
|
35
|
+
@scanner.skip(/nil\b/) or return FAIL
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def parse_true
|
40
|
+
@scanner.skip(/true\b/) and true
|
41
|
+
end
|
42
|
+
|
43
|
+
def parse_false
|
44
|
+
@scanner.skip(/false\b/) or return FAIL
|
45
|
+
false
|
46
|
+
end
|
47
|
+
|
56
48
|
def parse_integer
|
57
|
-
|
58
|
-
Integer(int)
|
49
|
+
@scanner.scan(/\d+/)&.to_i
|
59
50
|
end
|
60
51
|
|
61
52
|
def parse_identifier
|
62
|
-
|
63
|
-
id.intern
|
53
|
+
@scanner.scan(/[A-Za-z_][A-Za-z0-9_]*/)&.intern
|
64
54
|
end
|
65
55
|
|
66
|
-
def
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
return
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
result << @scanner.getch
|
56
|
+
def parse_symbol
|
57
|
+
pos = @scanner.pos
|
58
|
+
@scanner.skip(':') and
|
59
|
+
begin
|
60
|
+
(id = parse_identifier) and return id
|
61
|
+
@scanner.skip('[]') and return :[]
|
62
|
+
@scanner.pos = pos
|
63
|
+
return
|
75
64
|
end
|
76
|
-
|
77
|
-
|
65
|
+
end
|
66
|
+
|
67
|
+
def parse_string
|
68
|
+
pos = @scanner.pos
|
69
|
+
@scanner.skip('"') or return
|
70
|
+
result = +''
|
71
|
+
result <<
|
72
|
+
if @scanner.skip('"') then return result
|
73
|
+
elsif @scanner.skip('\\"') then '"'
|
74
|
+
else @scanner.getch
|
75
|
+
end until @scanner.eos?
|
76
|
+
@scanner.pos = pos
|
77
|
+
nil
|
78
78
|
end
|
79
79
|
|
80
80
|
def parse_array
|
81
|
+
pos = @scanner.pos
|
82
|
+
@scanner.skip('[') or return
|
81
83
|
result = []
|
82
84
|
until @scanner.eos?
|
83
|
-
|
84
|
-
|
85
|
-
rescue StandardError
|
86
|
-
break
|
87
|
-
end
|
85
|
+
FAIL == (expr = parse_expression) and break
|
86
|
+
result << expr
|
88
87
|
@scanner.skip(', ') or break
|
89
88
|
end
|
90
|
-
@scanner.skip(']')
|
91
|
-
|
89
|
+
if @scanner.skip(']')
|
90
|
+
result
|
91
|
+
else
|
92
|
+
@scanner.pos = pos
|
93
|
+
nil
|
94
|
+
end
|
92
95
|
end
|
93
96
|
|
94
97
|
def parse_hash
|
98
|
+
pos = @scanner.pos
|
99
|
+
@scanner.skip('{') or return
|
95
100
|
result = {}
|
96
101
|
until @scanner.eos?
|
97
|
-
key =
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
102
|
+
FAIL == (key = parse_expression) and break
|
103
|
+
@scanner.skip('=>') and
|
104
|
+
FAIL != (value = parse_expression) or
|
105
|
+
begin
|
106
|
+
@scanner.pos = pos
|
107
|
+
return
|
108
|
+
end
|
104
109
|
result[key] = value
|
105
110
|
@scanner.skip(', ') or break
|
106
111
|
end
|
107
|
-
@scanner.skip('}')
|
108
|
-
|
112
|
+
if @scanner.skip('}')
|
113
|
+
result
|
114
|
+
else
|
115
|
+
@scanner.pos = pos
|
116
|
+
return
|
117
|
+
end
|
109
118
|
end
|
110
119
|
|
111
120
|
def parse_class
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
121
|
+
pos = @scanner.pos
|
122
|
+
namespaces = [(parse_capitalized_identifier or return)]
|
123
|
+
namespaces <<
|
124
|
+
begin
|
125
|
+
parse_capitalized_identifier or
|
126
|
+
begin
|
127
|
+
@scanner.pos = pos
|
128
|
+
return
|
129
|
+
end
|
130
|
+
end while @scanner.skip('::')
|
118
131
|
*namespaces, name = namespaces
|
119
132
|
Tcepsni::Class.new(name:, namespaces:)
|
120
133
|
end
|
121
134
|
|
122
135
|
def parse_capitalized_identifier
|
123
|
-
|
124
|
-
|
136
|
+
@scanner.scan(/[A-Z][A-Za-z0-9_]*/)&.intern
|
137
|
+
end
|
138
|
+
|
139
|
+
def parse_encoding
|
140
|
+
@scanner.skip(/#<Encoding:(?<name>[^>]+)>/) && Encoding.find(@scanner[:name])
|
125
141
|
end
|
126
142
|
|
127
143
|
def parse_object
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
Encoding.find(@scanner[:name])
|
133
|
-
else
|
134
|
-
memory_reference = parse_memory_reference
|
135
|
-
attributes = parse_attributes
|
136
|
-
Tcepsni::Object.new(klass:, memory_reference:, attributes:)
|
144
|
+
pos = @scanner.pos
|
145
|
+
@scanner.skip('#<') or return
|
146
|
+
@vendors.select { |vendor| vendor.object? }.each do |vendor|
|
147
|
+
expr = vendor.parse(self) and return expr
|
137
148
|
end
|
149
|
+
|
150
|
+
klass = parse_class and
|
151
|
+
memory_reference = parse_memory_reference and
|
152
|
+
attributes = parse_attributes and
|
153
|
+
@scanner.skip('>') and
|
154
|
+
Tcepsni::Object.new(klass:, memory_reference:, attributes:) or
|
155
|
+
begin
|
156
|
+
@scanner.pos = pos
|
157
|
+
nil
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
def parse_attribute
|
162
|
+
pos = @scanner.pos
|
163
|
+
@scanner.skip('@') and
|
164
|
+
key = parse_identifier and
|
165
|
+
@scanner.skip('=') and
|
166
|
+
if FAIL == (value = parse_expression)
|
167
|
+
@scanner.pos = pos
|
168
|
+
return
|
169
|
+
else
|
170
|
+
return key, value
|
171
|
+
end
|
138
172
|
end
|
139
173
|
|
140
174
|
def parse_attributes
|
175
|
+
@scanner.match?('>') and return {}
|
176
|
+
pos = @scanner.pos
|
141
177
|
attributes = {}
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
@scanner.
|
147
|
-
attributes[key.intern] = parse_expression
|
148
|
-
unless @scanner.skip(',')
|
149
|
-
@scanner.skip('>') or raise Error, "no object closer: #{@scanner.inspect}"
|
178
|
+
while @scanner.skip(' ')
|
179
|
+
key, value = (parse_attribute or return)
|
180
|
+
attributes[key] = value
|
181
|
+
@scanner.skip(',') or
|
182
|
+
if @scanner.match?('>')
|
150
183
|
break
|
184
|
+
else
|
185
|
+
@scanner.pos = pos
|
186
|
+
return
|
151
187
|
end
|
152
|
-
end
|
153
188
|
end
|
154
189
|
attributes
|
155
190
|
end
|
156
191
|
|
157
192
|
def parse_memory_reference
|
158
|
-
@scanner.skip(/:(?<
|
159
|
-
Integer(@scanner[:
|
193
|
+
@scanner.skip(/:(?<ref>0x[0-9a-f]{16})/) or return
|
194
|
+
Integer(@scanner[:ref])
|
195
|
+
end
|
196
|
+
|
197
|
+
def parse_range
|
198
|
+
pos = @scanner.pos
|
199
|
+
int = parse_integer and
|
200
|
+
if @scanner.skip("..") && (int2 = parse_integer)
|
201
|
+
int..int2
|
202
|
+
else
|
203
|
+
@scanner.pos = pos
|
204
|
+
nil
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
def parse_float
|
209
|
+
pos = @scanner.pos
|
210
|
+
int = parse_integer and
|
211
|
+
if @scanner.skip('.') && (int2 = parse_integer)
|
212
|
+
Float("#{int}.#{int2}")
|
213
|
+
else
|
214
|
+
@scanner.pos = pos
|
215
|
+
nil
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def parse_time
|
220
|
+
pos = @scanner.pos
|
221
|
+
int = parse_integer and
|
222
|
+
if int <= 9999 && @scanner.skip(/-(?<month>[01]\d)-(?<day>\d\d) (?<hour>[012]\d):(?<minute>[0-5]\d):(?<second>[0-5]\d) (?<zone>[+-]\d\d\d\d)/)
|
223
|
+
Time.new(int, @scanner[:month], @scanner[:day],
|
224
|
+
@scanner[:hour], @scanner[:minute], @scanner[:second],
|
225
|
+
@scanner[:zone])
|
226
|
+
else
|
227
|
+
@scanner.pos = pos
|
228
|
+
nil
|
229
|
+
end
|
160
230
|
end
|
161
231
|
|
162
232
|
extend Forwardable
|
163
|
-
def_delegators :@scanner, :skip, :[]
|
233
|
+
def_delegators :@scanner, :skip, :[], :match?, :pos, :pos=
|
164
234
|
end
|
165
235
|
end
|
@@ -5,13 +5,16 @@ module Tcepsni
|
|
5
5
|
module ActiveSupport
|
6
6
|
class OrderedOptions
|
7
7
|
def self.parse(parser)
|
8
|
-
parser.
|
9
|
-
|
10
|
-
|
8
|
+
pos = parser.pos
|
9
|
+
parser.skip('ActiveSupport::OrderedOptions ') and
|
10
|
+
hash = parser.parse_hash and
|
11
|
+
parser.skip('>') or
|
12
|
+
begin
|
13
|
+
parser.pos = pos
|
14
|
+
return
|
15
|
+
end
|
11
16
|
options = ::ActiveSupport::OrderedOptions.new
|
12
|
-
hash.each
|
13
|
-
options[key] = val
|
14
|
-
end
|
17
|
+
hash.each { |key, val| options[key] = val }
|
15
18
|
options
|
16
19
|
end
|
17
20
|
|
@@ -4,8 +4,7 @@ module Tcepsni
|
|
4
4
|
module Vendor
|
5
5
|
class IPAddr
|
6
6
|
def self.parse(parser)
|
7
|
-
parser.skip(/IPAddr: IPv[46]:(?<addr>[^>]+)>/)
|
8
|
-
::IPAddr.new(parser[:addr])
|
7
|
+
parser.skip(/IPAddr: IPv[46]:(?<addr>[^>]+)>/) && ::IPAddr.new(parser[:addr])
|
9
8
|
end
|
10
9
|
|
11
10
|
def self.object?
|
@@ -4,9 +4,7 @@ module Tcepsni
|
|
4
4
|
module Vendor
|
5
5
|
class Pathname
|
6
6
|
def self.parse(parser)
|
7
|
-
parser.skip(
|
8
|
-
parser.skip(/(?<path>[^>]+)>/) or raise Error, 'invalid path string and closer'
|
9
|
-
::Pathname.new(parser[:path])
|
7
|
+
parser.skip(/Pathname:(?<path>[^>]+)>/) && ::Pathname.new(parser[:path])
|
10
8
|
end
|
11
9
|
|
12
10
|
def self.object?
|
@@ -13,14 +13,21 @@ module Tcepsni
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.parse(parser)
|
16
|
-
parser.skip('Rails::Paths::Root') or
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
16
|
+
parser.skip('Rails::Paths::Root') or return
|
17
|
+
pos = parser.pos
|
18
|
+
if (memory_reference = parser.parse_memory_reference)
|
19
|
+
if parser.skip(' ...>')
|
20
|
+
Tcepsni::Vendor::Rails::Paths::Root.new(memory_reference, {})
|
21
|
+
elsif (attrs = parser.parse_attributes) && parser.skip('>')
|
22
|
+
Tcepsni::Vendor::Rails::Paths::Root.new(memory_reference, attrs)
|
23
|
+
else
|
24
|
+
parser.pos = pos
|
25
|
+
return
|
26
|
+
end
|
27
|
+
else
|
28
|
+
parser.pos = pos
|
29
|
+
nil
|
30
|
+
end
|
24
31
|
end
|
25
32
|
|
26
33
|
def self.object?
|
@@ -4,23 +4,28 @@ module Tcepsni
|
|
4
4
|
attr_reader :pos, :total, :scanned, :rest
|
5
5
|
|
6
6
|
def initialize(pos:, total:, scanned:, rest:)
|
7
|
-
@pos
|
8
|
-
@total
|
7
|
+
@pos = pos
|
8
|
+
@total = total
|
9
9
|
@scanned = scanned
|
10
|
-
@rest
|
10
|
+
@rest = rest
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.parse(parser)
|
14
|
-
parser.
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
14
|
+
pos = parser.pos
|
15
|
+
parser.skip('StringScanner ') and
|
16
|
+
pos = parser.parse_integer and
|
17
|
+
parser.skip('/') and
|
18
|
+
total = parser.parse_integer and
|
19
|
+
parser.skip(' ') and
|
20
|
+
scanned = parser.parse_string and
|
21
|
+
parser.skip(' @ ') and
|
22
|
+
rest = parser.parse_string and
|
23
|
+
parser.skip('>') and
|
24
|
+
Tcepsni::Vendor::StringScanner.new(pos:, total:, scanned:, rest:) or
|
25
|
+
begin
|
26
|
+
parser.pos = pos
|
27
|
+
nil
|
28
|
+
end
|
24
29
|
end
|
25
30
|
|
26
31
|
def self.dependencies
|
data/lib/tcepsni/version.rb
CHANGED
data/lib/tcepsni.rb
CHANGED
data/sig/tcepsni.gen.rbs
CHANGED
@@ -3,10 +3,12 @@
|
|
3
3
|
# Classes
|
4
4
|
module Tcepsni
|
5
5
|
VERSION: String
|
6
|
+
Error: Class
|
6
7
|
|
7
8
|
# def self.parse: (String str) -> untyped
|
8
9
|
|
9
10
|
class Parser
|
11
|
+
FAIL: untyped
|
10
12
|
extend Forwardable
|
11
13
|
@scanner: StringScanner
|
12
14
|
@vendors: Array[Array[untyped]]
|
@@ -24,6 +26,15 @@ module Tcepsni
|
|
24
26
|
# def parse_object: -> Object
|
25
27
|
# def parse_attributes: -> Hash[Symbol, untyped]
|
26
28
|
# def parse_memory_reference: -> Integer
|
29
|
+
# def parse_nil: -> nil
|
30
|
+
# def parse_true: -> true?
|
31
|
+
# def parse_false: -> false
|
32
|
+
# def parse_symbol: -> Symbol
|
33
|
+
# def parse_range: -> Range?
|
34
|
+
# def parse_float: -> Float?
|
35
|
+
# def parse_time: -> Time?
|
36
|
+
# def parse_encoding: -> Encoding?
|
37
|
+
# def parse_attribute: -> [Symbol, untyped]?
|
27
38
|
end
|
28
39
|
|
29
40
|
class Class
|
@@ -48,47 +59,27 @@ module Tcepsni
|
|
48
59
|
|
49
60
|
module Vendor
|
50
61
|
class StringScanner
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
62
|
+
# def initialize: (pos: untyped, total: untyped, scanned: untyped, rest: untyped) -> void
|
63
|
+
# def self.parse: (untyped parser) -> StringScanner?
|
64
|
+
# def self.dependencies: -> Array[untyped]
|
65
|
+
# def self.object?: -> true
|
66
|
+
# attr_reader pos: untyped
|
67
|
+
# attr_reader total: untyped
|
68
|
+
# attr_reader scanned: untyped
|
69
|
+
# attr_reader rest: untyped
|
59
70
|
end
|
60
71
|
|
61
72
|
module Rails
|
62
73
|
module Paths
|
63
74
|
class Root
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
75
|
+
# def initialize: (untyped memory_reference, Hash[untyped, untyped] attributes) -> void
|
76
|
+
# def self.parse: (untyped parser) -> Root?
|
77
|
+
# def self.object?: -> true
|
78
|
+
# def self.dependencies: -> [singleton(Pathname)]
|
79
|
+
# attr_reader memory_reference: untyped
|
80
|
+
# attr_reader attributes: Hash[untyped, untyped]
|
70
81
|
end
|
71
82
|
end
|
72
83
|
end
|
73
|
-
|
74
|
-
module ActiveSupport
|
75
|
-
class OrderedOptions
|
76
|
-
def self.parse: (untyped parser) -> untyped
|
77
|
-
def self.dependencies: -> Array[untyped]
|
78
|
-
def self.object?: -> true
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
class IPAddr
|
83
|
-
def self.parse: (untyped parser) -> IPAddr
|
84
|
-
def self.object?: -> true
|
85
|
-
def self.dependencies: -> Array[untyped]
|
86
|
-
end
|
87
|
-
|
88
|
-
class Pathname
|
89
|
-
def self.parse: (untyped parser) -> Pathname
|
90
|
-
def self.object?: -> true
|
91
|
-
def self.dependencies: -> Array[untyped]
|
92
|
-
end
|
93
84
|
end
|
94
85
|
end
|
data/sig/tcepsni.rbs
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
module Tcepsni
|
2
2
|
VERSION: String
|
3
|
-
|
4
|
-
class Error < StandardError
|
5
|
-
end
|
3
|
+
Error: Class
|
6
4
|
|
7
5
|
def self.parse: (String str) -> untyped
|
8
6
|
|
9
7
|
class Parser
|
8
|
+
FAIL: untyped
|
10
9
|
def initialize: (String source, vendors: Array[untyped]?) -> void
|
11
10
|
def parse_expression: -> untyped
|
12
11
|
alias parse parse_expression
|
@@ -20,6 +19,15 @@ module Tcepsni
|
|
20
19
|
def parse_object: -> Object
|
21
20
|
def parse_attributes: -> Hash[Symbol, untyped]
|
22
21
|
def parse_memory_reference: -> Integer
|
22
|
+
def parse_nil: -> nil
|
23
|
+
def parse_true: -> true?
|
24
|
+
def parse_false: -> false
|
25
|
+
def parse_symbol: -> Symbol
|
26
|
+
def parse_range: -> Range?
|
27
|
+
def parse_float: -> Float?
|
28
|
+
def parse_time: -> Time?
|
29
|
+
def parse_encoding: -> Encoding?
|
30
|
+
def parse_attribute: -> [Symbol, untyped]?
|
23
31
|
end
|
24
32
|
|
25
33
|
class Class
|
@@ -44,24 +52,47 @@ module Tcepsni
|
|
44
52
|
|
45
53
|
module Vendor
|
46
54
|
class StringScanner
|
55
|
+
attr_reader pos: untyped
|
56
|
+
attr_reader total: untyped
|
57
|
+
attr_reader scanned: untyped
|
58
|
+
attr_reader rest: untyped
|
59
|
+
def initialize: (pos: untyped, total: untyped, scanned: untyped, rest: untyped) -> void
|
60
|
+
def self.parse: (untyped parser) -> StringScanner?
|
61
|
+
def self.dependencies: -> Array[untyped]
|
62
|
+
def self.object?: -> true
|
47
63
|
end
|
48
64
|
|
49
65
|
module Rails
|
50
66
|
module Paths
|
51
67
|
class Root
|
68
|
+
attr_reader memory_reference: untyped
|
69
|
+
attr_reader attributes: Hash[untyped, untyped]
|
70
|
+
def initialize: (untyped memory_reference, Hash[untyped, untyped] attributes) -> void
|
71
|
+
def self.parse: (untyped parser) -> Root?
|
72
|
+
def self.object?: -> true
|
73
|
+
def self.dependencies: -> [singleton(Pathname)]
|
52
74
|
end
|
53
75
|
end
|
54
76
|
end
|
55
77
|
|
56
78
|
module ActiveSupport
|
57
79
|
class OrderedOptions
|
80
|
+
def self.parse: (untyped parser) -> nil
|
81
|
+
def self.dependencies: -> Array[untyped]
|
82
|
+
def self.object?: -> true
|
58
83
|
end
|
59
84
|
end
|
60
85
|
|
61
86
|
class IPAddr
|
87
|
+
def self.parse: (untyped parser) -> IPAddr
|
88
|
+
def self.object?: -> true
|
89
|
+
def self.dependencies: -> Array[untyped]
|
62
90
|
end
|
63
91
|
|
64
92
|
class Pathname
|
93
|
+
def self.parse: (untyped parser) -> Pathname
|
94
|
+
def self.object?: -> true
|
95
|
+
def self.dependencies: -> Array[untyped]
|
65
96
|
end
|
66
97
|
end
|
67
98
|
end
|
data/tcepsni.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
12
12
|
|
13
13
|
spec.homepage = 'https://codeberg.org/gemmaro/tcepsni'
|
14
14
|
|
15
|
-
spec.required_ruby_version = '>= 3.
|
15
|
+
spec.required_ruby_version = '>= 3.2'
|
16
16
|
|
17
17
|
spec.files = Dir['lib/**/*.rb'] + Dir['sig/**/*.rbs'] +
|
18
18
|
['CHANGELOG.md', 'tcepsni.gemspec', 'README.md', 'LICENSE.txt']
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tcepsni
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gemmaro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Tcepsni gem is a parser library for inspected strings of Ruby objects.
|
14
14
|
email:
|
@@ -50,14 +50,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
51
51
|
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 3.
|
53
|
+
version: '3.2'
|
54
54
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
55
|
requirements:
|
56
56
|
- - ">="
|
57
57
|
- !ruby/object:Gem::Version
|
58
58
|
version: '0'
|
59
59
|
requirements: []
|
60
|
-
rubygems_version: 3.
|
60
|
+
rubygems_version: 3.4.19
|
61
61
|
signing_key:
|
62
62
|
specification_version: 4
|
63
63
|
summary: inspected Ruby objects parser
|