A rule for removing duplicated numeric field in table
Luau and Lua have different behavior between numeric field in table for example:
Luau:
{ 1, [1] = "A" } -- { "A" }
{ [1] = "A", 1 } -- { 1 }
Lua:
{ 1, [1] = "A" } -- { 1 }
{ [1] = "A", 1 } -- { 1 }
I think Luau checks the orders of them while Lua always think array item is first than indexing. For easy understand, Luau is behaving
local a = { 1, [1] = "A" }
as
local a = { 1 }
a[1] = "A"
So, my idea is
local a = { 1, [1] = "A" }
local b = { [1] = "A", 1 }
into
local a = { "A" }
local b = { 1 }
I'm not sure what to name the rule, but it might help when transpiling Luau to Lua.
This Lua behavior isn't exclusive to numeric keys, this applies to any table key.
print({ ["a"] = 1, ["a"] = 2 }) --> { ["a"] = 2 }
-- Another example showing it applies to all keys (no matter the type).
local userdata = newproxy()
print({ [userdata] = 1, [userdata] = 2 }) --> { [Userdata(...)] = 2 }
Perhaps it could be called "remove_duplicate_table_keys"?
This Lua behavior isn't exclusive to numeric keys, this applies to any table key.
print({ ["a"] = 1, ["a"] = 2 }) --> { ["a"] = 2 } -- Another example showing it applies to all keys (no matter the type). local userdata = newproxy() print({ [userdata] = 1, [userdata] = 2 }) --> { [Userdata(...)] = 2 }Perhaps it could be called "remove_duplicate_table_keys"?
You are correct. So I named it remove_redeclared_keys in my fork implementation.
I'll close this issue as I don't really see the value of this transform. I think it's too much relying on runtime-specific details. A linter could also warn about this kind of code since it's a bit confusing for readers of code like that.