rogems 1.0.4 → 1.0.6
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.lock +1 -1
- data/README.md +3 -0
- data/examples/classes/out/client/main.client.lua +56 -19
- data/examples/classes/src/client/main.client.rb +26 -20
- data/examples/using_roact/default.project.json +1 -1
- data/examples/using_roact/out/client/roact/test.lua +1 -1
- data/examples/using_roact/out/tsconfig.tsbuildinfo +1 -1
- data/examples/using_roact/tsconfig.json +1 -0
- data/lib/RoGems.rb +0 -1
- data/lib/rogems/CLI.rb +3 -4
- data/lib/rogems/CodeGenerator.rb +59 -50
- data/lib/rogems/default_tsconfig.json +2 -1
- data/rogems.config.yml +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5cdb90bfc49948a723fea85fa8a4f668eedfbfd4fb3d476d0ed67bdd21f34cfc
|
4
|
+
data.tar.gz: 3ee365a5f93d7fc282dd58f5bdc260f7193feae52cd970c4564fcf1922aad2c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d5bbebd382591ace5e784a6c89160d3b7b4aa053151057c9b16fdb2d2a23bcd54615760c9bc3a2afb0b3b3d8f0fa472e3d87bc3ee1a12196379e0392d99baa1c
|
7
|
+
data.tar.gz: da7cf3c3f20babad5f6c840866d04b1ef1e05b1c3bb85b2c3fedcb61dacced993be475aa966e84125d2fcb3387d0094b5b80f4fb48960c8550427cc8439cca87
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
<a href="https://github.com/R-unic/RoGems/tree/master/spec">
|
2
2
|
<img src="https://github.com/R-unic/RoGems/actions/workflows/main.yml/badge.svg" alt="build_ci">
|
3
3
|
</a>
|
4
|
+
<a href="https://badge.fury.io/rb/rogems">
|
5
|
+
<img src="https://badge.fury.io/rb/rogems.svg" alt="Gem Version">
|
6
|
+
</a>
|
4
7
|
|
5
8
|
# RoGems
|
6
9
|
RoGems is a Ruby to Lua transpiler written for use with Roblox (like roblox-ts)
|
@@ -1,11 +1,11 @@
|
|
1
1
|
local ruby = require(game.ReplicatedStorage.Ruby.Runtime)
|
2
2
|
|
3
3
|
--classdef
|
4
|
-
local
|
5
|
-
function
|
4
|
+
local Dog = {} do
|
5
|
+
function Dog.new()
|
6
6
|
local include = {}
|
7
|
-
local idxMeta = setmetatable(
|
8
|
-
idxMeta.__type = "
|
7
|
+
local idxMeta = setmetatable(Dog, { __index = {} })
|
8
|
+
idxMeta.__type = "Dog"
|
9
9
|
for mixin in ruby.list(include) do
|
10
10
|
for k, v in pairs(mixin) do
|
11
11
|
idxMeta[k] = v
|
@@ -18,15 +18,56 @@ local Entity = {} do
|
|
18
18
|
self.writable = {}
|
19
19
|
self.private = {}
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
|
22
|
+
|
23
|
+
return setmetatable(self, {
|
24
|
+
__index = function(t, k)
|
25
|
+
if not self.attr_reader[k] and not self.attr_accessor[k] and self.private[k] then
|
26
|
+
return nil
|
27
|
+
end
|
28
|
+
return self.attr_reader[k] or self.attr_accessor[k] or Dog[k]
|
29
|
+
end,
|
30
|
+
__newindex = function(t, k, v)
|
31
|
+
if t.writable[k] or self.writable[k] or idxMeta.writable[k] then
|
32
|
+
if self.attr_writer[k] then
|
33
|
+
self.attr_writer[k] = v
|
34
|
+
elseif self.attr_accessor[k] then
|
35
|
+
self.attr_accessor[k] = v
|
36
|
+
end
|
37
|
+
else
|
38
|
+
error("Attempt to write to un-writable attribute '"..k.."'")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
})
|
42
|
+
end
|
43
|
+
end
|
44
|
+
--classdef
|
45
|
+
local Car = {} do
|
46
|
+
function Car.new(make, model)
|
47
|
+
local include = {}
|
48
|
+
local idxMeta = setmetatable(Car, { __index = {} })
|
49
|
+
idxMeta.__type = "Car"
|
50
|
+
for mixin in ruby.list(include) do
|
51
|
+
for k, v in pairs(mixin) do
|
52
|
+
idxMeta[k] = v
|
53
|
+
end
|
54
|
+
end
|
55
|
+
local self = setmetatable({}, { __index = idxMeta })
|
56
|
+
self.attr_accessor = setmetatable({}, { __index = idxMeta.attr_accessor or {} })
|
57
|
+
self.attr_reader = setmetatable({}, { __index = idxMeta.attr_reader or {} })
|
58
|
+
self.attr_writer = setmetatable({}, { __index = idxMeta.attr_writer or {} })
|
59
|
+
self.writable = {}
|
60
|
+
self.private = {}
|
61
|
+
|
62
|
+
self.private.make = make
|
63
|
+
self.private.model = model
|
23
64
|
|
24
65
|
return setmetatable(self, {
|
25
66
|
__index = function(t, k)
|
26
67
|
if not self.attr_reader[k] and not self.attr_accessor[k] and self.private[k] then
|
27
68
|
return nil
|
28
69
|
end
|
29
|
-
return self.attr_reader[k] or self.attr_accessor[k] or
|
70
|
+
return self.attr_reader[k] or self.attr_accessor[k] or Car[k]
|
30
71
|
end,
|
31
72
|
__newindex = function(t, k, v)
|
32
73
|
if t.writable[k] or self.writable[k] or idxMeta.writable[k] then
|
@@ -43,11 +84,12 @@ local Entity = {} do
|
|
43
84
|
end
|
44
85
|
end
|
45
86
|
--classdef
|
46
|
-
local
|
47
|
-
|
87
|
+
local Counter = {} do
|
88
|
+
Counter.count = 0
|
89
|
+
function Counter.new()
|
48
90
|
local include = {}
|
49
|
-
local idxMeta = setmetatable(
|
50
|
-
idxMeta.__type = "
|
91
|
+
local idxMeta = setmetatable(Counter, { __index = {} })
|
92
|
+
idxMeta.__type = "Counter"
|
51
93
|
for mixin in ruby.list(include) do
|
52
94
|
for k, v in pairs(mixin) do
|
53
95
|
idxMeta[k] = v
|
@@ -60,17 +102,14 @@ local Player = {} do
|
|
60
102
|
self.writable = {}
|
61
103
|
self.private = {}
|
62
104
|
|
63
|
-
|
64
|
-
self.writable.name = true
|
65
|
-
self.attr_reader.id = 1
|
66
|
-
self.private.character = Character.new()
|
105
|
+
true.count = += 1
|
67
106
|
|
68
107
|
return setmetatable(self, {
|
69
108
|
__index = function(t, k)
|
70
109
|
if not self.attr_reader[k] and not self.attr_accessor[k] and self.private[k] then
|
71
110
|
return nil
|
72
111
|
end
|
73
|
-
return self.attr_reader[k] or self.attr_accessor[k] or
|
112
|
+
return self.attr_reader[k] or self.attr_accessor[k] or Counter[k]
|
74
113
|
end,
|
75
114
|
__newindex = function(t, k, v)
|
76
115
|
if t.writable[k] or self.writable[k] or idxMeta.writable[k] then
|
@@ -86,6 +125,4 @@ local Player = {} do
|
|
86
125
|
})
|
87
126
|
end
|
88
127
|
end
|
89
|
-
|
90
|
-
local _ = (type(plr.kill) == "function" and plr:kill() or plr.kill)
|
91
|
-
return print(plr.health)
|
128
|
+
return Counter
|
@@ -1,25 +1,31 @@
|
|
1
|
-
class
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
# Example 1: Simple class with a method
|
2
|
+
class Dog
|
3
|
+
def bark
|
4
|
+
puts "Woof!"
|
5
|
+
end
|
5
6
|
end
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
# Example 2: Class with a constructor
|
9
|
+
class Car
|
10
|
+
def initialize(make, model)
|
11
|
+
@make = make
|
12
|
+
@model = model
|
13
|
+
end
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
@character = Character.new
|
15
|
-
end
|
16
|
-
|
17
|
-
def kill
|
18
|
-
@health = 0
|
19
|
-
@character.destroy
|
20
|
-
end
|
15
|
+
def display
|
16
|
+
puts "The car is a #{@make} #{@model}"
|
17
|
+
end
|
21
18
|
end
|
22
19
|
|
23
|
-
|
24
|
-
|
25
|
-
|
20
|
+
# Example 3: Class with class level variable
|
21
|
+
class Counter
|
22
|
+
@@count = 0
|
23
|
+
|
24
|
+
def initialize
|
25
|
+
@@count += 1
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.get_count
|
29
|
+
@@count
|
30
|
+
end
|
31
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
-- Compiled with roblox-ts v2.0
|
1
|
+
-- Compiled with roblox-ts v2.1.0
|
2
2
|
local TS = require(game:GetService("ReplicatedStorage"):WaitForChild("TS_Include"):WaitForChild("RuntimeLib"))
|
3
3
|
local Roact = TS.import(script, game:GetService("ReplicatedStorage"), "TS_Include", "node_modules", "@rbxts", "roact", "src")
|
4
4
|
local element = (Roact.createElement("Frame", {
|
@@ -1 +1 @@
|
|
1
|
-
{"program":{"fileNames":["../node_modules/@rbxts/types/include/generated/enums.d.ts","../node_modules/@rbxts/types/include/generated/None.d.ts","../node_modules/@rbxts/compiler-types/types/Array.d.ts","../node_modules/@rbxts/compiler-types/types/callMacros.d.ts","../node_modules/@rbxts/compiler-types/types/Iterable.d.ts","../node_modules/@rbxts/compiler-types/types/Map.d.ts","../node_modules/@rbxts/compiler-types/types/Promise.d.ts","../node_modules/@rbxts/compiler-types/types/Set.d.ts","../node_modules/@rbxts/compiler-types/types/String.d.ts","../node_modules/@rbxts/compiler-types/types/Symbol.d.ts","../node_modules/@rbxts/compiler-types/types/typeUtils.d.ts","../node_modules/@rbxts/compiler-types/types/eslintIgnore.d.ts","../node_modules/@rbxts/compiler-types/types/core.d.ts","../node_modules/@rbxts/types/include/lua.d.ts","../node_modules/@rbxts/types/include/macro_math.d.ts","../node_modules/@rbxts/types/include/roblox.d.ts","../node_modules/@rbxts/roact/src/jsx.d.ts","../node_modules/@rbxts/roact/src/Component.d.ts","../node_modules/@rbxts/roact/src/createContext.d.ts","../node_modules/@rbxts/roact/src/createElement.d.ts","../node_modules/@rbxts/roact/src/createFragment.d.ts","../node_modules/@rbxts/roact/src/createRef.d.ts","../node_modules/@rbxts/roact/src/forwardRef.d.ts","../node_modules/@rbxts/roact/src/None.d.ts","../node_modules/@rbxts/roact/src/oneChild.d.ts","../node_modules/@rbxts/roact/src/PropMarkers/Change.d.ts","../node_modules/@rbxts/roact/src/PropMarkers/Children.d.ts","../node_modules/@rbxts/roact/src/PropMarkers/Event.d.ts","../node_modules/@rbxts/roact/src/PropMarkers/Ref.d.ts","../node_modules/@rbxts/roact/src/PureComponent.d.ts","../node_modules/@rbxts/roact/src/index.d.ts","../src/client/roact/test.tsx","../node_modules/@rbxts/services/index.d.ts"],"fileInfos":[{"version":"31626e1a99cf059a27f9c31398d96ddc598daba29dc3d8ed8f96bb7c4a1a4a67","signature":false,"affectsGlobalScope":true},{"version":"ebbc1b41e9984217a1979915ca8a00df1e17177c8ae5ae21a416f2abf8ec06ab","signature":false,"affectsGlobalScope":true},{"version":"3b47168aabe50e0d22f10605c776e6e2a26d784054cfe3f8b546c2d0662b755e","signature":false,"affectsGlobalScope":true},{"version":"704d11b4c8895293fe8c9899ebc18ee08f85e14f30a4db5fac33ee4bfed92bad","signature":false,"affectsGlobalScope":true},{"version":"5d88b34dc8a3439278904ac69fdec3f3db8a7ffd9fa5137e14f2c4f1c44fe797","signature":false,"affectsGlobalScope":true},{"version":"dc1b61f860835066d3a9af55bf820477553d7722616b97b0367a880cb7ebbd26","signature":false,"affectsGlobalScope":true},{"version":"484cae989f7c31e611de69d55faa4ea69a99cba17e573ec9a526fdf926bd5f22","signature":false,"affectsGlobalScope":true},{"version":"11bb1fee0b30622b31921d08a73859b8fed36b282308abec5ed702dee1912358","signature":false,"affectsGlobalScope":true},{"version":"5485dc248a18e66f0011d65ae085d89cc91fbe2a98da86eeeb680a80433cbb97","signature":false,"affectsGlobalScope":true},{"version":"298c8b0e2a57743e99bf676971060de36ba6b71aa0b52b5b602b450e2ba6b261","signature":false,"affectsGlobalScope":true},{"version":"6303ada2847311f0bbaa0b4d0107182330bdc7ad8926634f156af51d3df9b81d","signature":false,"affectsGlobalScope":true},{"version":"542cd449b287485e890dbebb1249aa04b1babc3b5b5a1add5920069eaa4c5a93","signature":false,"affectsGlobalScope":true},{"version":"0cd5fc7760ca457e7625a4583e21d655f8a931b90219caad6e0ea91c8f5f290b","signature":false,"affectsGlobalScope":true},{"version":"6eec8bbe515287d2b042ccc2042e96ab1da0a00f589534554c459b771aa77b49","signature":false,"affectsGlobalScope":true},{"version":"de9fbcd34a5df96591bc51db40d087e8ae4c7062ec8a70a44635cf15f0a6464f","signature":false,"affectsGlobalScope":true},{"version":"c59970cdfb5009f362acb26ba0c078ecb8f34b5688de85232d0106e30c55c3b8","signature":false,"affectsGlobalScope":true},{"version":"32dcb0c03a0bc4c155132ae40d93c89369d4aaf8cc6b721d6b840b0556e5f196","signature":false,"affectsGlobalScope":true},{"version":"d9e7113cf8e2d4c7124eb3abb7012dcb42493beba3d0c308bbaa6b88f037e604","signature":false},{"version":"2bbddc5d2c6f4ac488c4c0073fdf72b020f9299e46a032d81b5730f7dda26918","signature":false},{"version":"e634d9e9d512a22c4409d66b3d75e1cc40b089b8c9c8f09e4506a91dff5a60f5","signature":false},{"version":"d73401f25507b155ea752d441085d891636cea0fdd1a37c33365d8a6823acd89","signature":false},{"version":"69d22ed88a35be30948ca7d5a6cf837a8140472853ce77d63054c95aa496a980","signature":false},{"version":"1100c393321847ad2c91bed4fc35f091c9deb3dfc72759f108f6e74ff39de464","signature":false},{"version":"80b85a1e46d83f9a18ba08988522679585a9282c59d0f60a300417b8eeccf690","signature":false},{"version":"d2b015723474a1981eaa581d835d53f2a6e59b3c33f28e2d5fe08459b4cf68fc","signature":false},{"version":"67b8be76b22a893d74da5f86a438ca85269708ca3a4495f246564f4cbde39f68","signature":false},{"version":"36d5513aa7ec41d9f7e41c0b7b93dd398b4a6cbda4f5917b3bcf5f5873291d42","signature":false},{"version":"03aec1234c69606d5bc57cc60d3b2b82e18489f8a5564398efc3013223222483","signature":false},{"version":"2bbbfec331fb6d6e0e818afecbae1ec3e5c46912e6d0355b857549f0b4286771","signature":false},{"version":"e6969a02bc1cfaadf988797184526ca8337bddb03116f1f2f8767c67f7ba4db8","signature":false},{"version":"6e82d048f23c412db7e6bf937bc9eb60bc0fa5727648479880ef0c7868a2078c","signature":false},{"version":"fb182f950684afb96738d2bde5d4e21dc782f79477adee6d28e72bf0a7076f1c","signature":false},{"version":"a40165b625e7c52c815b024c5d5eccf947fbbe8f0826242b34d170fe986c6267","signature":false}],"options":{"allowSyntheticDefaultImports":true,"downlevelIteration":true,"experimentalDecorators":true,"jsx":2,"module":1,"outDir":"./","rootDir":"../src","strict":true,"target":99,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"fileIdsList":[[16],[3,4,5,6,7,8,9,10,11,12,16],[31],[18],[16,31],[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],[1,16],[2,13],[1,2,13,14,15]],"referencedMap":[[3,1],[5,1],[6,1],[7,1],[8,1],[9,1],[10,1],[4,1],[13,2],[12,1],[11,1],[18,3],[27,3],[29,1],[30,4],[19,3],[20,5],[21,3],[22,5],[23,5],[31,6],[17,5],[25,3],[2,7],[1,1],[14,8],[16,9],[32,3]],"exportedModulesMap":[]},"version":"2.0
|
1
|
+
{"program":{"fileNames":["../node_modules/@rbxts/types/include/generated/enums.d.ts","../node_modules/@rbxts/types/include/generated/None.d.ts","../node_modules/@rbxts/compiler-types/types/Array.d.ts","../node_modules/@rbxts/compiler-types/types/callMacros.d.ts","../node_modules/@rbxts/compiler-types/types/Iterable.d.ts","../node_modules/@rbxts/compiler-types/types/Map.d.ts","../node_modules/@rbxts/compiler-types/types/Promise.d.ts","../node_modules/@rbxts/compiler-types/types/Set.d.ts","../node_modules/@rbxts/compiler-types/types/String.d.ts","../node_modules/@rbxts/compiler-types/types/Symbol.d.ts","../node_modules/@rbxts/compiler-types/types/typeUtils.d.ts","../node_modules/@rbxts/compiler-types/types/eslintIgnore.d.ts","../node_modules/@rbxts/compiler-types/types/core.d.ts","../node_modules/@rbxts/types/include/lua.d.ts","../node_modules/@rbxts/types/include/macro_math.d.ts","../node_modules/@rbxts/types/include/roblox.d.ts","../node_modules/@rbxts/roact/src/jsx.d.ts","../node_modules/@rbxts/roact/src/Component.d.ts","../node_modules/@rbxts/roact/src/createContext.d.ts","../node_modules/@rbxts/roact/src/createElement.d.ts","../node_modules/@rbxts/roact/src/createFragment.d.ts","../node_modules/@rbxts/roact/src/createRef.d.ts","../node_modules/@rbxts/roact/src/forwardRef.d.ts","../node_modules/@rbxts/roact/src/None.d.ts","../node_modules/@rbxts/roact/src/oneChild.d.ts","../node_modules/@rbxts/roact/src/PropMarkers/Change.d.ts","../node_modules/@rbxts/roact/src/PropMarkers/Children.d.ts","../node_modules/@rbxts/roact/src/PropMarkers/Event.d.ts","../node_modules/@rbxts/roact/src/PropMarkers/Ref.d.ts","../node_modules/@rbxts/roact/src/PureComponent.d.ts","../node_modules/@rbxts/roact/src/index.d.ts","../src/client/roact/test.tsx","../node_modules/@rbxts/services/index.d.ts"],"fileInfos":[{"version":"31626e1a99cf059a27f9c31398d96ddc598daba29dc3d8ed8f96bb7c4a1a4a67","signature":false,"affectsGlobalScope":true},{"version":"ebbc1b41e9984217a1979915ca8a00df1e17177c8ae5ae21a416f2abf8ec06ab","signature":false,"affectsGlobalScope":true},{"version":"3b47168aabe50e0d22f10605c776e6e2a26d784054cfe3f8b546c2d0662b755e","signature":false,"affectsGlobalScope":true},{"version":"704d11b4c8895293fe8c9899ebc18ee08f85e14f30a4db5fac33ee4bfed92bad","signature":false,"affectsGlobalScope":true},{"version":"5d88b34dc8a3439278904ac69fdec3f3db8a7ffd9fa5137e14f2c4f1c44fe797","signature":false,"affectsGlobalScope":true},{"version":"dc1b61f860835066d3a9af55bf820477553d7722616b97b0367a880cb7ebbd26","signature":false,"affectsGlobalScope":true},{"version":"484cae989f7c31e611de69d55faa4ea69a99cba17e573ec9a526fdf926bd5f22","signature":false,"affectsGlobalScope":true},{"version":"11bb1fee0b30622b31921d08a73859b8fed36b282308abec5ed702dee1912358","signature":false,"affectsGlobalScope":true},{"version":"5485dc248a18e66f0011d65ae085d89cc91fbe2a98da86eeeb680a80433cbb97","signature":false,"affectsGlobalScope":true},{"version":"298c8b0e2a57743e99bf676971060de36ba6b71aa0b52b5b602b450e2ba6b261","signature":false,"affectsGlobalScope":true},{"version":"6303ada2847311f0bbaa0b4d0107182330bdc7ad8926634f156af51d3df9b81d","signature":false,"affectsGlobalScope":true},{"version":"542cd449b287485e890dbebb1249aa04b1babc3b5b5a1add5920069eaa4c5a93","signature":false,"affectsGlobalScope":true},{"version":"0cd5fc7760ca457e7625a4583e21d655f8a931b90219caad6e0ea91c8f5f290b","signature":false,"affectsGlobalScope":true},{"version":"6eec8bbe515287d2b042ccc2042e96ab1da0a00f589534554c459b771aa77b49","signature":false,"affectsGlobalScope":true},{"version":"de9fbcd34a5df96591bc51db40d087e8ae4c7062ec8a70a44635cf15f0a6464f","signature":false,"affectsGlobalScope":true},{"version":"c59970cdfb5009f362acb26ba0c078ecb8f34b5688de85232d0106e30c55c3b8","signature":false,"affectsGlobalScope":true},{"version":"32dcb0c03a0bc4c155132ae40d93c89369d4aaf8cc6b721d6b840b0556e5f196","signature":false,"affectsGlobalScope":true},{"version":"d9e7113cf8e2d4c7124eb3abb7012dcb42493beba3d0c308bbaa6b88f037e604","signature":false},{"version":"2bbddc5d2c6f4ac488c4c0073fdf72b020f9299e46a032d81b5730f7dda26918","signature":false},{"version":"e634d9e9d512a22c4409d66b3d75e1cc40b089b8c9c8f09e4506a91dff5a60f5","signature":false},{"version":"d73401f25507b155ea752d441085d891636cea0fdd1a37c33365d8a6823acd89","signature":false},{"version":"69d22ed88a35be30948ca7d5a6cf837a8140472853ce77d63054c95aa496a980","signature":false},{"version":"1100c393321847ad2c91bed4fc35f091c9deb3dfc72759f108f6e74ff39de464","signature":false},{"version":"80b85a1e46d83f9a18ba08988522679585a9282c59d0f60a300417b8eeccf690","signature":false},{"version":"d2b015723474a1981eaa581d835d53f2a6e59b3c33f28e2d5fe08459b4cf68fc","signature":false},{"version":"67b8be76b22a893d74da5f86a438ca85269708ca3a4495f246564f4cbde39f68","signature":false},{"version":"36d5513aa7ec41d9f7e41c0b7b93dd398b4a6cbda4f5917b3bcf5f5873291d42","signature":false},{"version":"03aec1234c69606d5bc57cc60d3b2b82e18489f8a5564398efc3013223222483","signature":false},{"version":"2bbbfec331fb6d6e0e818afecbae1ec3e5c46912e6d0355b857549f0b4286771","signature":false},{"version":"e6969a02bc1cfaadf988797184526ca8337bddb03116f1f2f8767c67f7ba4db8","signature":false},{"version":"6e82d048f23c412db7e6bf937bc9eb60bc0fa5727648479880ef0c7868a2078c","signature":false},{"version":"fb182f950684afb96738d2bde5d4e21dc782f79477adee6d28e72bf0a7076f1c","signature":false},{"version":"a40165b625e7c52c815b024c5d5eccf947fbbe8f0826242b34d170fe986c6267","signature":false}],"options":{"allowSyntheticDefaultImports":true,"downlevelIteration":true,"experimentalDecorators":true,"jsx":2,"module":1,"outDir":"./","rootDir":"../src","strict":true,"target":99,"tsBuildInfoFile":"./tsconfig.tsbuildinfo"},"fileIdsList":[[16],[3,4,5,6,7,8,9,10,11,12,16],[31],[18],[16,31],[16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],[1,16],[2,13],[1,2,13,14,15]],"referencedMap":[[3,1],[5,1],[6,1],[7,1],[8,1],[9,1],[10,1],[4,1],[13,2],[12,1],[11,1],[18,3],[27,3],[29,1],[30,4],[19,3],[20,5],[21,3],[22,5],[23,5],[31,6],[17,5],[25,3],[2,7],[1,1],[14,8],[16,9],[32,3]],"exportedModulesMap":[]},"version":"2.1.0-hash-6694ae3bfcb6442f9599993a20085983e8d051ad70664cfe1d585cd128a8d040"}
|
data/lib/RoGems.rb
CHANGED
data/lib/rogems/CLI.rb
CHANGED
@@ -150,8 +150,6 @@ module RoGems
|
|
150
150
|
case @options[:sub_command]
|
151
151
|
when "init"
|
152
152
|
@options[:init] = true
|
153
|
-
args = ARGV
|
154
|
-
args.shift
|
155
153
|
CLI::InitCommand.new(self)
|
156
154
|
else
|
157
155
|
@options[:dir] = @options[:sub_command]
|
@@ -188,14 +186,15 @@ module RoGems
|
|
188
186
|
|
189
187
|
def run_transpiler
|
190
188
|
elapsed = Benchmark.realtime do
|
191
|
-
|
189
|
+
project_dir = @options[:sub_command]
|
190
|
+
system("rbxtsc --project #{project_dir} --includePath #{File.join(project_dir, "ts_include")}") unless @options[:no_ts] || ROGEMS_CONFIG["UseTypeScript"] == false
|
192
191
|
@transpiler.transpile
|
193
192
|
end
|
194
193
|
if @options[:verbose] then
|
195
194
|
puts "Deleting excess files from rbxtsc"
|
196
195
|
end
|
197
196
|
Dir.glob("./out/**/*.rb").filter { |f| File.file?(f) }.each { |f| File.delete(f) }
|
198
|
-
puts "Compiled files successfully. (#{(elapsed).floor}s)"
|
197
|
+
puts "Compiled files successfully. (#{(elapsed < 1 ? elapsed * 1000 : elapsed).floor}#{elapsed < 1 ? "ms" : "s"})"
|
199
198
|
end
|
200
199
|
end
|
201
200
|
end
|
data/lib/rogems/CodeGenerator.rb
CHANGED
@@ -27,7 +27,7 @@ module RoGems
|
|
27
27
|
@literals = [:true, :false, :nil, :float, :int, :str, :sym, :array, :hash]
|
28
28
|
end
|
29
29
|
|
30
|
-
def destroy
|
30
|
+
def destroy # for testing purposes
|
31
31
|
@source = nil
|
32
32
|
@debug_mode = nil
|
33
33
|
@output = nil
|
@@ -47,9 +47,7 @@ module RoGems
|
|
47
47
|
|
48
48
|
root_node = Parser::Ruby30.parse(@source)
|
49
49
|
walk_ast(root_node)
|
50
|
-
|
51
|
-
puts root_node
|
52
|
-
end
|
50
|
+
puts root_node unless @debug_mode == false
|
53
51
|
@output
|
54
52
|
end
|
55
53
|
|
@@ -85,9 +83,9 @@ module RoGems
|
|
85
83
|
when :true, :false, :nil # literals
|
86
84
|
write(node.type.to_s)
|
87
85
|
when :float, :int
|
88
|
-
write(node.children
|
86
|
+
write(node.children.first.to_s)
|
89
87
|
when :str, :sym
|
90
|
-
content = node.children
|
88
|
+
content = node.children.first.to_s
|
91
89
|
write(self.quote_surround(content))
|
92
90
|
when :array
|
93
91
|
write("{")
|
@@ -121,7 +119,7 @@ module RoGems
|
|
121
119
|
write(" = ")
|
122
120
|
walk_ast(value)
|
123
121
|
when :if # control flow
|
124
|
-
add_end = extra_data
|
122
|
+
add_end = extra_data.first
|
125
123
|
condition, block, elseif = *node.children
|
126
124
|
is_nextif = !block.nil? && block.type == :next
|
127
125
|
if is_nextif then
|
@@ -179,7 +177,7 @@ module RoGems
|
|
179
177
|
walk_ast(max)
|
180
178
|
when :for
|
181
179
|
symbol, iterable, block = *node.children
|
182
|
-
var_name = symbol.type == :mlhs ? symbol.children.map { |s| s.children
|
180
|
+
var_name = symbol.type == :mlhs ? symbol.children.map { |s| s.children.first.to_s }.join(", ") : symbol.children.first.to_s
|
183
181
|
|
184
182
|
write("for #{iterable.type == :irange ? var_name : "_, " + var_name}")
|
185
183
|
if iterable.type == :irange then
|
@@ -225,7 +223,7 @@ module RoGems
|
|
225
223
|
when :class # class defs
|
226
224
|
class_def(node)
|
227
225
|
when :begin # blocks
|
228
|
-
explicit_no_return = extra_data
|
226
|
+
explicit_no_return = extra_data.first
|
229
227
|
node.children.each do |child|
|
230
228
|
has_aliased = has_aliased_method?(child)
|
231
229
|
if !explicit_no_return && child == node.children.last && ((child.type == :send && !is_assignment?(child)) || child.children[1] != :puts) && !@dont_return_nodes.include?(child.type) && !@return_later_nodes.include?(child.type) && !has_aliased then
|
@@ -235,8 +233,15 @@ module RoGems
|
|
235
233
|
walk_ast(child, *extra_data)
|
236
234
|
if child == node.children.last then
|
237
235
|
unless @return_later_nodes.include?(child.type) then return end
|
238
|
-
|
239
|
-
|
236
|
+
symbol = nil
|
237
|
+
case child.type
|
238
|
+
when :class
|
239
|
+
symbol = child.children.first.children[1]
|
240
|
+
else
|
241
|
+
symbol = child.children.first
|
242
|
+
end
|
243
|
+
self.newline
|
244
|
+
write("return #{symbol.to_s}")
|
240
245
|
end
|
241
246
|
end
|
242
247
|
unless child == node.children.last then
|
@@ -244,10 +249,10 @@ module RoGems
|
|
244
249
|
end
|
245
250
|
end
|
246
251
|
when :def # defs
|
247
|
-
set_args = extra_data
|
248
|
-
def_name = node.children
|
252
|
+
set_args = extra_data.first
|
253
|
+
def_name = node.children.first.to_s.gsub("?", "").gsub("!", "")
|
249
254
|
args = (set_args || node.children[1]).children
|
250
|
-
arg_list = args.map { |arg| arg.children
|
255
|
+
arg_list = args.map { |arg| arg.children.first }.join(", ")
|
251
256
|
block = node.children[2]
|
252
257
|
class_name = extra_data[4]
|
253
258
|
if def_name == :initialize then return end
|
@@ -265,7 +270,7 @@ module RoGems
|
|
265
270
|
when :block # lambdas
|
266
271
|
preceding, args_node, block = *node.children
|
267
272
|
has_aliased_method, aliased_methods = *has_aliased_method?(preceding)
|
268
|
-
args = args_node.children.map { |a| a.children
|
273
|
+
args = args_node.children.map { |a| a.children.first.is_a?(Parser::AST::Node) ? a.children.first.children.first.to_s : a.children.first.to_s }
|
269
274
|
walk_ast(preceding, nil, nil, true, preceding.children.last, args)
|
270
275
|
if has_aliased_method then
|
271
276
|
aliased_methods.each { |a| handle_aliased_suffix(a, block) }
|
@@ -278,7 +283,7 @@ module RoGems
|
|
278
283
|
write(")")
|
279
284
|
end
|
280
285
|
when :block_pass # passing fns
|
281
|
-
block = node.children
|
286
|
+
block = node.children.first
|
282
287
|
walk_ast(block)
|
283
288
|
when :masgn # multiple assignment
|
284
289
|
self.multiple_assign(node)
|
@@ -296,7 +301,7 @@ module RoGems
|
|
296
301
|
if val.is_a?(Parser::AST::Node)
|
297
302
|
walk_ast(val, *extra_data)
|
298
303
|
else
|
299
|
-
write(val.children
|
304
|
+
write(val.children.first.to_s)
|
300
305
|
end
|
301
306
|
when :lvasgn, :gvasgn # local var assignment
|
302
307
|
name, val = *node.children
|
@@ -304,17 +309,17 @@ module RoGems
|
|
304
309
|
if val.is_a?(Parser::AST::Node) then
|
305
310
|
walk_ast(val, *extra_data)
|
306
311
|
else
|
307
|
-
write(val.children
|
312
|
+
write(val.children.first.to_s)
|
308
313
|
end
|
309
314
|
when :cvasgn
|
310
|
-
class_name = extra_data
|
315
|
+
class_name = extra_data.first
|
311
316
|
self.instancevar_assign(node, "#{class_name}.")
|
312
317
|
when :ivasgn
|
313
|
-
var_name = node.children
|
314
|
-
readers, writers, accessors = *extra_data
|
315
|
-
readers.map! { |n| (n.is_a?(String) ? n : n.children[2].children
|
316
|
-
writers.map! { |n| (n.is_a?(String) ? n : n.children[2].children
|
317
|
-
accessors.map! { |n| (n.is_a?(String) ? n : n.children[2].children
|
318
|
+
var_name = node.children.first.to_s.gsub("@", "")
|
319
|
+
class_name, readers, writers, accessors = *extra_data
|
320
|
+
readers.map! { |n| (n.is_a?(String) ? n : n.children[2].children.first).to_s }
|
321
|
+
writers.map! { |n| (n.is_a?(String) ? n : n.children[2].children.first).to_s }
|
322
|
+
accessors.map! { |n| (n.is_a?(String) ? n : n.children[2].children.first).to_s }
|
318
323
|
location = self.get_v_location_name(var_name, readers, writers, accessors)
|
319
324
|
self.instancevar_assign(node, location)
|
320
325
|
when :lvar # variable indexing
|
@@ -388,8 +393,8 @@ module RoGems
|
|
388
393
|
dont_emit_function_check, not_function, is_block, block_method, block_args = *extra_data
|
389
394
|
is_assignment = is_assignment?(node)
|
390
395
|
op = is_op?(node.children[1].to_s)
|
391
|
-
first_child = node.children
|
392
|
-
is_send = !first_child.nil? && first_child.is_a?(Parser::AST::Node) && first_child.children.length > 0 && !first_child.children
|
396
|
+
first_child = node.children.first
|
397
|
+
is_send = !first_child.nil? && first_child.is_a?(Parser::AST::Node) && first_child.children.length > 0 && !first_child.children.first.nil? && first_child.children.first.is_a?(Parser::AST::Node) && (first_child.children.first.type == :send || first_child.children.first.type == :lvar)
|
393
398
|
child = node.children[node.children.length - 2]
|
394
399
|
next_child = node.children.last
|
395
400
|
guaranteed_function_call = is_guaranteed_function_call?(node, child, next_child)
|
@@ -532,12 +537,15 @@ module RoGems
|
|
532
537
|
write(node.children.last != child ? ", " : "")
|
533
538
|
when :int, :float, :true, :false, :send, :lvar
|
534
539
|
walk_ast(child, *extra_data)
|
540
|
+
when :cvar
|
535
541
|
when :ivar
|
536
|
-
var_name = child.children
|
537
|
-
readers, writers, accessors = *extra_data
|
538
|
-
readers.map! { |n| (n.is_a?(String) ? n : n.children[2].children
|
539
|
-
writers.map! { |n| (n.is_a?(String) ? n : n.children[2].children
|
540
|
-
accessors.map! { |n| (n.is_a?(String) ? n : n.children[2].children
|
542
|
+
var_name = child.children.first.to_s.gsub("@", "")
|
543
|
+
class_name, readers, writers, accessors, statics = *extra_data
|
544
|
+
readers.map! { |n| (n.is_a?(String) ? n : n.children[2].children.first).to_s }
|
545
|
+
writers.map! { |n| (n.is_a?(String) ? n : n.children[2].children.first).to_s }
|
546
|
+
accessors.map! { |n| (n.is_a?(String) ? n : n.children[2].children.first).to_s }
|
547
|
+
puts statics
|
548
|
+
statics.map! { |n| (n.is_a?(String) ? n : n.children[2].children.first).to_s }
|
541
549
|
location = self.get_v_location_name(var_name, readers, writers, accessors) || "private."
|
542
550
|
write(location + var_name)
|
543
551
|
when :const
|
@@ -546,12 +554,12 @@ module RoGems
|
|
546
554
|
write(".")
|
547
555
|
end
|
548
556
|
when :begin
|
549
|
-
handle_send_child(child, child.children
|
557
|
+
handle_send_child(child, child.children.first, idx, last_child == :puts)
|
550
558
|
when :block_pass
|
551
559
|
|
552
560
|
else
|
553
561
|
walk_ast(child, *extra_data)
|
554
|
-
# var_name = child.children
|
562
|
+
# var_name = child.children.first.to_s.strip
|
555
563
|
# write(var_name)
|
556
564
|
end
|
557
565
|
end
|
@@ -561,7 +569,7 @@ module RoGems
|
|
561
569
|
end
|
562
570
|
|
563
571
|
def primary_privates(inited_privates)
|
564
|
-
inited_privates.each do |var|
|
572
|
+
(inited_privates || []).each do |var|
|
565
573
|
instancevar_assign(var)
|
566
574
|
unless var == inited_privates.last then
|
567
575
|
self.newline
|
@@ -569,7 +577,7 @@ module RoGems
|
|
569
577
|
end
|
570
578
|
end
|
571
579
|
|
572
|
-
def class_initializer(class_name, class_block, initializer = nil, parent = nil, readers = nil, writers = nil, accessors = nil, inited_privates = nil)
|
580
|
+
def class_initializer(class_name, class_block, initializer = nil, parent = nil, readers = nil, writers = nil, accessors = nil, statics = nil, inited_privates = nil)
|
573
581
|
if initializer.nil? then
|
574
582
|
writeln(")")
|
575
583
|
end
|
@@ -580,7 +588,7 @@ module RoGems
|
|
580
588
|
res = []
|
581
589
|
if child.is_a?(Parser::AST::Node) && child.type == :super
|
582
590
|
vals = child.children.map do |a|
|
583
|
-
sym = a.type == :str ? self.quote_surround(a.children
|
591
|
+
sym = a.type == :str ? self.quote_surround(a.children.first) : a.children.first
|
584
592
|
end
|
585
593
|
vals.each { |c| res.push(c) }
|
586
594
|
res
|
@@ -629,7 +637,7 @@ module RoGems
|
|
629
637
|
primary_privates(inited_privates)
|
630
638
|
unless initializer.nil? then
|
631
639
|
initializer_block = initializer.children[2]
|
632
|
-
walk_ast(initializer_block, readers, writers, accessors)
|
640
|
+
walk_ast(initializer_block, class_name, readers, writers, accessors, statics)
|
633
641
|
end
|
634
642
|
|
635
643
|
self.newline
|
@@ -685,17 +693,17 @@ module RoGems
|
|
685
693
|
end
|
686
694
|
|
687
695
|
def get_class_initer_def(block)
|
688
|
-
initializer = block.children.filter { |def_node| def_node.type == :def && def_node.children
|
689
|
-
if initializer && initializer.children
|
696
|
+
initializer = block.children.filter { |def_node| def_node.type == :def && def_node.children.first == :initialize }.first
|
697
|
+
if initializer && initializer.children.first == :initialize then
|
690
698
|
initializer_args = initializer.children[1]
|
691
|
-
arg_list = initializer_args.children.map { |arg| arg.children
|
699
|
+
arg_list = initializer_args.children.map { |arg| arg.children.first }.join(", ")
|
692
700
|
write("#{arg_list})")
|
693
701
|
end
|
694
702
|
initializer
|
695
703
|
end
|
696
704
|
|
697
705
|
def class_def(node)
|
698
|
-
class_name = node.children
|
706
|
+
class_name = node.children.first.children[1].to_s
|
699
707
|
parent = node.children[1]
|
700
708
|
block = node.children[2]
|
701
709
|
|
@@ -708,7 +716,7 @@ module RoGems
|
|
708
716
|
@block -= 2
|
709
717
|
self.block
|
710
718
|
|
711
|
-
stmts = block.children.filter { |stmt| stmt.type == :cvasgn }
|
719
|
+
stmts = block.children.filter { |stmt| stmt.is_a?(Parser::AST::Node) && stmt.type == :cvasgn }
|
712
720
|
stmts.each do |stmt|
|
713
721
|
walk_ast(stmt, class_name)
|
714
722
|
self.newline
|
@@ -726,13 +734,14 @@ module RoGems
|
|
726
734
|
case block.type
|
727
735
|
when :begin
|
728
736
|
unless added_initializer then
|
729
|
-
readers = block.children.filter { |stmt| stmt.is_a?(Parser::AST::Node) && stmt.children[1] == :attr_reader }.map { |stmt| stmt.children[2].children
|
730
|
-
writers = block.children.filter { |stmt| stmt.is_a?(Parser::AST::Node) && stmt.children[1] == :attr_writer }.map { |stmt| stmt.children[2].children
|
737
|
+
readers = block.children.filter { |stmt| stmt.is_a?(Parser::AST::Node) && stmt.children[1] == :attr_reader }.map { |stmt| stmt.children[2].children.first.to_s }
|
738
|
+
writers = block.children.filter { |stmt| stmt.is_a?(Parser::AST::Node) && stmt.children[1] == :attr_writer }.map { |stmt| stmt.children[2].children.first.to_s }
|
731
739
|
accessors = block.children.filter { |stmt| stmt.is_a?(Parser::AST::Node) && stmt.children[1] == :attr_accessor }
|
740
|
+
statics = block.children.filter { |stmt| stmt.is_a?(Parser::AST::Node) && stmt.type == :cvasgn }
|
732
741
|
inited_privates = block.children.filter { |stmt| stmt.is_a?(Parser::AST::Node) && stmt.type == :ivasgn }
|
733
742
|
initializer = get_class_initer_def(block)
|
734
743
|
|
735
|
-
class_initializer(class_name, block, initializer, parent, readers, writers, accessors, inited_privates)
|
744
|
+
class_initializer(class_name, block, initializer, parent, readers, writers, accessors, statics, inited_privates)
|
736
745
|
added_initializer = true
|
737
746
|
end
|
738
747
|
when :send
|
@@ -749,7 +758,7 @@ module RoGems
|
|
749
758
|
end
|
750
759
|
|
751
760
|
def module_def(node)
|
752
|
-
module_name = node.children
|
761
|
+
module_name = node.children.first.children[1].to_s
|
753
762
|
block = node.children[1]
|
754
763
|
|
755
764
|
writeln("--moduledef")
|
@@ -760,7 +769,7 @@ module RoGems
|
|
760
769
|
|
761
770
|
unless block.nil? then
|
762
771
|
_, args, def_block = *block.children
|
763
|
-
new_block = block.updated(nil, ["#{module_name}:#{block.children
|
772
|
+
new_block = block.updated(nil, ["#{module_name}:#{block.children.first.to_s}".to_sym, args, def_block])
|
764
773
|
walk_ast(new_block)
|
765
774
|
end
|
766
775
|
|
@@ -792,13 +801,13 @@ module RoGems
|
|
792
801
|
added_keyword = true
|
793
802
|
write("local ")
|
794
803
|
end
|
795
|
-
var_name = name.children
|
804
|
+
var_name = name.children.first.to_s
|
796
805
|
write((name.type == :gvasgn ? var_name.gsub!("$", "") : var_name) + (name == names_node.children.last ? "" : ", "))
|
797
806
|
end
|
798
807
|
write(" = ")
|
799
808
|
|
800
809
|
vals_node.children.each do |val|
|
801
|
-
write(val.children
|
810
|
+
write(val.children.first.to_s + (val == vals_node.children.last ? "" : ", "))
|
802
811
|
end
|
803
812
|
end
|
804
813
|
|
@@ -834,7 +843,7 @@ module RoGems
|
|
834
843
|
end
|
835
844
|
|
836
845
|
def index_var(node)
|
837
|
-
write(node.children
|
846
|
+
write(node.children.first.to_s.strip)
|
838
847
|
end
|
839
848
|
end
|
840
849
|
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
{
|
2
|
+
"include": ["**/*.tsx"],
|
2
3
|
"compilerOptions": {
|
3
4
|
"allowSyntheticDefaultImports": true,
|
4
5
|
"downlevelIteration": true,
|
5
6
|
"jsx": "react",
|
6
7
|
"jsxFactory": "Roact.createElement",
|
7
|
-
"jsxFragmentFactory": "Roact.
|
8
|
+
"jsxFragmentFactory": "Roact.createFragment",
|
8
9
|
"module": "commonjs",
|
9
10
|
"moduleResolution": "Node",
|
10
11
|
"noLib": true,
|
data/rogems.config.yml
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# Run rbxtsc for .tsx files?
|
2
|
-
UseTypeScript:
|
2
|
+
UseTypeScript: true
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rogems
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- r-unic
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-02-
|
11
|
+
date: 2023-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -261,7 +261,7 @@ homepage: https://github.com/r-unic/rogems
|
|
261
261
|
licenses:
|
262
262
|
- MIT
|
263
263
|
metadata:
|
264
|
-
allowed_push_host: https://rubygems.org
|
264
|
+
allowed_push_host: https://rubygems.org
|
265
265
|
homepage_uri: https://github.com/r-unic/rogems
|
266
266
|
source_code_uri: https://github.com/r-unic/rogems
|
267
267
|
post_install_message:
|