ryac 0.2.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 (107) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +145 -0
  4. data/Rakefile +45 -0
  5. data/Steepfile +9 -0
  6. data/bin/console +11 -0
  7. data/bin/ryac +134 -0
  8. data/bin/setup +8 -0
  9. data/lib/ryac/analysis/constant/collection.rb +332 -0
  10. data/lib/ryac/analysis/constant/rename_mapping.rb +346 -0
  11. data/lib/ryac/analysis/cvar/collection.rb +37 -0
  12. data/lib/ryac/analysis/gvar/collection.rb +36 -0
  13. data/lib/ryac/analysis/gvar/rename_mapping.rb +82 -0
  14. data/lib/ryac/analysis/ivar/collection.rb +281 -0
  15. data/lib/ryac/analysis/keyword/collection.rb +213 -0
  16. data/lib/ryac/analysis/keyword/rename_mapping.rb +167 -0
  17. data/lib/ryac/analysis/local_scopes.rb +582 -0
  18. data/lib/ryac/analysis/method/collection.rb +298 -0
  19. data/lib/ryac/analysis/method/rename_mapping.rb +337 -0
  20. data/lib/ryac/analysis/method_aliases.rb +83 -0
  21. data/lib/ryac/analysis/method_aliasing.rb +65 -0
  22. data/lib/ryac/analysis/nesting.rb +123 -0
  23. data/lib/ryac/analysis/scope_management.rb +25 -0
  24. data/lib/ryac/analysis/site_bucket_mapping.rb +127 -0
  25. data/lib/ryac/analysis/type_oracle.rb +386 -0
  26. data/lib/ryac/ast_utils.rb +321 -0
  27. data/lib/ryac/errors.rb +32 -0
  28. data/lib/ryac/gem_resolver.rb +55 -0
  29. data/lib/ryac/minifier.rb +169 -0
  30. data/lib/ryac/name_generator.rb +68 -0
  31. data/lib/ryac/pipeline/analyzer.rb +264 -0
  32. data/lib/ryac/pipeline/attr_decl_shorten.rb +61 -0
  33. data/lib/ryac/pipeline/boolean_shorten.rb +26 -0
  34. data/lib/ryac/pipeline/char_shorten.rb +20 -0
  35. data/lib/ryac/pipeline/compactor.rb +1202 -0
  36. data/lib/ryac/pipeline/concatenator.rb +248 -0
  37. data/lib/ryac/pipeline/constant_aliaser.rb +240 -0
  38. data/lib/ryac/pipeline/constant_fold.rb +93 -0
  39. data/lib/ryac/pipeline/control_flow_simplify.rb +352 -0
  40. data/lib/ryac/pipeline/data_types.rb +179 -0
  41. data/lib/ryac/pipeline/endless_method.rb +60 -0
  42. data/lib/ryac/pipeline/errors.rb +94 -0
  43. data/lib/ryac/pipeline/file_collector.rb +360 -0
  44. data/lib/ryac/pipeline/method_renamer.rb +151 -0
  45. data/lib/ryac/pipeline/paren_optimizer.rb +161 -0
  46. data/lib/ryac/pipeline/rename_patcher.rb +274 -0
  47. data/lib/ryac/pipeline/source_patcher.rb +54 -0
  48. data/lib/ryac/pipeline/spelling_shorten.rb +60 -0
  49. data/lib/ryac/pipeline/stage.rb +72 -0
  50. data/lib/ryac/pipeline/stage_runner.rb +84 -0
  51. data/lib/ryac/pipeline/variable_renamer.rb +125 -0
  52. data/lib/ryac/union_find.rb +42 -0
  53. data/lib/ryac/version.rb +5 -0
  54. data/lib/ryac.rb +29 -0
  55. data/rbs_collection.lock.yaml +224 -0
  56. data/rbs_collection.yaml +25 -0
  57. data/sig/ryac/analysis/constant/collection.rbs +30 -0
  58. data/sig/ryac/analysis/constant/rename_mapping.rbs +60 -0
  59. data/sig/ryac/analysis/cvar/collection.rbs +11 -0
  60. data/sig/ryac/analysis/gvar/collection.rbs +9 -0
  61. data/sig/ryac/analysis/gvar/rename_mapping.rbs +23 -0
  62. data/sig/ryac/analysis/ivar/collection.rbs +26 -0
  63. data/sig/ryac/analysis/keyword/collection.rbs +27 -0
  64. data/sig/ryac/analysis/keyword/rename_mapping.rbs +31 -0
  65. data/sig/ryac/analysis/local_scopes.rbs +77 -0
  66. data/sig/ryac/analysis/method/collection.rbs +25 -0
  67. data/sig/ryac/analysis/method/rename_mapping.rbs +82 -0
  68. data/sig/ryac/analysis/method_aliases.rbs +10 -0
  69. data/sig/ryac/analysis/method_aliasing.rbs +9 -0
  70. data/sig/ryac/analysis/nesting.rbs +9 -0
  71. data/sig/ryac/analysis/scope_management.rbs +5 -0
  72. data/sig/ryac/analysis/site_bucket_mapping.rbs +26 -0
  73. data/sig/ryac/analysis/type_oracle.rbs +61 -0
  74. data/sig/ryac/ast_utils.rbs +34 -0
  75. data/sig/ryac/errors.rbs +21 -0
  76. data/sig/ryac/gem_resolver.rbs +28 -0
  77. data/sig/ryac/minifier.rbs +33 -0
  78. data/sig/ryac/name_generator.rbs +14 -0
  79. data/sig/ryac/pipeline/analyzer.rbs +34 -0
  80. data/sig/ryac/pipeline/attr_decl_shorten.rbs +17 -0
  81. data/sig/ryac/pipeline/boolean_shorten.rbs +11 -0
  82. data/sig/ryac/pipeline/char_shorten.rbs +11 -0
  83. data/sig/ryac/pipeline/compactor.rbs +125 -0
  84. data/sig/ryac/pipeline/concatenator.rbs +28 -0
  85. data/sig/ryac/pipeline/constant_aliaser.rbs +35 -0
  86. data/sig/ryac/pipeline/constant_fold.rbs +20 -0
  87. data/sig/ryac/pipeline/control_flow_simplify.rbs +34 -0
  88. data/sig/ryac/pipeline/data_types.rbs +151 -0
  89. data/sig/ryac/pipeline/endless_method.rbs +14 -0
  90. data/sig/ryac/pipeline/errors.rbs +46 -0
  91. data/sig/ryac/pipeline/file_collector.rbs +34 -0
  92. data/sig/ryac/pipeline/method_renamer.rbs +25 -0
  93. data/sig/ryac/pipeline/paren_optimizer.rbs +16 -0
  94. data/sig/ryac/pipeline/rename_patcher.rbs +38 -0
  95. data/sig/ryac/pipeline/source_patcher.rbs +12 -0
  96. data/sig/ryac/pipeline/spelling_shorten.rbs +14 -0
  97. data/sig/ryac/pipeline/stage.rbs +28 -0
  98. data/sig/ryac/pipeline/stage_runner.rbs +18 -0
  99. data/sig/ryac/pipeline/variable_renamer.rbs +21 -0
  100. data/sig/ryac/union_find.rbs +17 -0
  101. data/sig/ryac.rbs +13 -0
  102. data/sig/shims/env.rbs +19 -0
  103. data/sig/shims/typeprof/core/ast.rbs +299 -0
  104. data/sig/shims/typeprof/core/type.rbs +22 -0
  105. data/sig/shims/typeprof/core.rbs +73 -0
  106. data/tools/regen_pins.rb +45 -0
  107. metadata +201 -0
