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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 178c5911c59958b2a647c17c25bee611c102dd207169bda9cc200bf830cf9d72
4
- data.tar.gz: 95fdfc9c4abb7bdb594bcf19ab43da13a72ae669ff8b64d8f3b47d7095296349
3
+ metadata.gz: 5cdb90bfc49948a723fea85fa8a4f668eedfbfd4fb3d476d0ed67bdd21f34cfc
4
+ data.tar.gz: 3ee365a5f93d7fc282dd58f5bdc260f7193feae52cd970c4564fcf1922aad2c5
5
5
  SHA512:
6
- metadata.gz: 74c1cad4a1ce5dad25b7a76944f98237a253535f4a0c1ed855b1da1eed8180b7d8f6e0c33ed36983eb328d408e388ae57b701bdd5bc7c9c4c7b70f529af6f99b
7
- data.tar.gz: 68d290a5b727add9854e2b5e7a1ef9b274bd9e06edb13562f5f0252fe0cb7fc6018d5440c39a648ba3fca40cbf93131d8d2991fd5652a98ab52b425bf2f71e5a
6
+ metadata.gz: d5bbebd382591ace5e784a6c89160d3b7b4aa053151057c9b16fdb2d2a23bcd54615760c9bc3a2afb0b3b3d8f0fa472e3d87bc3ee1a12196379e0392d99baa1c
7
+ data.tar.gz: da7cf3c3f20babad5f6c840866d04b1ef1e05b1c3bb85b2c3fedcb61dacced993be475aa966e84125d2fcb3387d0094b5b80f4fb48960c8550427cc8439cca87
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rogems (1.0.3)
4
+ rogems (1.0.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
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 Entity = {} do
5
- function Entity.new()
4
+ local Dog = {} do
5
+ function Dog.new()
6
6
  local include = {}
7
- local idxMeta = setmetatable(Entity, { __index = {} })
8
- idxMeta.__type = "Entity"
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
- self.private.position = 0
22
- self.private.health = 100
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 Entity[k]
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 Player = {} do
47
- function Player.new(name)
87
+ local Counter = {} do
88
+ Counter.count = 0
89
+ function Counter.new()
48
90
  local include = {}
49
- local idxMeta = setmetatable(Player, { __index = Entity.new() })
50
- idxMeta.__type = "Player"
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
- self.attr_accessor.name = name
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 Player[k]
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
- local plr = Player.new("John")
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 Entity
2
- attr_accessor :position, :health
3
- @position = 0
4
- @health = 100
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
- class Player < Entity
8
- attr_accessor :name
9
- attr_reader :id, :character
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
- def initialize(name)
12
- @name = name
13
- @id = 1
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
- plr = Player.new("John")
24
- plr.kill
25
- puts plr.health
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
@@ -11,7 +11,7 @@
11
11
  "Common": {
12
12
  "$path": "out/shared"
13
13
  },
14
- "RB_Include": {
14
+ "RB_Include": {
15
15
  "$path": "rb_include"
16
16
  },
17
17
  "TS_Include": {
@@ -1,4 +1,4 @@
1
- -- Compiled with roblox-ts v2.0.4
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.4-hash-b7820dcb19064b9e18e7fcaf3df63e8355f399c5344265e0ab305dcff28add40"}
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"}
@@ -1,4 +1,5 @@
1
1
  {
2
+ "include": ["**/*.tsx"],
2
3
  "compilerOptions": {
3
4
  "allowSyntheticDefaultImports": true,
4
5
  "downlevelIteration": true,
data/lib/RoGems.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), "rogems")
2
2
  require "yaml"
3
3
  require "CLI"
4
- require "rogems/compiler_types"
5
4
 
6
5
  module RoGems
7
6
  CONFIG_PATH = File.join(File.dirname(__FILE__), "../rogems.config.yml")
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
- system("rbxtsc --includePath ts_include") unless @options[:no_ts] || ROGEMS_CONFIG["UseTypeScript"] == false
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
@@ -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
- if @debug_mode then
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[0].to_s)
86
+ write(node.children.first.to_s)
89
87
  when :str, :sym
90
- content = node.children[0].to_s
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[0]
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[0].to_s }.join(", ") : symbol.children[0].to_s
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[0]
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
- puts child
239
- write("return #{}")
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[0]
248
- def_name = node.children[0].to_s.gsub("?", "").gsub("!", "")
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[0] }.join(", ")
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[0].is_a?(Parser::AST::Node) ? a.children[0].children[0].to_s : a.children[0].to_s }
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[0]
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[0].to_s)
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[0].to_s)
312
+ write(val.children.first.to_s)
308
313
  end
309
314
  when :cvasgn
310
- class_name = extra_data[0]
315
+ class_name = extra_data.first
311
316
  self.instancevar_assign(node, "#{class_name}.")
312
317
  when :ivasgn
313
- var_name = node.children[0].to_s.gsub("@", "")
314
- readers, writers, accessors = *extra_data
315
- readers.map! { |n| (n.is_a?(String) ? n : n.children[2].children[0]).to_s }
316
- writers.map! { |n| (n.is_a?(String) ? n : n.children[2].children[0]).to_s }
317
- accessors.map! { |n| (n.is_a?(String) ? n : n.children[2].children[0]).to_s }
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[0]
392
- is_send = !first_child.nil? && first_child.is_a?(Parser::AST::Node) && first_child.children.length > 0 && !first_child.children[0].nil? && first_child.children[0].is_a?(Parser::AST::Node) && (first_child.children[0].type == :send || first_child.children[0].type == :lvar)
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[0].to_s.gsub("@", "")
537
- readers, writers, accessors = *extra_data
538
- readers.map! { |n| (n.is_a?(String) ? n : n.children[2].children[0]).to_s }
539
- writers.map! { |n| (n.is_a?(String) ? n : n.children[2].children[0]).to_s }
540
- accessors.map! { |n| (n.is_a?(String) ? n : n.children[2].children[0]).to_s }
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[0], idx, last_child == :puts)
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[0].to_s.strip
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[0]) : a.children[0]
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[0] == :initialize }[0]
689
- if initializer && initializer.children[0] == :initialize then
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[0] }.join(", ")
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[0].children[1].to_s
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[0].to_s }
730
- writers = block.children.filter { |stmt| stmt.is_a?(Parser::AST::Node) && stmt.children[1] == :attr_writer }.map { |stmt| stmt.children[2].children[0].to_s }
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[0].children[1].to_s
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[0].to_s}".to_sym, args, def_block])
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[0].to_s
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[0].to_s + (val == vals_node.children.last ? "" : ", "))
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[0].to_s.strip)
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.Fragment",
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: false
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
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-01 00:00:00.000000000 Z
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: