Compare commits
	
		
			6 Commits
		
	
	
		
			franknoiro
			...
			achalmers/
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| dec538590a | |||
| 9523eef52c | |||
| 20ae39dec3 | |||
| 8ebba16796 | |||
| 038de47e5d | |||
| 61563bee97 | 
| @ -20,7 +20,7 @@ describe('testing AST', () => { | ||||
|             type: 'Literal', | ||||
|             start: 0, | ||||
|             end: 1, | ||||
|             value: 5, | ||||
|             value: { type: 'i_integer', data: 5 }, | ||||
|             raw: '5', | ||||
|           }, | ||||
|           operator: '+', | ||||
| @ -28,7 +28,7 @@ describe('testing AST', () => { | ||||
|             type: 'Literal', | ||||
|             start: 3, | ||||
|             end: 4, | ||||
|             value: 6, | ||||
|             value: { type: 'i_integer', data: 6 }, | ||||
|             raw: '6', | ||||
|           }, | ||||
|         }, | ||||
| @ -58,7 +58,7 @@ describe('testing AST', () => { | ||||
|               type: 'Literal', | ||||
|               start: 14, | ||||
|               end: 15, | ||||
|               value: 5, | ||||
|               value: { type: 'i_integer', data: 5 }, | ||||
|               raw: '5', | ||||
|             }, | ||||
|           }, | ||||
| @ -92,7 +92,7 @@ const newVar = myVar + 1 | ||||
|               type: 'Literal', | ||||
|               start: 14, | ||||
|               end: 15, | ||||
|               value: 5, | ||||
|               value: { type: 'i_integer', data: 5 }, | ||||
|               raw: '5', | ||||
|             }, | ||||
|           }, | ||||
| @ -129,7 +129,7 @@ const newVar = myVar + 1 | ||||
|                 type: 'Literal', | ||||
|                 start: 39, | ||||
|                 end: 40, | ||||
|                 value: 1, | ||||
|                 value: { type: 'i_integer', data: 1 }, | ||||
|                 raw: '1', | ||||
|               }, | ||||
|             }, | ||||
| @ -320,14 +320,14 @@ const myVar = funcN(1, 2)` | ||||
|                   type: 'Literal', | ||||
|                   start: 58, | ||||
|                   end: 59, | ||||
|                   value: 1, | ||||
|                   value: { data: 1, type: 'i_integer' }, | ||||
|                   raw: '1', | ||||
|                 }, | ||||
|                 { | ||||
|                   type: 'Literal', | ||||
|                   start: 61, | ||||
|                   end: 62, | ||||
|                   value: 2, | ||||
|                   value: { data: 2, type: 'i_integer' }, | ||||
|                   raw: '2', | ||||
|                 }, | ||||
|               ], | ||||
| @ -390,14 +390,14 @@ describe('testing pipe operator special', () => { | ||||
|                           type: 'Literal', | ||||
|                           start: 32, | ||||
|                           end: 33, | ||||
|                           value: 0, | ||||
|                           value: { type: 'i_integer', data: 0 }, | ||||
|                           raw: '0', | ||||
|                         }, | ||||
|                         { | ||||
|                           type: 'Literal', | ||||
|                           start: 35, | ||||
|                           end: 36, | ||||
|                           value: 0, | ||||
|                           value: { type: 'i_integer', data: 0 }, | ||||
|                           raw: '0', | ||||
|                         }, | ||||
|                       ], | ||||
| @ -426,14 +426,14 @@ describe('testing pipe operator special', () => { | ||||
|                           type: 'Literal', | ||||
|                           start: 52, | ||||
|                           end: 53, | ||||
|                           value: 2, | ||||
|                           value: { type: 'i_integer', data: 2 }, | ||||
|                           raw: '2', | ||||
|                         }, | ||||
|                         { | ||||
|                           type: 'Literal', | ||||
|                           start: 55, | ||||
|                           end: 56, | ||||
|                           value: 3, | ||||
|                           value: { type: 'i_integer', data: 3 }, | ||||
|                           raw: '3', | ||||
|                         }, | ||||
|                       ], | ||||
| @ -478,14 +478,14 @@ describe('testing pipe operator special', () => { | ||||
|                                 type: 'Literal', | ||||
|                                 start: 81, | ||||
|                                 end: 82, | ||||
|                                 value: 0, | ||||
|                                 value: { type: 'i_integer', data: 0 }, | ||||
|                                 raw: '0', | ||||
|                               }, | ||||
|                               { | ||||
|                                 type: 'Literal', | ||||
|                                 start: 84, | ||||
|                                 end: 85, | ||||
|                                 value: 1, | ||||
|                                 value: { type: 'i_integer', data: 1 }, | ||||
|                                 raw: '1', | ||||
|                               }, | ||||
|                             ], | ||||
| @ -505,7 +505,7 @@ describe('testing pipe operator special', () => { | ||||
|                             type: 'Literal', | ||||
|                             start: 93, | ||||
|                             end: 101, | ||||
|                             value: 'myPath', | ||||
|                             value: { type: 'string', data: 'myPath' }, | ||||
|                             raw: '"myPath"', | ||||
|                           }, | ||||
|                         }, | ||||
| @ -536,14 +536,14 @@ describe('testing pipe operator special', () => { | ||||
|                           type: 'Literal', | ||||
|                           start: 121, | ||||
|                           end: 122, | ||||
|                           value: 1, | ||||
|                           value: { type: 'i_integer', data: 1 }, | ||||
|                           raw: '1', | ||||
|                         }, | ||||
|                         { | ||||
|                           type: 'Literal', | ||||
|                           start: 124, | ||||
|                           end: 125, | ||||
|                           value: 1, | ||||
|                           value: { type: 'i_integer', data: 1 }, | ||||
|                           raw: '1', | ||||
|                         }, | ||||
|                       ], | ||||
| @ -568,7 +568,7 @@ describe('testing pipe operator special', () => { | ||||
|                       type: 'Literal', | ||||
|                       start: 139, | ||||
|                       end: 141, | ||||
|                       value: 45, | ||||
|                       value: { type: 'i_integer', data: 45 }, | ||||
|                       raw: '45', | ||||
|                     }, | ||||
|                     { type: 'PipeSubstitution', start: 143, end: 144 }, | ||||
| @ -619,7 +619,7 @@ describe('testing pipe operator special', () => { | ||||
|                     type: 'Literal', | ||||
|                     start: 14, | ||||
|                     end: 15, | ||||
|                     value: 5, | ||||
|                     value: { type: 'i_integer', data: 5 }, | ||||
|                     raw: '5', | ||||
|                   }, | ||||
|                   operator: '+', | ||||
| @ -627,7 +627,7 @@ describe('testing pipe operator special', () => { | ||||
|                     type: 'Literal', | ||||
|                     start: 18, | ||||
|                     end: 19, | ||||
|                     value: 6, | ||||
|                     value: { type: 'i_integer', data: 6 }, | ||||
|                     raw: '6', | ||||
|                   }, | ||||
|                 }, | ||||
| @ -646,7 +646,7 @@ describe('testing pipe operator special', () => { | ||||
|                       type: 'Literal', | ||||
|                       start: 30, | ||||
|                       end: 32, | ||||
|                       value: 45, | ||||
|                       value: { type: 'i_integer', data: 45 }, | ||||
|                       raw: '45', | ||||
|                     }, | ||||
|                     { | ||||
| @ -696,14 +696,14 @@ describe('testing pipe operator special', () => { | ||||
|                   type: 'Literal', | ||||
|                   start: 12, | ||||
|                   end: 13, | ||||
|                   value: 1, | ||||
|                   value: { type: 'i_integer', data: 1 }, | ||||
|                   raw: '1', | ||||
|                 }, | ||||
|                 { | ||||
|                   type: 'Literal', | ||||
|                   start: 15, | ||||
|                   end: 18, | ||||
|                   value: '2', | ||||
|                   value: { type: 'string', data: '2' }, | ||||
|                   raw: "'2'", | ||||
|                 }, | ||||
|                 { | ||||
| @ -720,7 +720,7 @@ describe('testing pipe operator special', () => { | ||||
|                     type: 'Literal', | ||||
|                     start: 27, | ||||
|                     end: 28, | ||||
|                     value: 4, | ||||
|                     value: { type: 'i_integer', data: 4 }, | ||||
|                     raw: '4', | ||||
|                   }, | ||||
|                   operator: '+', | ||||
| @ -728,7 +728,7 @@ describe('testing pipe operator special', () => { | ||||
|                     type: 'Literal', | ||||
|                     start: 31, | ||||
|                     end: 32, | ||||
|                     value: 5, | ||||
|                     value: { type: 'i_integer', data: 5 }, | ||||
|                     raw: '5', | ||||
|                   }, | ||||
|                 }, | ||||
| @ -766,7 +766,7 @@ describe('testing pipe operator special', () => { | ||||
|               type: 'Literal', | ||||
|               start: 14, | ||||
|               end: 15, | ||||
|               value: 3, | ||||
|               value: { type: 'i_integer', data: 3 }, | ||||
|               raw: '3', | ||||
|             }, | ||||
|           }, | ||||
| @ -807,7 +807,7 @@ describe('testing pipe operator special', () => { | ||||
|                     type: 'Literal', | ||||
|                     start: 34, | ||||
|                     end: 39, | ||||
|                     value: 'str', | ||||
|                     value: { type: 'string', data: 'str' }, | ||||
|                     raw: "'str'", | ||||
|                   }, | ||||
|                 }, | ||||
| @ -825,7 +825,7 @@ describe('testing pipe operator special', () => { | ||||
|                     type: 'Literal', | ||||
|                     start: 47, | ||||
|                     end: 48, | ||||
|                     value: 2, | ||||
|                     value: { type: 'i_integer', data: 2 }, | ||||
|                     raw: '2', | ||||
|                   }, | ||||
|                 }, | ||||
| @ -864,7 +864,7 @@ describe('testing pipe operator special', () => { | ||||
|                       type: 'Literal', | ||||
|                       start: 77, | ||||
|                       end: 78, | ||||
|                       value: 4, | ||||
|                       value: { type: 'i_integer', data: 4 }, | ||||
|                       raw: '4', | ||||
|                     }, | ||||
|                     operator: '+', | ||||
| @ -872,7 +872,7 @@ describe('testing pipe operator special', () => { | ||||
|                       type: 'Literal', | ||||
|                       start: 81, | ||||
|                       end: 82, | ||||
|                       value: 5, | ||||
|                       value: { type: 'i_integer', data: 5 }, | ||||
|                       raw: '5', | ||||
|                     }, | ||||
|                   }, | ||||
| @ -940,7 +940,7 @@ describe('testing pipe operator special', () => { | ||||
|                           type: 'Literal', | ||||
|                           start: 27, | ||||
|                           end: 34, | ||||
|                           value: 'value', | ||||
|                           value: { type: 'string', data: 'value' }, | ||||
|                           raw: "'value'", | ||||
|                         }, | ||||
|                       }, | ||||
| @ -998,14 +998,14 @@ describe('testing pipe operator special', () => { | ||||
|                         type: 'Literal', | ||||
|                         start: 18, | ||||
|                         end: 19, | ||||
|                         value: 1, | ||||
|                         value: { type: 'i_integer', data: 1 }, | ||||
|                         raw: '1', | ||||
|                       }, | ||||
|                       { | ||||
|                         type: 'Literal', | ||||
|                         start: 21, | ||||
|                         end: 24, | ||||
|                         value: '2', | ||||
|                         value: { type: 'string', data: '2' }, | ||||
|                         raw: "'2'", | ||||
|                       }, | ||||
|                     ], | ||||
| @ -1120,7 +1120,7 @@ describe('testing pipe operator special', () => { | ||||
|                 type: 'Literal', | ||||
|                 start: 20, | ||||
|                 end: 25, | ||||
|                 value: 'two', | ||||
|                 value: { type: 'string', data: 'two' }, | ||||
|                 raw: '"two"', | ||||
|               }, | ||||
|             }, | ||||
| @ -1169,7 +1169,7 @@ describe('testing pipe operator special', () => { | ||||
|                   type: 'Literal', | ||||
|                   start: 16, | ||||
|                   end: 21, | ||||
|                   value: 'one', | ||||
|                   value: { type: 'string', data: 'one' }, | ||||
|                   raw: '"one"', | ||||
|                 }, | ||||
|               }, | ||||
| @ -1215,7 +1215,7 @@ describe('nests binary expressions correctly', () => { | ||||
|               type: 'Literal', | ||||
|               start: 11, | ||||
|               end: 12, | ||||
|               value: 1, | ||||
|               value: { type: 'i_integer', data: 1 }, | ||||
|               raw: '1', | ||||
|             }, | ||||
|             operator: '+', | ||||
| @ -1223,7 +1223,7 @@ describe('nests binary expressions correctly', () => { | ||||
|               type: 'Literal', | ||||
|               start: 15, | ||||
|               end: 16, | ||||
|               value: 2, | ||||
|               value: { type: 'i_integer', data: 2 }, | ||||
|               raw: '2', | ||||
|             }, | ||||
|           }, | ||||
| @ -1263,7 +1263,7 @@ describe('nests binary expressions correctly', () => { | ||||
|                 type: 'Literal', | ||||
|                 start: 11, | ||||
|                 end: 12, | ||||
|                 value: 1, | ||||
|                 value: { type: 'i_integer', data: 1 }, | ||||
|                 raw: '1', | ||||
|               }, | ||||
|               operator: '*', | ||||
| @ -1271,7 +1271,7 @@ describe('nests binary expressions correctly', () => { | ||||
|                 type: 'Literal', | ||||
|                 start: 15, | ||||
|                 end: 16, | ||||
|                 value: 2, | ||||
|                 value: { type: 'i_integer', data: 2 }, | ||||
|                 raw: '2', | ||||
|               }, | ||||
|             }, | ||||
| @ -1280,7 +1280,7 @@ describe('nests binary expressions correctly', () => { | ||||
|               type: 'Literal', | ||||
|               start: 19, | ||||
|               end: 20, | ||||
|               value: 3, | ||||
|               value: { type: 'i_integer', data: 3 }, | ||||
|               raw: '3', | ||||
|             }, | ||||
|           }, | ||||
| @ -1316,7 +1316,7 @@ describe('nests binary expressions correctly', () => { | ||||
|               type: 'Literal', | ||||
|               start: 11, | ||||
|               end: 12, | ||||
|               value: 1, | ||||
|               value: { type: 'i_integer', data: 1 }, | ||||
|               raw: '1', | ||||
|             }, | ||||
|             operator: '+', | ||||
| @ -1328,7 +1328,7 @@ describe('nests binary expressions correctly', () => { | ||||
|                 type: 'Literal', | ||||
|                 start: 15, | ||||
|                 end: 16, | ||||
|                 value: 2, | ||||
|                 value: { type: 'i_integer', data: 2 }, | ||||
|                 raw: '2', | ||||
|               }, | ||||
|               operator: '*', | ||||
| @ -1336,7 +1336,7 @@ describe('nests binary expressions correctly', () => { | ||||
|                 type: 'Literal', | ||||
|                 start: 19, | ||||
|                 end: 20, | ||||
|                 value: 3, | ||||
|                 value: { type: 'i_integer', data: 3 }, | ||||
|                 raw: '3', | ||||
|               }, | ||||
|             }, | ||||
| @ -1360,7 +1360,7 @@ describe('nests binary expressions correctly', () => { | ||||
|           type: 'Literal', | ||||
|           start: 11, | ||||
|           end: 12, | ||||
|           value: 1, | ||||
|           value: { type: 'i_integer', data: 1 }, | ||||
|           raw: '1', | ||||
|         }, | ||||
|         operator: '+', | ||||
| @ -1368,7 +1368,7 @@ describe('nests binary expressions correctly', () => { | ||||
|           type: 'Literal', | ||||
|           start: 15, | ||||
|           end: 16, | ||||
|           value: 2, | ||||
|           value: { type: 'i_integer', data: 2 }, | ||||
|           raw: '2', | ||||
|         }, | ||||
|       }, | ||||
| @ -1377,7 +1377,7 @@ describe('nests binary expressions correctly', () => { | ||||
|         type: 'Literal', | ||||
|         start: 19, | ||||
|         end: 20, | ||||
|         value: 3, | ||||
|         value: { type: 'i_integer', data: 3 }, | ||||
|         raw: '3', | ||||
|       }, | ||||
|     }) | ||||
| @ -1397,7 +1397,7 @@ describe('nests binary expressions correctly', () => { | ||||
|           type: 'Literal', | ||||
|           start: 11, | ||||
|           end: 12, | ||||
|           value: 1, | ||||
|           value: { type: 'i_integer', data: 1 }, | ||||
|           raw: '1', | ||||
|         }, | ||||
|         operator: '*', | ||||
| @ -1405,7 +1405,7 @@ describe('nests binary expressions correctly', () => { | ||||
|           type: 'Literal', | ||||
|           start: 15, | ||||
|           end: 16, | ||||
|           value: 2, | ||||
|           value: { type: 'i_integer', data: 2 }, | ||||
|           raw: '2', | ||||
|         }, | ||||
|       }, | ||||
| @ -1414,7 +1414,7 @@ describe('nests binary expressions correctly', () => { | ||||
|         type: 'Literal', | ||||
|         start: 19, | ||||
|         end: 20, | ||||
|         value: 3, | ||||
|         value: { type: 'i_integer', data: 3 }, | ||||
|         raw: '3', | ||||
|       }, | ||||
|     }) | ||||
| @ -1433,7 +1433,13 @@ describe('nests binary expressions correctly', () => { | ||||
|         operator: '+', | ||||
|         start: 11, | ||||
|         end: 30, | ||||
|         left: { type: 'Literal', value: 1, raw: '1', start: 11, end: 12 }, | ||||
|         left: { | ||||
|           type: 'Literal', | ||||
|           value: { type: 'i_integer', data: 1 }, | ||||
|           raw: '1', | ||||
|           start: 11, | ||||
|           end: 12, | ||||
|         }, | ||||
|         right: { | ||||
|           type: 'BinaryExpression', | ||||
|           operator: '/', | ||||
| @ -1444,26 +1450,50 @@ describe('nests binary expressions correctly', () => { | ||||
|             operator: '*', | ||||
|             start: 15, | ||||
|             end: 25, | ||||
|             left: { type: 'Literal', value: 2, raw: '2', start: 15, end: 16 }, | ||||
|             left: { | ||||
|               type: 'Literal', | ||||
|               value: { type: 'i_integer', data: 2 }, | ||||
|               raw: '2', | ||||
|               start: 15, | ||||
|               end: 16, | ||||
|             }, | ||||
|             right: { | ||||
|               type: 'BinaryExpression', | ||||
|               operator: '-', | ||||
|               start: 20, | ||||
|               end: 25, | ||||
|               left: { type: 'Literal', value: 3, raw: '3', start: 20, end: 21 }, | ||||
|               left: { | ||||
|                 type: 'Literal', | ||||
|                 value: { type: 'i_integer', data: 3 }, | ||||
|                 raw: '3', | ||||
|                 start: 20, | ||||
|                 end: 21, | ||||
|               }, | ||||
|               right: { | ||||
|                 type: 'Literal', | ||||
|                 value: 4, | ||||
|                 value: { type: 'i_integer', data: 4 }, | ||||
|                 raw: '4', | ||||
|                 start: 24, | ||||
|                 end: 25, | ||||
|               }, | ||||
|             }, | ||||
|           }, | ||||
|           right: { type: 'Literal', value: 5, raw: '5', start: 29, end: 30 }, | ||||
|           right: { | ||||
|             type: 'Literal', | ||||
|             value: { type: 'i_integer', data: 5 }, | ||||
|             raw: '5', | ||||
|             start: 29, | ||||
|             end: 30, | ||||
|           }, | ||||
|         }, | ||||
|       }, | ||||
|       right: { type: 'Literal', value: 6, raw: '6', start: 33, end: 34 }, | ||||
|       right: { | ||||
|         type: 'Literal', | ||||
|         value: { type: 'i_integer', data: 6 }, | ||||
|         raw: '6', | ||||
|         start: 33, | ||||
|         end: 34, | ||||
|       }, | ||||
|     }) | ||||
|   }) | ||||
| }) | ||||
| @ -1481,7 +1511,7 @@ const key = 'c'` | ||||
|       value: { | ||||
|         type: 'blockComment', | ||||
|         style: 'line', | ||||
|         value: 'this is a comment', | ||||
|         value: { type: 'string', data: 'this is a comment' }, | ||||
|       }, | ||||
|     } | ||||
|     const { nonCodeMeta } = parse(code) | ||||
| @ -1564,8 +1594,20 @@ describe('test UnaryExpression', () => { | ||||
|         end: 26, | ||||
|         callee: { type: 'Identifier', start: 15, end: 18, name: 'min' }, | ||||
|         arguments: [ | ||||
|           { type: 'Literal', start: 19, end: 20, value: 4, raw: '4' }, | ||||
|           { type: 'Literal', start: 22, end: 25, value: 100, raw: '100' }, | ||||
|           { | ||||
|             type: 'Literal', | ||||
|             start: 19, | ||||
|             end: 20, | ||||
|             value: { type: 'i_integer', data: 4 }, | ||||
|             raw: '4', | ||||
|           }, | ||||
|           { | ||||
|             type: 'Literal', | ||||
|             start: 22, | ||||
|             end: 25, | ||||
|             value: { type: 'i_integer', data: 100 }, | ||||
|             raw: '100', | ||||
|           }, | ||||
|         ], | ||||
|         function: expect.any(Object), | ||||
|         optional: false, | ||||
| @ -1585,21 +1627,45 @@ describe('testing nested call expressions', () => { | ||||
|       end: 40, | ||||
|       callee: { type: 'Identifier', start: 14, end: 17, name: 'min' }, | ||||
|       arguments: [ | ||||
|         { type: 'Literal', start: 18, end: 21, value: 100, raw: '100' }, | ||||
|         { | ||||
|           type: 'Literal', | ||||
|           start: 18, | ||||
|           end: 21, | ||||
|           value: { type: 'i_integer', data: 100 }, | ||||
|           raw: '100', | ||||
|         }, | ||||
|         { | ||||
|           type: 'BinaryExpression', | ||||
|           operator: '+', | ||||
|           start: 23, | ||||
|           end: 39, | ||||
|           left: { type: 'Literal', value: 1, raw: '1', start: 23, end: 24 }, | ||||
|           left: { | ||||
|             type: 'Literal', | ||||
|             value: { type: 'i_integer', data: 1 }, | ||||
|             raw: '1', | ||||
|             start: 23, | ||||
|             end: 24, | ||||
|           }, | ||||
|           right: { | ||||
|             type: 'CallExpression', | ||||
|             start: 27, | ||||
|             end: 39, | ||||
|             callee: { type: 'Identifier', start: 27, end: 33, name: 'legLen' }, | ||||
|             arguments: [ | ||||
|               { type: 'Literal', start: 34, end: 35, value: 5, raw: '5' }, | ||||
|               { type: 'Literal', start: 37, end: 38, value: 3, raw: '3' }, | ||||
|               { | ||||
|                 type: 'Literal', | ||||
|                 start: 34, | ||||
|                 end: 35, | ||||
|                 value: { type: 'i_integer', data: 5 }, | ||||
|                 raw: '5', | ||||
|               }, | ||||
|               { | ||||
|                 type: 'Literal', | ||||
|                 start: 37, | ||||
|                 end: 38, | ||||
|                 value: { type: 'i_integer', data: 3 }, | ||||
|                 raw: '3', | ||||
|               }, | ||||
|             ], | ||||
|             function: expect.any(Object), | ||||
|             optional: false, | ||||
| @ -1633,7 +1699,7 @@ describe('should recognise callExpresions in binaryExpressions', () => { | ||||
|               type: 'Literal', | ||||
|               start: 16, | ||||
|               end: 23, | ||||
|               value: 'seg02', | ||||
|               value: { type: 'string', data: 'seg02' }, | ||||
|               raw: "'seg02'", | ||||
|             }, | ||||
|             { type: 'PipeSubstitution', start: 25, end: 26 }, | ||||
| @ -1641,7 +1707,13 @@ describe('should recognise callExpresions in binaryExpressions', () => { | ||||
|           function: expect.any(Object), | ||||
|           optional: false, | ||||
|         }, | ||||
|         right: { type: 'Literal', value: 1, raw: '1', start: 30, end: 31 }, | ||||
|         right: { | ||||
|           type: 'Literal', | ||||
|           value: { type: 'i_integer', data: 1 }, | ||||
|           raw: '1', | ||||
|           start: 30, | ||||
|           end: 31, | ||||
|         }, | ||||
|       }, | ||||
|       { type: 'PipeSubstitution', start: 33, end: 34 }, | ||||
|     ]) | ||||
|  | ||||
| @ -21,7 +21,7 @@ describe('Testing createLiteral', () => { | ||||
|   it('should create a literal', () => { | ||||
|     const result = createLiteral(5) | ||||
|     expect(result.type).toBe('Literal') | ||||
|     expect(result.value).toBe(5) | ||||
|     expect(result.value.data).toBe(5) | ||||
|   }) | ||||
| }) | ||||
| describe('Testing createIdentifier', () => { | ||||
| @ -38,7 +38,7 @@ describe('Testing createCallExpression', () => { | ||||
|     expect(result.callee.type).toBe('Identifier') | ||||
|     expect(result.callee.name).toBe('myFunc') | ||||
|     expect(result.arguments[0].type).toBe('Literal') | ||||
|     expect((result.arguments[0] as any).value).toBe(5) | ||||
|     expect((result.arguments[0] as any).value.data).toBe(5) | ||||
|   }) | ||||
| }) | ||||
| describe('Testing createObjectExpression', () => { | ||||
| @ -50,7 +50,7 @@ describe('Testing createObjectExpression', () => { | ||||
|     expect(result.properties[0].type).toBe('ObjectProperty') | ||||
|     expect(result.properties[0].key.name).toBe('myProp') | ||||
|     expect(result.properties[0].value.type).toBe('Literal') | ||||
|     expect((result.properties[0].value as any).value).toBe(5) | ||||
|     expect((result.properties[0].value as any).value.data).toBe(5) | ||||
|   }) | ||||
| }) | ||||
| describe('Testing createArrayExpression', () => { | ||||
| @ -58,7 +58,7 @@ describe('Testing createArrayExpression', () => { | ||||
|     const result = createArrayExpression([createLiteral(5)]) | ||||
|     expect(result.type).toBe('ArrayExpression') | ||||
|     expect(result.elements[0].type).toBe('Literal') | ||||
|     expect((result.elements[0] as any).value).toBe(5) | ||||
|     expect((result.elements[0] as any).value.data).toBe(5) | ||||
|   }) | ||||
| }) | ||||
| describe('Testing createPipeSubstitution', () => { | ||||
| @ -75,7 +75,7 @@ describe('Testing createVariableDeclaration', () => { | ||||
|     expect(result.declarations[0].id.type).toBe('Identifier') | ||||
|     expect(result.declarations[0].id.name).toBe('myVar') | ||||
|     expect(result.declarations[0].init.type).toBe('Literal') | ||||
|     expect((result.declarations[0].init as any).value).toBe(5) | ||||
|     expect((result.declarations[0].init as any).value.data).toBe(5) | ||||
|   }) | ||||
| }) | ||||
| describe('Testing createPipeExpression', () => { | ||||
| @ -83,7 +83,7 @@ describe('Testing createPipeExpression', () => { | ||||
|     const result = createPipeExpression([createLiteral(5)]) | ||||
|     expect(result.type).toBe('PipeExpression') | ||||
|     expect(result.body[0].type).toBe('Literal') | ||||
|     expect((result.body[0] as any).value).toBe(5) | ||||
|     expect((result.body[0] as any).value.data).toBe(5) | ||||
|   }) | ||||
| }) | ||||
|  | ||||
|  | ||||
| @ -440,11 +440,15 @@ export function splitPathAtPipeExpression(pathToNode: PathToNode): { | ||||
| } | ||||
|  | ||||
| export function createLiteral(value: string | number): Literal { | ||||
|   const literalValue = | ||||
|     typeof value === 'string' | ||||
|       ? ({ type: 'string', data: value } as const) | ||||
|       : ({ type: 'fractional', data: value } as const) | ||||
|   return { | ||||
|     type: 'Literal', | ||||
|     start: 0, | ||||
|     end: 0, | ||||
|     value, | ||||
|     value: literalValue, | ||||
|     raw: `${value}`, | ||||
|   } | ||||
| } | ||||
| @ -641,7 +645,7 @@ export function giveSketchFnCallTag( | ||||
|   const isTagExisting = !!firstArg.tag | ||||
|   const tagValue = (firstArg.tag || | ||||
|     createLiteral(tag || findUniqueName(ast, 'seg', 2))) as Literal | ||||
|   const tagStr = String(tagValue.value) | ||||
|   const tagStr = String(tagValue.value.data) | ||||
|   const newFirstArg = createFirstArg( | ||||
|     primaryCallExp.callee.name as ToolTip, | ||||
|     firstArg.val, | ||||
|  | ||||
| @ -1426,7 +1426,7 @@ export function transformAstSketchLines({ | ||||
|       referenceSegName || | ||||
|       (_referencedSegmentNameVal && | ||||
|         _referencedSegmentNameVal.type === 'Literal' && | ||||
|         String(_referencedSegmentNameVal.value)) || | ||||
|         String(_referencedSegmentNameVal.value.data)) || | ||||
|       '' | ||||
|     const [varValA, varValB] = Array.isArray(val) ? val : [val, val] | ||||
|  | ||||
|  | ||||
| @ -7,14 +7,18 @@ use parse_display::{Display, FromStr}; | ||||
| use schemars::JsonSchema; | ||||
| use serde::{Deserialize, Serialize}; | ||||
| use serde_json::Map; | ||||
| use serde_json::Value as JValue; | ||||
| use tower_lsp::lsp_types::{CompletionItem, CompletionItemKind, DocumentSymbol, Range as LspRange, SymbolKind}; | ||||
|  | ||||
| pub use self::literal_value::LiteralValue; | ||||
| use crate::{ | ||||
|     errors::{KclError, KclErrorDetails}, | ||||
|     executor::{ExecutorContext, MemoryItem, Metadata, PipeInfo, ProgramMemory, SourceRange, UserVal}, | ||||
|     parser::PIPE_OPERATOR, | ||||
| }; | ||||
|  | ||||
| mod literal_value; | ||||
|  | ||||
| #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] | ||||
| #[ts(export)] | ||||
| #[serde(rename_all = "camelCase")] | ||||
| @ -1312,24 +1316,18 @@ impl VariableDeclarator { | ||||
| pub struct Literal { | ||||
|     pub start: usize, | ||||
|     pub end: usize, | ||||
|     pub value: serde_json::Value, | ||||
|     pub value: LiteralValue, | ||||
|     pub raw: String, | ||||
| } | ||||
|  | ||||
| impl_value_meta!(Literal); | ||||
|  | ||||
| impl From<Literal> for Value { | ||||
|     fn from(literal: Literal) -> Self { | ||||
|         Value::Literal(Box::new(literal)) | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl Literal { | ||||
|     pub fn new(value: serde_json::Value) -> Self { | ||||
|     pub fn new(value: LiteralValue) -> Self { | ||||
|         Self { | ||||
|             start: 0, | ||||
|             end: 0, | ||||
|             raw: value.to_string(), | ||||
|             raw: JValue::from(value.clone()).to_string(), | ||||
|             value, | ||||
|         } | ||||
|     } | ||||
| @ -1343,11 +1341,19 @@ impl Literal { | ||||
|     } | ||||
|  | ||||
|     fn recast(&self) -> String { | ||||
|         if let serde_json::Value::String(value) = &self.value { | ||||
|             let quote = if self.raw.trim().starts_with('"') { '"' } else { '\'' }; | ||||
|             format!("{}{}{}", quote, value, quote) | ||||
|         } else { | ||||
|             self.value.to_string() | ||||
|         match self.value { | ||||
|             LiteralValue::Fractional(x) => { | ||||
|                 if x.fract() == 0.0 { | ||||
|                     format!("{x:?}") | ||||
|                 } else { | ||||
|                     self.raw.clone() | ||||
|                 } | ||||
|             } | ||||
|             LiteralValue::IInteger(_) => self.raw.clone(), | ||||
|             LiteralValue::String(ref s) => { | ||||
|                 let quote = if self.raw.trim().starts_with('"') { '"' } else { '\'' }; | ||||
|                 format!("{quote}{s}{quote}") | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -1355,7 +1361,7 @@ impl Literal { | ||||
| impl From<Literal> for MemoryItem { | ||||
|     fn from(literal: Literal) -> Self { | ||||
|         MemoryItem::UserVal(UserVal { | ||||
|             value: literal.value.clone(), | ||||
|             value: JValue::from(literal.value.clone()), | ||||
|             meta: vec![Metadata { | ||||
|                 source_range: literal.into(), | ||||
|             }], | ||||
| @ -1366,7 +1372,7 @@ impl From<Literal> for MemoryItem { | ||||
| impl From<&Box<Literal>> for MemoryItem { | ||||
|     fn from(literal: &Box<Literal>) -> Self { | ||||
|         MemoryItem::UserVal(UserVal { | ||||
|             value: literal.value.clone(), | ||||
|             value: JValue::from(literal.value.clone()), | ||||
|             meta: vec![Metadata { | ||||
|                 source_range: literal.into(), | ||||
|             }], | ||||
| @ -1967,17 +1973,21 @@ impl MemberExpression { | ||||
|             LiteralIdentifier::Identifier(identifier) => identifier.name.to_string(), | ||||
|             LiteralIdentifier::Literal(literal) => { | ||||
|                 let value = literal.value.clone(); | ||||
|                 // Parse this as a string. | ||||
|                 if let serde_json::Value::String(string) = value { | ||||
|                     string | ||||
|                 } else if let serde_json::Value::Number(_) = &value { | ||||
|                     // It can also be a number if we are getting a member of an array. | ||||
|                     return self.get_result_array(memory, parse_json_number_as_usize(&value, self.into())?); | ||||
|                 } else { | ||||
|                     return Err(KclError::Semantic(KclErrorDetails { | ||||
|                         message: format!("Expected string literal or number for property name, found {:?}", value), | ||||
|                         source_ranges: vec![literal.into()], | ||||
|                     })); | ||||
|                 match value { | ||||
|                     LiteralValue::IInteger(x) if x >= 0 => return self.get_result_array(memory, x as usize), | ||||
|                     LiteralValue::IInteger(x) => { | ||||
|                         return Err(KclError::Syntax(KclErrorDetails { | ||||
|                             source_ranges: vec![self.into()], | ||||
|                             message: format!("invalid index: {x}"), | ||||
|                         })) | ||||
|                     } | ||||
|                     LiteralValue::Fractional(x) => { | ||||
|                         return Err(KclError::Syntax(KclErrorDetails { | ||||
|                             source_ranges: vec![self.into()], | ||||
|                             message: format!("invalid index: {x}"), | ||||
|                         })) | ||||
|                     } | ||||
|                     LiteralValue::String(s) => s, | ||||
|                 } | ||||
|             } | ||||
|         }; | ||||
| @ -2209,22 +2219,6 @@ pub fn parse_json_number_as_f64(j: &serde_json::Value, source_range: SourceRange | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub fn parse_json_number_as_usize(j: &serde_json::Value, source_range: SourceRange) -> Result<usize, KclError> { | ||||
|     if let serde_json::Value::Number(n) = &j { | ||||
|         Ok(n.as_i64().ok_or_else(|| { | ||||
|             KclError::Syntax(KclErrorDetails { | ||||
|                 source_ranges: vec![source_range], | ||||
|                 message: format!("Invalid index: {}", j), | ||||
|             }) | ||||
|         })? as usize) | ||||
|     } else { | ||||
|         Err(KclError::Syntax(KclErrorDetails { | ||||
|             source_ranges: vec![source_range], | ||||
|             message: format!("Invalid index: {}", j), | ||||
|         })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub fn parse_json_value_as_string(j: &serde_json::Value) -> Option<String> { | ||||
|     if let serde_json::Value::String(n) = &j { | ||||
|         Some(n.clone()) | ||||
| @ -3289,4 +3283,40 @@ const thickness = sqrt(distance * p * FOS * 6 / (sigmaAllow * width))"#; | ||||
|         let recasted = program.recast(&Default::default(), 0); | ||||
|         assert_eq!(recasted.trim(), some_program_string); | ||||
|     } | ||||
|  | ||||
|     #[test] | ||||
|     fn recast_literal() { | ||||
|         use winnow::Parser; | ||||
|         for (i, (raw, expected, reason)) in [ | ||||
|             ( | ||||
|                 "5.0", | ||||
|                 "5.0", | ||||
|                 "fractional numbers should stay fractional, i.e. don't reformat this to '5'", | ||||
|             ), | ||||
|             ( | ||||
|                 "5", | ||||
|                 "5", | ||||
|                 "integers should stay integral, i.e. don't reformat this to '5.0'", | ||||
|             ), | ||||
|             ( | ||||
|                 "5.0000000", | ||||
|                 "5.0", | ||||
|                 "if the number is f64 but not fractional, use its canonical format", | ||||
|             ), | ||||
|             ("5.1", "5.1", "straightforward case works"), | ||||
|         ] | ||||
|         .into_iter() | ||||
|         .enumerate() | ||||
|         { | ||||
|             let tokens = crate::token::lexer(raw); | ||||
|             let literal = crate::parser::parser_impl::unsigned_number_literal | ||||
|                 .parse(&tokens) | ||||
|                 .unwrap(); | ||||
|             assert_eq!( | ||||
|                 literal.recast(), | ||||
|                 expected, | ||||
|                 "failed test {i}, which is testing that {reason}" | ||||
|             ); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
							
								
								
									
										70
									
								
								src/wasm-lib/kcl/src/ast/types/literal_value.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								src/wasm-lib/kcl/src/ast/types/literal_value.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | ||||
| use schemars::JsonSchema; | ||||
| use serde::{Deserialize, Serialize}; | ||||
| use serde_json::Value as JValue; | ||||
|  | ||||
| use super::{Literal, Value}; | ||||
|  | ||||
| #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)] | ||||
| #[ts(export)] | ||||
| #[serde(tag = "type", content = "data", rename_all = "snake_case")] | ||||
| pub enum LiteralValue { | ||||
|     IInteger(i64), | ||||
|     Fractional(f64), | ||||
|     String(String), | ||||
| } | ||||
|  | ||||
| impl From<Literal> for Value { | ||||
|     fn from(literal: Literal) -> Self { | ||||
|         Value::Literal(Box::new(literal)) | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl From<LiteralValue> for JValue { | ||||
|     fn from(value: LiteralValue) -> Self { | ||||
|         match value { | ||||
|             LiteralValue::IInteger(x) => x.into(), | ||||
|             LiteralValue::Fractional(x) => x.into(), | ||||
|             LiteralValue::String(x) => x.into(), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl From<f64> for LiteralValue { | ||||
|     fn from(value: f64) -> Self { | ||||
|         Self::Fractional(value) | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl From<i64> for LiteralValue { | ||||
|     fn from(value: i64) -> Self { | ||||
|         Self::IInteger(value) | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl From<String> for LiteralValue { | ||||
|     fn from(value: String) -> Self { | ||||
|         Self::String(value) | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl From<u32> for LiteralValue { | ||||
|     fn from(value: u32) -> Self { | ||||
|         Self::IInteger(value as i64) | ||||
|     } | ||||
| } | ||||
| impl From<u16> for LiteralValue { | ||||
|     fn from(value: u16) -> Self { | ||||
|         Self::IInteger(value as i64) | ||||
|     } | ||||
| } | ||||
| impl From<u8> for LiteralValue { | ||||
|     fn from(value: u8) -> Self { | ||||
|         Self::IInteger(value as i64) | ||||
|     } | ||||
| } | ||||
| impl From<&'static str> for LiteralValue { | ||||
|     fn from(value: &'static str) -> Self { | ||||
|         // TODO: Make this Cow<str> | ||||
|         Self::String(value.to_owned()) | ||||
|     } | ||||
| } | ||||
| @ -1,7 +1,7 @@ | ||||
| use crate::{ast::types::Program, errors::KclError, token::Token}; | ||||
|  | ||||
| mod math; | ||||
| mod parser_impl; | ||||
| pub(crate) mod parser_impl; | ||||
|  | ||||
| pub const PIPE_SUBSTITUTION_OPERATOR: &str = "%"; | ||||
| pub const PIPE_OPERATOR: &str = "|>"; | ||||
|  | ||||
| @ -94,7 +94,7 @@ mod tests { | ||||
|     #[test] | ||||
|     fn parse_and_evaluate() { | ||||
|         /// Make a literal | ||||
|         fn lit(n: u8) -> BinaryPart { | ||||
|         fn lit(n: i64) -> BinaryPart { | ||||
|             BinaryPart::Literal(Box::new(Literal { | ||||
|                 start: 0, | ||||
|                 end: 0, | ||||
|  | ||||
| @ -1,4 +1,3 @@ | ||||
| use serde_json::{Number as JNumber, Value as JValue}; | ||||
| use winnow::{ | ||||
|     combinator::{alt, delimited, opt, peek, preceded, repeat, separated0, terminated}, | ||||
|     dispatch, | ||||
| @ -10,10 +9,10 @@ use winnow::{ | ||||
| use crate::{ | ||||
|     ast::types::{ | ||||
|         ArrayExpression, BinaryExpression, BinaryOperator, BinaryPart, BodyItem, CallExpression, CommentStyle, | ||||
|         ExpressionStatement, FunctionExpression, Identifier, Literal, LiteralIdentifier, MemberExpression, | ||||
|         MemberObject, NonCodeMeta, NonCodeNode, NonCodeValue, ObjectExpression, ObjectProperty, PipeExpression, | ||||
|         PipeSubstitution, Program, ReturnStatement, UnaryExpression, UnaryOperator, Value, VariableDeclaration, | ||||
|         VariableDeclarator, VariableKind, | ||||
|         ExpressionStatement, FunctionExpression, Identifier, Literal, LiteralIdentifier, LiteralValue, | ||||
|         MemberExpression, MemberObject, NonCodeMeta, NonCodeNode, NonCodeValue, ObjectExpression, ObjectProperty, | ||||
|         PipeExpression, PipeSubstitution, Program, ReturnStatement, UnaryExpression, UnaryOperator, Value, | ||||
|         VariableDeclaration, VariableDeclarator, VariableKind, | ||||
|     }, | ||||
|     errors::{KclError, KclErrorDetails}, | ||||
|     executor::SourceRange, | ||||
| @ -216,7 +215,7 @@ pub fn string_literal(i: TokenSlice) -> PResult<Literal> { | ||||
|         .try_map(|token: Token| match token.token_type { | ||||
|             TokenType::String => { | ||||
|                 let s = token.value[1..token.value.len() - 1].to_string(); | ||||
|                 Ok((JValue::String(s), token)) | ||||
|                 Ok((LiteralValue::from(s), token)) | ||||
|             } | ||||
|             _ => Err(KclError::Syntax(KclErrorDetails { | ||||
|                 source_ranges: token.as_source_ranges(), | ||||
| @ -234,12 +233,12 @@ pub fn string_literal(i: TokenSlice) -> PResult<Literal> { | ||||
| } | ||||
|  | ||||
| /// Parse a KCL literal number, with no - sign. | ||||
| fn unsigned_number_literal(i: TokenSlice) -> PResult<Literal> { | ||||
| pub(crate) fn unsigned_number_literal(i: TokenSlice) -> PResult<Literal> { | ||||
|     let (value, token) = any | ||||
|         .try_map(|token: Token| match token.token_type { | ||||
|             TokenType::Number => { | ||||
|                 if let Ok(x) = token.value.parse::<i64>() { | ||||
|                     return Ok((JValue::Number(JNumber::from(x)), token)); | ||||
|                 if let Ok(x) = token.value.parse::<u64>() { | ||||
|                     return Ok((LiteralValue::IInteger(x as i64), token)); | ||||
|                 } | ||||
|                 let x: f64 = token.value.parse().map_err(|_| { | ||||
|                     KclError::Syntax(KclErrorDetails { | ||||
| @ -248,13 +247,7 @@ fn unsigned_number_literal(i: TokenSlice) -> PResult<Literal> { | ||||
|                     }) | ||||
|                 })?; | ||||
|  | ||||
|                 match JNumber::from_f64(x) { | ||||
|                     Some(n) => Ok((JValue::Number(n), token)), | ||||
|                     None => Err(KclError::Syntax(KclErrorDetails { | ||||
|                         source_ranges: token.as_source_ranges(), | ||||
|                         message: format!("Invalid float: {}", token.value), | ||||
|                     })), | ||||
|                 } | ||||
|                 Ok((LiteralValue::Fractional(x), token)) | ||||
|             } | ||||
|             _ => Err(KclError::Syntax(KclErrorDetails { | ||||
|                 source_ranges: token.as_source_ranges(), | ||||
| @ -404,10 +397,11 @@ fn integer_range(i: TokenSlice) -> PResult<Vec<Value>> { | ||||
|     let (_token1, ceiling) = integer.parse_next(i)?; | ||||
|     Ok((floor..=ceiling) | ||||
|         .map(|num| { | ||||
|             let num = num as i64; | ||||
|             Value::Literal(Box::new(Literal { | ||||
|                 start: token0.start, | ||||
|                 end: token0.end, | ||||
|                 value: JValue::Number(num.into()), | ||||
|                 value: num.into(), | ||||
|                 raw: num.to_string(), | ||||
|             })) | ||||
|         }) | ||||
| @ -1459,7 +1453,7 @@ const mySk1 = startSketchAt([0, 0])"#; | ||||
|                         argument: Value::Literal(Box::new(Literal { | ||||
|                             start: 32, | ||||
|                             end: 33, | ||||
|                             value: JValue::Number(JNumber::from(2)), | ||||
|                             value: 2u32.into(), | ||||
|                             raw: "2".to_owned(), | ||||
|                         })), | ||||
|                     })], | ||||
| @ -1614,7 +1608,7 @@ const mySk1 = startSketchAt([0, 0])"#; | ||||
|             BinaryPart::Literal(Box::new(Literal { | ||||
|                 start: 9, | ||||
|                 end: 10, | ||||
|                 value: JValue::Number(JNumber::from(3)), | ||||
|                 value: 3u32.into(), | ||||
|                 raw: "3".to_owned(), | ||||
|             })) | ||||
|         ); | ||||
| @ -1774,11 +1768,11 @@ const mySk1 = startSketchAt([0, 0])"#; | ||||
|             let BinaryPart::Literal(left) = actual.left else { | ||||
|                 panic!("should be expression"); | ||||
|             }; | ||||
|             assert_eq!(left.value, serde_json::Value::Number(1.into())); | ||||
|             assert_eq!(left.value, 1u32.into()); | ||||
|             let BinaryPart::Literal(right) = actual.right else { | ||||
|                 panic!("should be expression"); | ||||
|             }; | ||||
|             assert_eq!(right.value, serde_json::Value::Number(2.into())); | ||||
|             assert_eq!(right.value, 2u32.into()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @ -1957,12 +1951,10 @@ const mySk1 = startSketchAt([0, 0])"#; | ||||
|         let parsed_literal = literal.parse(&tokens).unwrap(); | ||||
|         assert_eq!( | ||||
|             parsed_literal.value, | ||||
|             JValue::String( | ||||
|                 " | ||||
|             " | ||||
|            // a comment | ||||
|              " | ||||
|                 .to_owned() | ||||
|             ) | ||||
|             .into() | ||||
|         ); | ||||
|     } | ||||
|  | ||||
| @ -2067,13 +2059,13 @@ const mySk1 = startSketchAt([0, 0])"#; | ||||
|             left: BinaryPart::Literal(Box::new(Literal { | ||||
|                 start: 0, | ||||
|                 end: 1, | ||||
|                 value: serde_json::Value::Number(serde_json::Number::from(5)), | ||||
|                 value: 5u32.into(), | ||||
|                 raw: "5".to_owned(), | ||||
|             })), | ||||
|             right: BinaryPart::Literal(Box::new(Literal { | ||||
|                 start: 4, | ||||
|                 end: 7, | ||||
|                 value: serde_json::Value::String("a".to_owned()), | ||||
|                 value: "a".into(), | ||||
|                 raw: r#""a""#.to_owned(), | ||||
|             })), | ||||
|         }; | ||||
| @ -2180,14 +2172,14 @@ const mySk1 = startSketchAt([0, 0])"#; | ||||
|                     left: BinaryPart::Literal(Box::new(Literal { | ||||
|                         start: 0, | ||||
|                         end: 1, | ||||
|                         value: serde_json::Value::Number(serde_json::Number::from(5)), | ||||
|                         value: 5u32.into(), | ||||
|                         raw: "5".to_string(), | ||||
|                     })), | ||||
|                     operator: BinaryOperator::Add, | ||||
|                     right: BinaryPart::Literal(Box::new(Literal { | ||||
|                         start: 3, | ||||
|                         end: 4, | ||||
|                         value: serde_json::Value::Number(serde_json::Number::from(6)), | ||||
|                         value: 6u32.into(), | ||||
|                         raw: "6".to_string(), | ||||
|                     })), | ||||
|                 })), | ||||
| @ -2466,67 +2458,67 @@ e | ||||
|                             Value::Literal(Box::new(Literal { | ||||
|                                 start: 17, | ||||
|                                 end: 18, | ||||
|                                 value: 0.into(), | ||||
|                                 value: 0u32.into(), | ||||
|                                 raw: "0".to_string(), | ||||
|                             })), | ||||
|                             Value::Literal(Box::new(Literal { | ||||
|                                 start: 17, | ||||
|                                 end: 18, | ||||
|                                 value: 1.into(), | ||||
|                                 value: 1u32.into(), | ||||
|                                 raw: "1".to_string(), | ||||
|                             })), | ||||
|                             Value::Literal(Box::new(Literal { | ||||
|                                 start: 17, | ||||
|                                 end: 18, | ||||
|                                 value: 2.into(), | ||||
|                                 value: 2u32.into(), | ||||
|                                 raw: "2".to_string(), | ||||
|                             })), | ||||
|                             Value::Literal(Box::new(Literal { | ||||
|                                 start: 17, | ||||
|                                 end: 18, | ||||
|                                 value: 3.into(), | ||||
|                                 value: 3u32.into(), | ||||
|                                 raw: "3".to_string(), | ||||
|                             })), | ||||
|                             Value::Literal(Box::new(Literal { | ||||
|                                 start: 17, | ||||
|                                 end: 18, | ||||
|                                 value: 4.into(), | ||||
|                                 value: 4u32.into(), | ||||
|                                 raw: "4".to_string(), | ||||
|                             })), | ||||
|                             Value::Literal(Box::new(Literal { | ||||
|                                 start: 17, | ||||
|                                 end: 18, | ||||
|                                 value: 5.into(), | ||||
|                                 value: 5u32.into(), | ||||
|                                 raw: "5".to_string(), | ||||
|                             })), | ||||
|                             Value::Literal(Box::new(Literal { | ||||
|                                 start: 17, | ||||
|                                 end: 18, | ||||
|                                 value: 6.into(), | ||||
|                                 value: 6u32.into(), | ||||
|                                 raw: "6".to_string(), | ||||
|                             })), | ||||
|                             Value::Literal(Box::new(Literal { | ||||
|                                 start: 17, | ||||
|                                 end: 18, | ||||
|                                 value: 7.into(), | ||||
|                                 value: 7u32.into(), | ||||
|                                 raw: "7".to_string(), | ||||
|                             })), | ||||
|                             Value::Literal(Box::new(Literal { | ||||
|                                 start: 17, | ||||
|                                 end: 18, | ||||
|                                 value: 8.into(), | ||||
|                                 value: 8u32.into(), | ||||
|                                 raw: "8".to_string(), | ||||
|                             })), | ||||
|                             Value::Literal(Box::new(Literal { | ||||
|                                 start: 17, | ||||
|                                 end: 18, | ||||
|                                 value: 9.into(), | ||||
|                                 value: 9u32.into(), | ||||
|                                 raw: "9".to_string(), | ||||
|                             })), | ||||
|                             Value::Literal(Box::new(Literal { | ||||
|                                 start: 17, | ||||
|                                 end: 18, | ||||
|                                 value: 10.into(), | ||||
|                                 value: 10u32.into(), | ||||
|                                 raw: "10".to_string(), | ||||
|                             })), | ||||
|                         ], | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	