@@ -0,0 +1,299 @@
1
+ module TypeProf
2
+ module Core
3
+ class AST
4
+ class Node
5
+ attr_reader lenv: LocalEnv
6
+ attr_reader static_ret: Node?
7
+ attr_reader ret: BasicVertex
8
+ attr_reader raw_node: Prism::Node
9
+
10
+ def traverse: () { (Symbol, Node) -> void } -> void
11
+ def each_subnode: () { (Node) -> void } -> void
12
+ def boxes: (Symbol kind) { (Box) -> void } -> void
13
+ def code_range: () -> TypeProf::CodeRange
14
+ def object_id: () -> Integer
15
+ end
16
+
17
+ class CallBaseNode < Node
18
+ attr_reader recv: Node?
19
+ attr_reader mid: Symbol
20
+ attr_reader positional_args: Array[Node]
21
+ attr_reader block_body: Node?
22
+ attr_reader block_f_args: Array[Symbol]
23
+ attr_reader block_pass: Node?
24
+ attr_reader safe_navigation: bool
25
+
26
+ attr_reader keyword_args: Node?
27
+ attr_reader block_multi_targets: Hash[Integer, Prism::MultiTargetNode]?
28
+ end
29
+
30
+ class CallNode < CallBaseNode
31
+ end
32
+
33
+ class SuperNode < CallBaseNode
34
+ end
35
+
36
+ class ForwardingSuperNode < CallBaseNode
37
+ end
38
+
39
+ class YieldNode < CallBaseNode
40
+ end
41
+
42
+ class OperatorNode < CallBaseNode
43
+ end
44
+
45
+ class IndexReadNode < CallBaseNode
46
+ end
47
+
48
+ class IndexWriteNode < CallBaseNode
49
+ attr_reader rhs: Node?
50
+ end
51
+
52
+ class CallReadNode < CallBaseNode
53
+ end
54
+
55
+ class CallWriteNode < CallBaseNode
56
+ attr_reader rhs: Node?
57
+ end
58
+
59
+ class DefNode < Node
60
+ attr_reader singleton: bool
61
+ attr_reader mid: Symbol
62
+ attr_reader body: Node?
63
+ attr_reader tbl: Array[Symbol]
64
+ attr_reader block: Node?
65
+ attr_reader req_positionals: Array[Symbol]
66
+ attr_reader opt_positionals: Array[Symbol]
67
+ attr_reader rest_positionals: Symbol?
68
+ attr_reader post_positionals: Array[Symbol]
69
+ attr_reader req_keywords: Array[Symbol]?
70
+ attr_reader opt_keywords: Array[Symbol]?
71
+ attr_reader rest_keywords: Symbol?
72
+ attr_reader block_param: Symbol?
73
+ end
74
+
75
+ class LiteralNode < Node
76
+ attr_reader lit: Symbol | String | Integer | Float | Rational | Complex | nil
77
+ end
78
+
79
+ class NilNode < LiteralNode
80
+ end
81
+
82
+ class TrueNode < LiteralNode
83
+ end
84
+
85
+ class FalseNode < LiteralNode
86
+ end
87
+
88
+ class IntegerNode < LiteralNode
89
+ end
90
+
91
+ class FloatNode < LiteralNode
92
+ end
93
+
94
+ class SymbolNode < LiteralNode
95
+ end
96
+
97
+ class StringNode < LiteralNode
98
+ end
99
+
100
+ class LocalVariableReadNode < Node
101
+ attr_reader var: Symbol
102
+ end
103
+
104
+ class LocalVariableWriteNode < Node
105
+ attr_reader var: Symbol
106
+ attr_reader rhs: Node?
107
+ end
108
+
109
+ class InstanceVariableReadNode < Node
110
+ attr_reader var: Symbol
111
+ end
112
+
113
+ class InstanceVariableWriteNode < Node
114
+ attr_reader var: Symbol
115
+ attr_reader rhs: Node?
116
+ end
117
+
118
+ class ConstantReadNode < Node
119
+ attr_reader cname: Symbol
120
+ attr_reader cbase: Node?
121
+ attr_reader toplevel: bool
122
+ # Not an AST node: a Static const-read record (ConstRead/ScopedConstRead),
123
+ # probed via respond_to? at the use site.
124
+ attr_reader static_ret: untyped
125
+ end
126
+
127
+ class ConstantWriteNode < Node
128
+ attr_reader cpath: Array[Symbol]?
129
+ attr_reader rhs: Node?
130
+ attr_reader static_cpath: Array[Symbol]
131
+ end
132
+
133
+ class IfNode < Node
134
+ attr_reader cond: Node?
135
+ attr_reader then_body: Node?
136
+ attr_reader else_body: Node?
137
+ end
138
+
139
+ class UnlessNode < Node
140
+ attr_reader cond: Node?
141
+ attr_reader then_body: Node?
142
+ attr_reader else_body: Node?
143
+ end
144
+
145
+ class WhileNode < Node
146
+ attr_reader cond: Node?
147
+ attr_reader body: Node?
148
+ end
149
+
150
+ class UntilNode < Node
151
+ attr_reader cond: Node?
152
+ attr_reader body: Node?
153
+ end
154
+
155
+ class CaseNode < Node
156
+ attr_reader cond: Node?
157
+ attr_reader whens: Array[Node]?
158
+ attr_reader else_body: Node?
159
+ end
160
+
161
+ class AndNode < Node
162
+ attr_reader e1: Node?
163
+ attr_reader e2: Node?
164
+ end
165
+
166
+ class OrNode < Node
167
+ attr_reader e1: Node?
168
+ attr_reader e2: Node?
169
+ end
170
+
171
+ class ReturnNode < Node
172
+ attr_reader args: Array[Node]?
173
+ end
174
+
175
+ class BreakNode < Node
176
+ attr_reader args: Array[Node]?
177
+ end
178
+
179
+ class NextNode < Node
180
+ attr_reader args: Array[Node]?
181
+ end
182
+
183
+ class BeginNode < Node
184
+ attr_reader body: Node?
185
+ attr_reader rescue_clauses: Array[Node]
186
+ attr_reader else_body: Node?
187
+ attr_reader ensure_body: Node?
188
+ end
189
+
190
+ class RescueModifierNode < Node
191
+ attr_reader body: Node?
192
+ attr_reader rescue_body: Node?
193
+ end
194
+
195
+ class ModuleNode < Node
196
+ attr_reader body: Node?
197
+ attr_reader static_cpath: Array[Symbol]
198
+ end
199
+
200
+ class ClassNode < Node
201
+ attr_reader body: Node?
202
+ attr_reader superclass_cpath: Node?
203
+ attr_reader static_cpath: Array[Symbol]
204
+ end
205
+
206
+ class IncludeMetaNode < Node
207
+ attr_reader args: Array[Node]?
208
+ end
209
+
210
+ class AttrReaderMetaNode < Node
211
+ attr_reader args: Array[Symbol]
212
+ end
213
+
214
+ class AttrAccessorMetaNode < Node
215
+ attr_reader args: Array[Symbol]
216
+ end
217
+
218
+ class StatementsNode < Node
219
+ attr_reader stmts: Array[Node]
220
+ end
221
+
222
+ class DummyNilNode < Node
223
+ end
224
+
225
+ class SplatNode < Node
226
+ attr_reader child: Node?
227
+ end
228
+
229
+ class SelfNode < Node
230
+ end
231
+
232
+ class ArrayNode < Node
233
+ attr_reader elems: Array[Node]?
234
+ end
235
+
236
+ class HashNode < Node
237
+ attr_reader keys: Array[Node?]
238
+ attr_reader vals: Array[Node]
239
+ end
240
+
241
+ class RangeNode < Node
242
+ attr_reader begin_node: Node?
243
+ attr_reader end_node: Node?
244
+ attr_reader exclude_end: bool
245
+ end
246
+
247
+ class InterpolatedStringNode < Node
248
+ attr_reader parts: Array[Node]?
249
+ end
250
+
251
+ class InterpolatedSymbolNode < Node
252
+ attr_reader parts: Array[Node]?
253
+ end
254
+
255
+ class RegexpNode < Node
256
+ attr_reader parts: Array[Node]?
257
+ attr_reader flags: String?
258
+ end
259
+
260
+ class AliasNode < Node
261
+ attr_reader new_mid: Node
262
+ attr_reader old_mid: Node
263
+ end
264
+
265
+ class UndefNode < Node
266
+ attr_reader names: Array[Node]
267
+ end
268
+
269
+ class LambdaNode < Node
270
+ end
271
+
272
+ class ForNode < Node
273
+ attr_reader body: Node?
274
+ end
275
+
276
+ class DefinedNode < Node
277
+ end
278
+
279
+ class GlobalVariableReadNode < Node
280
+ attr_reader var: Symbol
281
+ end
282
+
283
+ class GlobalVariableWriteNode < Node
284
+ attr_reader var: Symbol
285
+ end
286
+
287
+ class AliasGlobalVariableNode < Node
288
+ end
289
+
290
+ class ClassVariableReadNode < Node
291
+ attr_reader var: Symbol
292
+ end
293
+
294
+ class ClassVariableWriteNode < Node
295
+ attr_reader var: Symbol
296
+ end
297
+ end
298
+ end
299
+ end
@@ -0,0 +1,22 @@
1
+ module TypeProf
2
+ module Core
3
+ class Type
4
+ def base_type: (GlobalEnv genv) -> Type
5
+
6
+ class Singleton < Type
7
+ attr_reader mod: ModuleEntity
8
+ end
9
+
10
+ class Instance < Type
11
+ attr_reader mod: ModuleEntity
12
+ end
13
+
14
+ class Symbol < Type
15
+ attr_reader sym: ::Symbol
16
+ end
17
+
18
+ class Bot < Type
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,73 @@
1
+ module TypeProf
2
+ class CodePosition
3
+ attr_reader lineno: Integer
4
+ attr_reader column: Integer
5
+ end
6
+
7
+ class CodeRange
8
+ attr_reader first: CodePosition
9
+ attr_reader last: CodePosition
10
+ end
11
+
12
+ module Core
13
+ class Service
14
+ attr_reader genv: GlobalEnv
15
+ def initialize: (Hash[Symbol, bool | String] options) -> void
16
+ def update_rb_file: (String path, String? code) -> void
17
+ def update_rbs_file: (String path, String? code) -> void
18
+ end
19
+
20
+ class GlobalEnv
21
+ def resolve_method: (Array[Symbol] cpath, bool singleton, Symbol mid) -> MethodEntity
22
+ def resolve_const: (Array[Symbol] cpath) -> ValueEntity
23
+ def resolve_cpath: (Array[Symbol] cpath) -> ModuleEntity
24
+ def each_superclass: (ModuleEntity mod, bool singleton) { (ModuleEntity, bool) -> void } -> void
25
+ end
26
+
27
+ class Box
28
+ attr_reader node: AST::Node
29
+
30
+ # Yields one resolution candidate per (entity, receiver type) pair; the
31
+ # entity and types are TypeProf internals, kept untyped on purpose.
32
+ def resolve: (GlobalEnv genv, untyped changes) { (untyped entity, untyped ty, Symbol mid, untyped orig_ty) -> void } -> void
33
+ end
34
+
35
+ class MethodEntity
36
+ attr_reader decls: Set[Box]
37
+ attr_reader defs: Set[Box]
38
+ attr_reader aliases: Hash[Box, Symbol]
39
+ attr_reader method_call_boxes: Set[Box]
40
+ def exist?: () -> bool
41
+ end
42
+
43
+ class ValueEntity
44
+ attr_reader read_boxes: Set[Box]
45
+ attr_reader vtx: BasicVertex
46
+ end
47
+
48
+ class ModuleEntity
49
+ attr_reader cpath: Array[Symbol]
50
+ attr_reader superclass: ModuleEntity?
51
+ attr_reader included_modules: Hash[ModuleEntity, ModuleEntity]
52
+ attr_reader child_modules: Hash[ModuleEntity, ModuleEntity]
53
+ attr_reader consts: Hash[Symbol, ValueEntity]
54
+ attr_reader methods: Hash[bool, Hash[Symbol, MethodEntity]]
55
+ end
56
+
57
+ class BasicVertex
58
+ attr_reader types: Hash[Type, bool]
59
+ end
60
+
61
+ class CRef
62
+ attr_reader cpath: Array[Symbol]
63
+ attr_reader scope_level: Symbol
64
+ attr_reader mid: Symbol?
65
+ attr_reader outer: CRef?
66
+ end
67
+
68
+ class LocalEnv
69
+ attr_reader cref: CRef
70
+ attr_reader locals: Hash[Symbol, BasicVertex]
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Regenerates the exact-byte pins in tests/ryac/levels/test_level*.rb from
4
+ # the current pipeline. The level tests are the model: run this after a
5
+ # deliberate behavior change, then review the pin diff — a surprising hunk
6
+ # is a caught bug, never a reason to loosen an assertion (see CLAUDE.md).
7
+ #
8
+ # ruby tools/regen_pins.rb
9
+
10
+ ROOT = File.expand_path('..', __dir__)
11
+ $LOAD_PATH.unshift File.join(ROOT, 'lib')
12
+ require 'ryac'
13
+ # The level tests run these exact recipes; regenerating from the same
14
+ # table is what keeps the pins reproducible by a test run.
15
+ require_relative '../tests/support/stage_recipes'
16
+
17
+ CODE = File.read(File.join(ROOT, 'tests/fixtures/level_test_code.rb'), encoding: Encoding::UTF_8)
18
+
19
+ RECIPES = MinifyTestHelper::STAGE_RECIPES
20
+
21
+ # Cosmetic chunking in the pins' style: break after ';' when a natural
22
+ # statement head follows. Lossless by construction (join == original).
23
+ def chunk(code)
24
+ lines = code.gsub(/;(?=(?:def |class |module |alias |attr|puts |end;|define_))/, ";\n").split("\n")
25
+ raise 'chunking lost bytes' unless lines.join == code
26
+ lines
27
+ end
28
+
29
+ RECIPES.each do |level, stages|
30
+ result = Ryac::Minifier.run_stages(CODE, stages)
31
+ path = File.join(ROOT, "tests/ryac/levels/test_level#{level}.rb")
32
+ text = File.read(path, encoding: Encoding::UTF_8)
33
+
34
+ entries = chunk(result.code).map { |line| " #{line.inspect}," }.join("\n")
35
+ block = "expected = [\n#{entries}\n ].join('')"
36
+ new_text = text.sub(/expected = \[.*?\]\.join\(''\)/m) { block }
37
+ raise "expected block not found in #{path}" if new_text == text && !text.include?(block)
38
+
39
+ pre = "assert_equal #{result.preamble.inspect.tr('"', "'")}, result.preamble"
40
+ new_text = new_text.sub(/assert_equal '.*?', result\.preamble/) { pre }
41
+ ali = "assert_equal #{result.aliases.inspect.tr('"', "'")}, result.aliases"
42
+ new_text = new_text.sub(/assert_equal '.*?', result\.aliases/) { ali }
43
+ File.write(path, new_text)
44
+ puts "level #{level}: code=#{result.code.bytesize}B preamble=#{result.preamble.bytesize}B aliases=#{result.aliases.bytesize}B"
45
+ end
metadata ADDED
@@ -0,0 +1,201 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ryac
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - ahogappa
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: prism
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 1.4.0
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 1.4.0
26
+ - !ruby/object:Gem::Dependency
27
+ name: typeprof
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 0.32.0
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 0.32.0
40
+ - !ruby/object:Gem::Dependency
41
+ name: rbs
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 3.6.0
47
+ - - "<"
48
+ - !ruby/object:Gem::Version
49
+ version: 4.1.0
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 3.6.0
57
+ - - "<"
58
+ - !ruby/object:Gem::Version
59
+ version: 4.1.0
60
+ description: 'Ryac minifies Ruby source code using Prism AST transformations and TypeProf
61
+ type inference. It supports multi-file bundling via require_relative, two compression
62
+ levels (stable: whitespace removal, constant folding, constant/variable renaming;
63
+ unstable: adds method renaming), and preserves functional equivalence through scope-aware
64
+ analysis.'
65
+ email:
66
+ - ahogappa@gmail.com
67
+ executables:
68
+ - ryac
69
+ extensions: []
70
+ extra_rdoc_files: []
71
+ files:
72
+ - LICENSE
73
+ - README.md
74
+ - Rakefile
75
+ - Steepfile
76
+ - bin/console
77
+ - bin/ryac
78
+ - bin/setup
79
+ - lib/ryac.rb
80
+ - lib/ryac/analysis/constant/collection.rb
81
+ - lib/ryac/analysis/constant/rename_mapping.rb
82
+ - lib/ryac/analysis/cvar/collection.rb
83
+ - lib/ryac/analysis/gvar/collection.rb
84
+ - lib/ryac/analysis/gvar/rename_mapping.rb
85
+ - lib/ryac/analysis/ivar/collection.rb
86
+ - lib/ryac/analysis/keyword/collection.rb
87
+ - lib/ryac/analysis/keyword/rename_mapping.rb
88
+ - lib/ryac/analysis/local_scopes.rb
89
+ - lib/ryac/analysis/method/collection.rb
90
+ - lib/ryac/analysis/method/rename_mapping.rb
91
+ - lib/ryac/analysis/method_aliases.rb
92
+ - lib/ryac/analysis/method_aliasing.rb
93
+ - lib/ryac/analysis/nesting.rb
94
+ - lib/ryac/analysis/scope_management.rb
95
+ - lib/ryac/analysis/site_bucket_mapping.rb
96
+ - lib/ryac/analysis/type_oracle.rb
97
+ - lib/ryac/ast_utils.rb
98
+ - lib/ryac/errors.rb
99
+ - lib/ryac/gem_resolver.rb
100
+ - lib/ryac/minifier.rb
101
+ - lib/ryac/name_generator.rb
102
+ - lib/ryac/pipeline/analyzer.rb
103
+ - lib/ryac/pipeline/attr_decl_shorten.rb
104
+ - lib/ryac/pipeline/boolean_shorten.rb
105
+ - lib/ryac/pipeline/char_shorten.rb
106
+ - lib/ryac/pipeline/compactor.rb
107
+ - lib/ryac/pipeline/concatenator.rb
108
+ - lib/ryac/pipeline/constant_aliaser.rb
109
+ - lib/ryac/pipeline/constant_fold.rb
110
+ - lib/ryac/pipeline/control_flow_simplify.rb
111
+ - lib/ryac/pipeline/data_types.rb
112
+ - lib/ryac/pipeline/endless_method.rb
113
+ - lib/ryac/pipeline/errors.rb
114
+ - lib/ryac/pipeline/file_collector.rb
115
+ - lib/ryac/pipeline/method_renamer.rb
116
+ - lib/ryac/pipeline/paren_optimizer.rb
117
+ - lib/ryac/pipeline/rename_patcher.rb
118
+ - lib/ryac/pipeline/source_patcher.rb
119
+ - lib/ryac/pipeline/spelling_shorten.rb
120
+ - lib/ryac/pipeline/stage.rb
121
+ - lib/ryac/pipeline/stage_runner.rb
122
+ - lib/ryac/pipeline/variable_renamer.rb
123
+ - lib/ryac/union_find.rb
124
+ - lib/ryac/version.rb
125
+ - rbs_collection.lock.yaml
126
+ - rbs_collection.yaml
127
+ - sig/ryac.rbs
128
+ - sig/ryac/analysis/constant/collection.rbs
129
+ - sig/ryac/analysis/constant/rename_mapping.rbs
130
+ - sig/ryac/analysis/cvar/collection.rbs
131
+ - sig/ryac/analysis/gvar/collection.rbs
132
+ - sig/ryac/analysis/gvar/rename_mapping.rbs
133
+ - sig/ryac/analysis/ivar/collection.rbs
134
+ - sig/ryac/analysis/keyword/collection.rbs
135
+ - sig/ryac/analysis/keyword/rename_mapping.rbs
136
+ - sig/ryac/analysis/local_scopes.rbs
137
+ - sig/ryac/analysis/method/collection.rbs
138
+ - sig/ryac/analysis/method/rename_mapping.rbs
139
+ - sig/ryac/analysis/method_aliases.rbs
140
+ - sig/ryac/analysis/method_aliasing.rbs
141
+ - sig/ryac/analysis/nesting.rbs
142
+ - sig/ryac/analysis/scope_management.rbs
143
+ - sig/ryac/analysis/site_bucket_mapping.rbs
144
+ - sig/ryac/analysis/type_oracle.rbs
145
+ - sig/ryac/ast_utils.rbs
146
+ - sig/ryac/errors.rbs
147
+ - sig/ryac/gem_resolver.rbs
148
+ - sig/ryac/minifier.rbs
149
+ - sig/ryac/name_generator.rbs
150
+ - sig/ryac/pipeline/analyzer.rbs
151
+ - sig/ryac/pipeline/attr_decl_shorten.rbs
152
+ - sig/ryac/pipeline/boolean_shorten.rbs
153
+ - sig/ryac/pipeline/char_shorten.rbs
154
+ - sig/ryac/pipeline/compactor.rbs
155
+ - sig/ryac/pipeline/concatenator.rbs
156
+ - sig/ryac/pipeline/constant_aliaser.rbs
157
+ - sig/ryac/pipeline/constant_fold.rbs
158
+ - sig/ryac/pipeline/control_flow_simplify.rbs
159
+ - sig/ryac/pipeline/data_types.rbs
160
+ - sig/ryac/pipeline/endless_method.rbs
161
+ - sig/ryac/pipeline/errors.rbs
162
+ - sig/ryac/pipeline/file_collector.rbs
163
+ - sig/ryac/pipeline/method_renamer.rbs
164
+ - sig/ryac/pipeline/paren_optimizer.rbs
165
+ - sig/ryac/pipeline/rename_patcher.rbs
166
+ - sig/ryac/pipeline/source_patcher.rbs
167
+ - sig/ryac/pipeline/spelling_shorten.rbs
168
+ - sig/ryac/pipeline/stage.rbs
169
+ - sig/ryac/pipeline/stage_runner.rbs
170
+ - sig/ryac/pipeline/variable_renamer.rbs
171
+ - sig/ryac/union_find.rbs
172
+ - sig/shims/env.rbs
173
+ - sig/shims/typeprof/core.rbs
174
+ - sig/shims/typeprof/core/ast.rbs
175
+ - sig/shims/typeprof/core/type.rbs
176
+ - tools/regen_pins.rb
177
+ homepage: https://github.com/ahogappa/ryac
178
+ licenses:
179
+ - MIT
180
+ metadata:
181
+ homepage_uri: https://github.com/ahogappa/ryac
182
+ source_code_uri: https://github.com/ahogappa/ryac
183
+ changelog_uri: https://github.com/ahogappa/ryac/releases
184
+ rdoc_options: []
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: 3.4.0
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ requirements: []
198
+ rubygems_version: 4.0.16
199
+ specification_version: 4
200
+ summary: A Ruby source code minifier with type-aware renaming (ryac, read as ryaku)
201
+ test_files: []