darklua icon indicating copy to clipboard operation
darklua copied to clipboard

Add `remove_generalized_iteration` rule

Open jiwonz opened this issue 1 year ago • 0 comments

Closes #203

Examples

Input

for i,v in {1,2,3} do
	print(i,v)
end

Output

do local _DARKLUA_REMOVE_GENERALIZED_ITERATION_iterdf0c36eb99574eba, _DARKLUA_REMOVE_GENERALIZED_ITERATION_invardf0c36eb99574eba, _DARKLUA_REMOVE_GENERALIZED_ITERATION_controldf0c36eb99574eba={1,2,3} if type(_DARKLUA_REMOVE_GENERALIZED_ITERATION_iterdf0c36eb99574eba)=='table'then local _m=getmetatable(_DARKLUA_REMOVE_GENERALIZED_ITERATION_iterdf0c36eb99574eba)if type(_m)=='table'and type(_m.__iter)=='function'then _DARKLUA_REMOVE_GENERALIZED_ITERATION_iterdf0c36eb99574eba, _DARKLUA_REMOVE_GENERALIZED_ITERATION_invardf0c36eb99574eba, _DARKLUA_REMOVE_GENERALIZED_ITERATION_controldf0c36eb99574eba=_m.__iter()else _DARKLUA_REMOVE_GENERALIZED_ITERATION_iterdf0c36eb99574eba, _DARKLUA_REMOVE_GENERALIZED_ITERATION_invardf0c36eb99574eba, _DARKLUA_REMOVE_GENERALIZED_ITERATION_controldf0c36eb99574eba=pairs(_DARKLUA_REMOVE_GENERALIZED_ITERATION_iterdf0c36eb99574eba)end end for i,v in _DARKLUA_REMOVE_GENERALIZED_ITERATION_iterdf0c36eb99574eba,_DARKLUA_REMOVE_GENERALIZED_ITERATION_invardf0c36eb99574eba,_DARKLUA_REMOVE_GENERALIZED_ITERATION_controldf0c36eb99574eba do
	print(i,v)
end
end

Notes

  • Hash function blake3 was used
  • Adds RuntimeIdentifier public struct which is for injecting variables in runtime
  • Adds GenericFor.mutate_expressions()

Limitations (Notes from #203)

  1. Using pairs(input) does not necessarily conform to the order of Luau generic iteration (for example, consecutive array indices starting from 1 go first)
  2. Doesn't handle iterating over userdata (with __iter defined), which is supported by Luau
  3. There may also be issues with accessing __iter if __metatable is set

Credits

  • Thanks for @sircfenner (original issue post: #203) for the convention idea.

TO-DOs

  • [x] Add tests (btw, the output was tested in lua5.3)

jiwonz avatar Sep 27 '24 03:09 jiwonz