@@ -58,6 +58,9 @@ function Unparser:isValidIdentifier(source)
5858 if (string.find (source , self .numberPattern )) then
5959 return false ;
6060 end
61+ if self .keywordsLookup [source ] then
62+ return false ;
63+ end
6164 return # source > 0 ;
6265end
6366
@@ -117,12 +120,19 @@ function Unparser:unparseBlock(block, tabbing)
117120 for i , statement in ipairs (block .statements ) do
118121 if (statement .kind ~= AstKind .NopStatement ) then
119122 local statementCode = self :unparseStatement (statement , tabbing );
120- if (# code > 0 and string.sub (statementCode , 1 , 1 ) == " (" ) then
123+ if (not self . prettyPrint and # code > 0 and string.sub (statementCode , 1 , 1 ) == " (" ) then
121124 -- This is so that the following works:
122125 -- print("Test");(function() print("Test2") end)();
123126 statementCode = " ;" .. statementCode ;
124127 end
125- code = code .. self :whitespaceIfNeeded2 (code , self :whitespaceIfNeeded (statementCode , self :newline (true ))) .. statementCode ;
128+ local ws = self :whitespaceIfNeeded2 (code , self :whitespaceIfNeeded (statementCode , self :newline (true )));
129+ if i ~= 1 then
130+ code = code .. ws ;
131+ end
132+ if (self .prettyPrint ) then
133+ statementCode = statementCode .. " ;"
134+ end
135+ code = code .. statementCode ;
126136 end
127137 end
128138
@@ -145,7 +155,7 @@ function Unparser:unparseStatement(statement, tabbing)
145155 elseif (statement .kind == AstKind .DoStatement ) then
146156 local bodyCode = self :unparseBlock (statement .body , tabbing );
147157 code = " do" .. self :whitespaceIfNeeded (bodyCode , self :newline (true ))
148- .. bodyCode
158+ .. bodyCode .. self : newline ( false )
149159 .. self :whitespaceIfNeeded2 (bodyCode , self :tabs (tabbing , true )) .. " end" ;
150160
151161 -- While Statement
@@ -157,7 +167,7 @@ function Unparser:unparseStatement(statement, tabbing)
157167
158168 code = " while" .. self :whitespaceIfNeeded (expressionCode ) .. expressionCode .. self :whitespaceIfNeeded2 (expressionCode )
159169 .. " do" .. self :whitespaceIfNeeded (bodyCode , self :newline (true ))
160- .. bodyCode
170+ .. bodyCode .. self : newline ( false )
161171 .. self :whitespaceIfNeeded2 (bodyCode , self :tabs (tabbing , true )) .. " end" ;
162172
163173 -- Repeat Until Statement
@@ -181,7 +191,7 @@ function Unparser:unparseStatement(statement, tabbing)
181191
182192 local incrementByCode = statement .incrementBy and self :unparseExpression (statement .incrementBy , tabbing ) or " 1" ;
183193 code = code .. self :optionalWhitespace () .. incrementByCode .. self :whitespaceIfNeeded2 (incrementByCode ) .. " do" .. self :whitespaceIfNeeded (bodyCode , self :newline (true ))
184- .. bodyCode
194+ .. bodyCode .. self : newline ( false )
185195 .. self :whitespaceIfNeeded2 (bodyCode , self :tabs (tabbing , true )) .. " end" ;
186196
187197
@@ -208,7 +218,7 @@ function Unparser:unparseStatement(statement, tabbing)
208218
209219 local bodyCode = self :unparseBlock (statement .body , tabbing );
210220 code = code .. self :whitespaceIfNeeded2 (code ) .. " do" .. self :whitespaceIfNeeded (bodyCode , self :newline (true ))
211- .. bodyCode
221+ .. bodyCode .. self : newline ( false )
212222 .. self :whitespaceIfNeeded2 (bodyCode , self :tabs (tabbing , true )) .. " end" ;
213223
214224
@@ -223,18 +233,18 @@ function Unparser:unparseStatement(statement, tabbing)
223233 for i , eif in ipairs (statement .elseifs ) do
224234 exprcode = self :unparseExpression (eif .condition , tabbing );
225235 bodyCode = self :unparseBlock (eif .body , tabbing );
226- code = code .. self :whitespaceIfNeeded2 (code , self :tabs (tabbing , true )) .. " elseif" .. self :whitespaceIfNeeded (exprcode ) .. exprcode .. self :whitespaceIfNeeded2 (exprcode )
236+ code = code .. self :newline ( false ) .. self : whitespaceIfNeeded2 (code , self :tabs (tabbing , true )) .. " elseif" .. self :whitespaceIfNeeded (exprcode ) .. exprcode .. self :whitespaceIfNeeded2 (exprcode )
227237 .. " then" .. self :whitespaceIfNeeded (bodyCode , self :newline (true ))
228238 .. bodyCode ;
229239 end
230240
231241 if (statement .elsebody ) then
232242 bodyCode = self :unparseBlock (statement .elsebody , tabbing );
233- code = code .. self :whitespaceIfNeeded2 (code , self :tabs (tabbing , true )) .. " else" .. self :whitespaceIfNeeded (bodyCode , self :newline (true ))
243+ code = code .. self :newline ( false ) .. self : whitespaceIfNeeded2 (code , self :tabs (tabbing , true )) .. " else" .. self :whitespaceIfNeeded (bodyCode , self :newline (true ))
234244 .. bodyCode ;
235245 end
236246
237- code = code .. self :whitespaceIfNeeded2 (bodyCode , self :tabs (tabbing , true )) .. " end" ;
247+ code = code .. self :newline ( false ) .. self : whitespaceIfNeeded2 (bodyCode , self :tabs (tabbing , true )) .. " end" ;
238248
239249
240250 -- Function Declaration
@@ -259,7 +269,7 @@ function Unparser:unparseStatement(statement, tabbing)
259269 code = code .. " )" ;
260270
261271 local bodyCode = self :unparseBlock (statement .body , tabbing );
262- code = code .. self :newline (false ) .. self : tabs ( tabbing ) .. bodyCode .. self :whitespaceIfNeeded2 (bodyCode , self :tabs (tabbing , true )) .. " end" ;
272+ code = code .. self :newline (false ) .. bodyCode .. self : newline ( false ) .. self :whitespaceIfNeeded2 (bodyCode , self :tabs (tabbing , true )) .. " end" ;
263273
264274
265275 -- Local Function Declaration
@@ -280,7 +290,7 @@ function Unparser:unparseStatement(statement, tabbing)
280290 code = code .. " )" ;
281291
282292 local bodyCode = self :unparseBlock (statement .body , tabbing );
283- code = code .. self :newline (false ) .. self : tabs ( tabbing ) .. bodyCode .. self :whitespaceIfNeeded2 (bodyCode , self :tabs (tabbing , true )) .. " end" ;
293+ code = code .. self :newline (false ) .. bodyCode .. self : newline ( false ) .. self :whitespaceIfNeeded2 (bodyCode , self :tabs (tabbing , true )) .. " end" ;
284294
285295 -- Local Variable Declaration
286296 elseif (statement .kind == AstKind .LocalVariableDeclaration ) then
@@ -292,16 +302,14 @@ function Unparser:unparseStatement(statement, tabbing)
292302 end
293303 code = code .. statement .scope :getVariableName (id );
294304 end
295-
296- code = code .. self :optionalWhitespace ();
297-
305+
298306 if (# statement .expressions > 0 ) then
299- code = code .. " =" .. self :optionalWhitespace ();
307+ code = code .. self : optionalWhitespace () .. " =" .. self :optionalWhitespace ();
300308 for i , expr in ipairs (statement .expressions ) do
301309 if i > 1 then
302310 code = code .. " ," .. self :optionalWhitespace ();
303311 end
304- code = code .. self :unparseExpression (expr , tabbing );
312+ code = code .. self :unparseExpression (expr , tabbing + 1 );
305313 end
306314 end
307315 -- Function Call Statement
@@ -359,7 +367,7 @@ function Unparser:unparseStatement(statement, tabbing)
359367 if i > 1 then
360368 code = code .. " ," .. self :optionalWhitespace ();
361369 end
362- code = code .. self :unparseExpression (expr , tabbing );
370+ code = code .. self :unparseExpression (expr , tabbing + 1 );
363371 end
364372
365373 -- Return Statement
@@ -715,9 +723,7 @@ function Unparser:unparseExpression(expression, tabbing)
715723
716724 -- Identifier Indexing e.g: x.y instead of x["y"];
717725 if (expression .index .kind == AstKind .StringExpression and self :isValidIdentifier (expression .index .value )) then
718- if (not self .keywordsLookup [expression .index .value ]) then
719- return base .. " ." .. expression .index .value ;
720- end
726+ return base .. " ." .. expression .index .value ;
721727 end
722728
723729 -- Index never needs parens
@@ -772,7 +778,7 @@ function Unparser:unparseExpression(expression, tabbing)
772778
773779 k = AstKind .FunctionLiteralExpression ;
774780 if (expression .kind == k ) then
775- code = " function" .. self : optionalWhitespace () .. " (" ;
781+ code = " function" .. " (" ;
776782
777783 for i , arg in ipairs (expression .args ) do
778784 if i > 1 then
@@ -787,21 +793,31 @@ function Unparser:unparseExpression(expression, tabbing)
787793 code = code .. " )" ;
788794
789795 local bodyCode = self :unparseBlock (expression .body , tabbing );
790- code = code .. self :newline (false ) .. self : tabs ( tabbing ) .. bodyCode .. self :whitespaceIfNeeded2 (bodyCode , self :tabs (tabbing , true )) .. " end" ;
796+ code = code .. self :newline (false ) .. bodyCode .. self : newline ( false ) .. self :whitespaceIfNeeded2 (bodyCode , self :tabs (tabbing , true )) .. " end" ;
791797 return code ;
792798 end
793799
794800 k = AstKind .TableConstructorExpression ;
795801 if (expression .kind == k ) then
802+ if (# expression .entries == 0 ) then return " {}" end ;
803+
804+ local inlineTable = # expression .entries <= 3 ;
796805 local tableTabbing = tabbing + 1 ;
797806
798- code = " {" .. self :optionalWhitespace (self :newline () .. self :tabs (tableTabbing ));
807+ code = " {" ;
808+ if inlineTable then
809+ code = code .. self :optionalWhitespace ();
810+ else
811+ code = code .. self :optionalWhitespace (self :newline () .. self :tabs (tableTabbing ));
812+ end
799813
800814 local p = false ;
801815 for i , entry in ipairs (expression .entries ) do
802816 p = true ;
803- if i > 1 then
817+ if i > 1 and not inlineTable then
804818 code = code .. " ," .. self :optionalWhitespace (self :newline () .. self :tabs (tableTabbing ));
819+ elseif i > 1 then
820+ code = code .. " ," .. self :optionalWhitespace ();
805821 end
806822 if (entry .kind == AstKind .KeyedTableEntry ) then
807823 if (entry .key .kind == AstKind .StringExpression and self :isValidIdentifier (entry .key .value )) then
@@ -814,6 +830,10 @@ function Unparser:unparseExpression(expression, tabbing)
814830 code = code .. self :unparseExpression (entry .value , tableTabbing );
815831 end
816832 end
833+
834+ if inlineTable then
835+ return code .. self :optionalWhitespace () .. " }" ;
836+ end
817837
818838 return code .. self :optionalWhitespace ((p and " ," or " " ) .. self :newline () .. self :tabs (tabbing )) .. " }" ;
819839 end
0 commit comments