13
CompilerError,
14
CompilerSuggestionOperation,
15
ErrorCategory,
16
- ErrorSeverity,
16
} from '../CompilerError';
17
import {Err, Ok, Result} from '../Utils/Result';
18
import {assertExhaustive, hasNode} from '../Utils/utils';
107
if (binding.kind !== 'Identifier') {
108
builder.errors.pushDiagnostic(
109
CompilerDiagnostic.create({
111
- severity: ErrorSeverity.Invariant,
110
category: ErrorCategory.Invariant,
111
reason: 'Could not find binding',
112
description: `[BuildHIR] Could not find binding for param \`${param.node.name}\`.`,
171
} else {
172
builder.errors.pushDiagnostic(
173
CompilerDiagnostic.create({
176
- severity: ErrorSeverity.Todo,
174
category: ErrorCategory.Todo,
175
reason: `Handle ${param.node.type} parameters`,
176
description: `[BuildHIR] Add support for ${param.node.type} parameters.`,
202
} else {
203
builder.errors.pushDiagnostic(
204
CompilerDiagnostic.create({
208
- severity: ErrorSeverity.InvalidJS,
205
category: ErrorCategory.Syntax,
206
reason: `Unexpected function body kind`,
207
description: `Expected function body to be an expression or a block statement, got \`${body.type}\`.`,
272
builder.errors.push({
273
reason:
274
'(BuildHIR::lowerStatement) Support ThrowStatement inside of try/catch',
279
- severity: ErrorSeverity.Todo,
275
category: ErrorCategory.Todo,
276
loc: stmt.node.loc ?? null,
277
suggestions: null,
459
kind = InstructionKind.HoistedFunction;
460
} else if (!binding.path.isVariableDeclarator()) {
461
builder.errors.push({
467
- severity: ErrorSeverity.Todo,
462
category: ErrorCategory.Todo,
463
reason: 'Unsupported declaration type for hoisting',
464
description: `variable "${binding.identifier.name}" declared with ${binding.path.type}`,
468
continue;
469
} else {
470
builder.errors.push({
477
- severity: ErrorSeverity.Todo,
471
category: ErrorCategory.Todo,
472
reason: 'Handle non-const declarations for hoisting',
473
description: `variable "${binding.identifier.name}" declared with ${binding.kind}`,
548
builder.errors.push({
549
reason:
550
'(BuildHIR::lowerStatement) Handle non-variable initialization in ForStatement',
558
- severity: ErrorSeverity.Todo,
551
category: ErrorCategory.Todo,
552
loc: stmt.node.loc ?? null,
553
suggestions: null,
620
if (test.node == null) {
621
builder.errors.push({
622
reason: `(BuildHIR::lowerStatement) Handle empty test in ForStatement`,
631
- severity: ErrorSeverity.Todo,
623
category: ErrorCategory.Todo,
624
loc: stmt.node.loc ?? null,
625
suggestions: null,
771
if (hasDefault) {
772
builder.errors.push({
773
reason: `Expected at most one \`default\` branch in a switch statement, this code should have failed to parse`,
783
- severity: ErrorSeverity.InvalidJS,
774
category: ErrorCategory.Syntax,
775
loc: case_.node.loc ?? null,
776
suggestions: null,
843
if (nodeKind === 'var') {
844
builder.errors.push({
845
reason: `(BuildHIR::lowerStatement) Handle ${nodeKind} kinds in VariableDeclaration`,
856
- severity: ErrorSeverity.Todo,
846
category: ErrorCategory.Todo,
847
loc: stmt.node.loc ?? null,
848
suggestions: null,
871
if (binding.kind !== 'Identifier') {
872
builder.errors.push({
873
reason: `(BuildHIR::lowerAssignment) Could not find binding for declaration.`,
885
- severity: ErrorSeverity.Invariant,
874
category: ErrorCategory.Invariant,
875
loc: id.node.loc ?? null,
876
suggestions: null,
888
const declRangeStart = declaration.parentPath.node.start!;
889
builder.errors.push({
890
reason: `Expect \`const\` declaration not to be reassigned`,
903
- severity: ErrorSeverity.InvalidJS,
891
category: ErrorCategory.Syntax,
892
loc: id.node.loc ?? null,
893
suggestions: [
935
builder.errors.push({
936
reason: `Expected variable declaration to be an identifier if no initializer was provided`,
937
description: `Got a \`${id.type}\``,
951
- severity: ErrorSeverity.InvalidJS,
938
category: ErrorCategory.Syntax,
939
loc: stmt.node.loc ?? null,
940
suggestions: null,
1043
if (stmt.node.await) {
1044
builder.errors.push({
1045
reason: `(BuildHIR::lowerStatement) Handle for-await loops`,
1060
- severity: ErrorSeverity.Todo,
1046
category: ErrorCategory.Todo,
1047
loc: stmt.node.loc ?? null,
1048
suggestions: null,
1275
if (!hasNode(handlerPath)) {
1276
builder.errors.push({
1277
reason: `(BuildHIR::lowerStatement) Handle TryStatement without a catch clause`,
1293
- severity: ErrorSeverity.Todo,
1278
category: ErrorCategory.Todo,
1279
loc: stmt.node.loc ?? null,
1280
suggestions: null,
1284
if (hasNode(stmt.get('finalizer'))) {
1285
builder.errors.push({
1286
reason: `(BuildHIR::lowerStatement) Handle TryStatement with a finalizer ('finally') clause`,
1303
- severity: ErrorSeverity.Todo,
1287
category: ErrorCategory.Todo,
1288
loc: stmt.node.loc ?? null,
1289
suggestions: null,
1377
builder.errors.push({
1378
reason: `JavaScript 'with' syntax is not supported`,
1379
description: `'with' syntax is considered deprecated and removed from JavaScript standards, consider alternatives`,
1397
- severity: ErrorSeverity.UnsupportedJS,
1380
category: ErrorCategory.UnsupportedSyntax,
1381
loc: stmtPath.node.loc ?? null,
1382
suggestions: null,
1397
builder.errors.push({
1398
reason: 'Inline `class` declarations are not supported',
1399
description: `Move class declarations outside of components/hooks`,
1418
- severity: ErrorSeverity.UnsupportedJS,
1400
category: ErrorCategory.UnsupportedSyntax,
1401
loc: stmtPath.node.loc ?? null,
1402
suggestions: null,
1426
builder.errors.push({
1427
reason:
1428
'JavaScript `import` and `export` statements may only appear at the top level of a module',
1448
- severity: ErrorSeverity.InvalidJS,
1429
category: ErrorCategory.Syntax,
1430
loc: stmtPath.node.loc ?? null,
1431
suggestions: null,
1441
builder.errors.push({
1442
reason:
1443
'TypeScript `namespace` statements may only appear at the top level of a module',
1464
- severity: ErrorSeverity.InvalidJS,
1444
category: ErrorCategory.Syntax,
1445
loc: stmtPath.node.loc ?? null,
1446
suggestions: null,
1519
*/
1520
builder.errors.push({
1521
reason: `(BuildHIR::lowerExpression) Expected Identifier, got ${key.type} key in ObjectExpression`,
1543
- severity: ErrorSeverity.Todo,
1522
category: ErrorCategory.Todo,
1523
loc: key.node.loc ?? null,
1524
suggestions: null,
1544
1545
builder.errors.push({
1546
reason: `(BuildHIR::lowerExpression) Expected Identifier, got ${key.type} key in ObjectExpression`,
1569
- severity: ErrorSeverity.Todo,
1547
category: ErrorCategory.Todo,
1548
loc: key.node.loc ?? null,
1549
suggestions: null,
1601
if (!valuePath.isExpression()) {
1602
builder.errors.push({
1603
reason: `(BuildHIR::lowerExpression) Handle ${valuePath.type} values in ObjectExpression`,
1627
- severity: ErrorSeverity.Todo,
1604
category: ErrorCategory.Todo,
1605
loc: valuePath.node.loc ?? null,
1606
suggestions: null,
1627
if (propertyPath.node.kind !== 'method') {
1628
builder.errors.push({
1629
reason: `(BuildHIR::lowerExpression) Handle ${propertyPath.node.kind} functions in ObjectExpression`,
1654
- severity: ErrorSeverity.Todo,
1630
category: ErrorCategory.Todo,
1631
loc: propertyPath.node.loc ?? null,
1632
suggestions: null,
1648
} else {
1649
builder.errors.push({
1650
reason: `(BuildHIR::lowerExpression) Handle ${propertyPath.type} properties in ObjectExpression`,
1676
- severity: ErrorSeverity.Todo,
1651
category: ErrorCategory.Todo,
1652
loc: propertyPath.node.loc ?? null,
1653
suggestions: null,
1681
} else {
1682
builder.errors.push({
1683
reason: `(BuildHIR::lowerExpression) Handle ${element.type} elements in ArrayExpression`,
1710
- severity: ErrorSeverity.Todo,
1684
category: ErrorCategory.Todo,
1685
loc: element.node.loc ?? null,
1686
suggestions: null,
1701
builder.errors.push({
1702
reason: `Expected an expression as the \`new\` expression receiver (v8 intrinsics are not supported)`,
1703
description: `Got a \`${calleePath.node.type}\``,
1731
- severity: ErrorSeverity.InvalidJS,
1704
category: ErrorCategory.Syntax,
1705
loc: calleePath.node.loc ?? null,
1706
suggestions: null,
1727
if (!calleePath.isExpression()) {
1728
builder.errors.push({
1729
reason: `Expected Expression, got ${calleePath.type} in CallExpression (v8 intrinsics not supported). This error is likely caused by a bug in React Compiler. Please file an issue`,
1758
- severity: ErrorSeverity.Todo,
1730
category: ErrorCategory.Todo,
1731
loc: calleePath.node.loc ?? null,
1732
suggestions: null,
1761
if (!leftPath.isExpression()) {
1762
builder.errors.push({
1763
reason: `(BuildHIR::lowerExpression) Expected Expression, got ${leftPath.type} lval in BinaryExpression`,
1793
- severity: ErrorSeverity.Todo,
1764
category: ErrorCategory.Todo,
1765
loc: leftPath.node.loc ?? null,
1766
suggestions: null,
1773
if (operator === '|>') {
1774
builder.errors.push({
1775
reason: `(BuildHIR::lowerExpression) Pipe operator not supported`,
1806
- severity: ErrorSeverity.Todo,
1776
category: ErrorCategory.Todo,
1777
loc: leftPath.node.loc ?? null,
1778
suggestions: null,
1802
if (last === null) {
1803
builder.errors.push({
1804
reason: `Expected sequence expression to have at least one expression`,
1836
- severity: ErrorSeverity.InvalidJS,
1805
category: ErrorCategory.Syntax,
1806
loc: expr.node.loc ?? null,
1807
suggestions: null,
2014
builder.errors.push({
2015
reason: `(BuildHIR::lowerExpression) Unsupported syntax on the left side of an AssignmentExpression`,
2016
description: `Expected an LVal, got: ${left.type}`,
2049
- severity: ErrorSeverity.Todo,
2017
category: ErrorCategory.Todo,
2018
loc: left.node.loc ?? null,
2019
suggestions: null,
2042
if (binaryOperator == null) {
2043
builder.errors.push({
2044
reason: `(BuildHIR::lowerExpression) Handle ${operator} operators in AssignmentExpression`,
2078
- severity: ErrorSeverity.Todo,
2045
category: ErrorCategory.Todo,
2046
loc: expr.node.loc ?? null,
2047
suggestions: null,
2141
default: {
2142
builder.errors.push({
2143
reason: `(BuildHIR::lowerExpression) Expected Identifier or MemberExpression, got ${expr.type} lval in AssignmentExpression`,
2178
- severity: ErrorSeverity.Todo,
2144
category: ErrorCategory.Todo,
2145
loc: expr.node.loc ?? null,
2146
suggestions: null,
2180
if (!attribute.isJSXAttribute()) {
2181
builder.errors.push({
2182
reason: `(BuildHIR::lowerExpression) Handle ${attribute.type} attributes in JSXElement`,
2218
- severity: ErrorSeverity.Todo,
2183
category: ErrorCategory.Todo,
2184
loc: attribute.node.loc ?? null,
2185
suggestions: null,
2193
if (propName.indexOf(':') !== -1) {
2194
builder.errors.push({
2195
reason: `(BuildHIR::lowerExpression) Unexpected colon in attribute name \`${propName}\``,
2232
- severity: ErrorSeverity.Todo,
2196
category: ErrorCategory.Todo,
2197
loc: namePath.node.loc ?? null,
2198
suggestions: null,
2223
if (!valueExpr.isJSXExpressionContainer()) {
2224
builder.errors.push({
2225
reason: `(BuildHIR::lowerExpression) Handle ${valueExpr.type} attribute values in JSXElement`,
2263
- severity: ErrorSeverity.Todo,
2226
category: ErrorCategory.Todo,
2227
loc: valueExpr.node?.loc ?? null,
2228
suggestions: null,
2233
if (!expression.isExpression()) {
2234
builder.errors.push({
2235
reason: `(BuildHIR::lowerExpression) Handle ${expression.type} expressions in JSXExpressionContainer within JSXElement`,
2274
- severity: ErrorSeverity.Todo,
2236
category: ErrorCategory.Todo,
2237
loc: valueExpr.node.loc ?? null,
2238
suggestions: null,
2290
for (const [name, locations] of Object.entries(fbtLocations)) {
2291
if (locations.length > 1) {
2292
CompilerError.throwDiagnostic({
2332
- severity: ErrorSeverity.Todo,
2333
- category: ErrorCategory.FBT,
2293
+ category: ErrorCategory.Todo,
2294
reason: 'Support duplicate fbt tags',
2295
description: `Support \`<${tagName}>\` tags with multiple \`<${tagName}:${name}>\` values`,
2296
details: locations.map(loc => {
2351
builder.errors.push({
2352
reason:
2353
'(BuildHIR::lowerExpression) Handle tagged template with interpolations',
2394
- severity: ErrorSeverity.Todo,
2354
category: ErrorCategory.Todo,
2355
loc: exprPath.node.loc ?? null,
2356
suggestions: null,
2369
builder.errors.push({
2370
reason:
2371
'(BuildHIR::lowerExpression) Handle tagged template where cooked value is different from raw value',
2413
- severity: ErrorSeverity.Todo,
2372
category: ErrorCategory.Todo,
2373
loc: exprPath.node.loc ?? null,
2374
suggestions: null,
2391
if (subexprs.length !== quasis.length - 1) {
2392
builder.errors.push({
2393
reason: `Unexpected quasi and subexpression lengths in template literal`,
2436
- severity: ErrorSeverity.InvalidJS,
2394
category: ErrorCategory.Syntax,
2395
loc: exprPath.node.loc ?? null,
2396
suggestions: null,
2401
if (subexprs.some(e => !e.isExpression())) {
2402
builder.errors.push({
2403
reason: `(BuildHIR::lowerAssignment) Handle TSType in TemplateLiteral.`,
2447
- severity: ErrorSeverity.Todo,
2404
category: ErrorCategory.Todo,
2405
loc: exprPath.node.loc ?? null,
2406
suggestions: null,
2443
} else {
2444
builder.errors.push({
2445
reason: `Only object properties can be deleted`,
2490
- severity: ErrorSeverity.InvalidJS,
2446
category: ErrorCategory.Syntax,
2447
loc: expr.node.loc ?? null,
2448
suggestions: [
2458
} else if (expr.node.operator === 'throw') {
2459
builder.errors.push({
2460
reason: `Throw expressions are not supported`,
2506
- severity: ErrorSeverity.InvalidJS,
2461
category: ErrorCategory.Syntax,
2462
loc: expr.node.loc ?? null,
2463
suggestions: [
2579
if (!argument.isIdentifier()) {
2580
builder.errors.push({
2581
reason: `(BuildHIR::lowerExpression) Handle UpdateExpression with ${argument.type} argument`,
2628
- severity: ErrorSeverity.Todo,
2582
category: ErrorCategory.Todo,
2583
loc: exprPath.node.loc ?? null,
2584
suggestions: null,
2587
} else if (builder.isContextIdentifier(argument)) {
2588
builder.errors.push({
2589
reason: `(BuildHIR::lowerExpression) Handle UpdateExpression to variables captured within lambdas.`,
2637
- severity: ErrorSeverity.Todo,
2590
category: ErrorCategory.Todo,
2591
loc: exprPath.node.loc ?? null,
2592
suggestions: null,
2607
if (!builder.errors.hasErrors()) {
2608
builder.errors.push({
2609
reason: `(BuildHIR::lowerExpression) Found an invalid UpdateExpression without a previously reported error`,
2658
- severity: ErrorSeverity.Invariant,
2610
category: ErrorCategory.Invariant,
2611
loc: exprLoc,
2612
suggestions: null,
2616
} else if (lvalue.kind === 'Global') {
2617
builder.errors.push({
2618
reason: `(BuildHIR::lowerExpression) Support UpdateExpression where argument is a global`,
2668
- severity: ErrorSeverity.Todo,
2619
category: ErrorCategory.Todo,
2620
loc: exprLoc,
2621
suggestions: null,
2671
2672
builder.errors.push({
2673
reason: `(BuildHIR::lowerExpression) Handle MetaProperty expressions other than import.meta`,
2724
- severity: ErrorSeverity.Todo,
2674
category: ErrorCategory.Todo,
2675
loc: exprPath.node.loc ?? null,
2676
suggestions: null,
2680
default: {
2681
builder.errors.push({
2682
reason: `(BuildHIR::lowerExpression) Handle ${exprPath.type} expressions`,
2734
- severity: ErrorSeverity.Todo,
2683
category: ErrorCategory.Todo,
2684
loc: exprPath.node.loc ?? null,
2685
suggestions: null,
2977
if (!isReorderableExpression(builder, expr, true)) {
2978
builder.errors.push({
2979
reason: `(BuildHIR::node.lowerReorderableExpression) Expression type \`${expr.type}\` cannot be safely reordered`,
3032
- severity: ErrorSeverity.Todo,
2980
category: ErrorCategory.Todo,
2981
loc: expr.node.loc ?? null,
2982
suggestions: null,
3173
} else {
3174
builder.errors.push({
3175
reason: `(BuildHIR::lowerExpression) Handle ${argPath.type} arguments in CallExpression`,
3229
- severity: ErrorSeverity.Todo,
3176
category: ErrorCategory.Todo,
3177
loc: argPath.node.loc ?? null,
3178
suggestions: null,
3208
} else {
3209
builder.errors.push({
3210
reason: `(BuildHIR::lowerMemberExpression) Handle ${propertyNode.type} property`,
3265
- severity: ErrorSeverity.Todo,
3211
category: ErrorCategory.Todo,
3212
loc: propertyNode.node.loc ?? null,
3213
suggestions: null,
3229
if (!propertyNode.isExpression()) {
3230
builder.errors.push({
3231
reason: `(BuildHIR::lowerMemberExpression) Expected Expression, got ${propertyNode.type} property`,
3287
- severity: ErrorSeverity.Todo,
3232
category: ErrorCategory.Todo,
3233
loc: propertyNode.node.loc ?? null,
3234
suggestions: null,
3288
builder.errors.push({
3289
reason: `Expected JSXNamespacedName to have no colons in the namespace or name`,
3290
description: `Got \`${namespace}\` : \`${name}\``,
3347
- severity: ErrorSeverity.InvalidJS,
3291
category: ErrorCategory.Syntax,
3292
loc: exprPath.node.loc ?? null,
3293
suggestions: null,
3302
} else {
3303
builder.errors.push({
3304
reason: `(BuildHIR::lowerJsxElementName) Handle ${exprPath.type} tags`,
3362
- severity: ErrorSeverity.Todo,
3305
category: ErrorCategory.Todo,
3306
loc: exprPath.node.loc ?? null,
3307
suggestions: null,
3400
} else {
3401
builder.errors.push({
3402
reason: `(BuildHIR::lowerJsxElement) Unhandled JsxElement, got: ${exprPath.type}`,
3461
- severity: ErrorSeverity.Todo,
3403
category: ErrorCategory.Todo,
3404
loc: exprPath.node.loc ?? null,
3405
suggestions: null,
3587
reason: `The 'eval' function is not supported`,
3588
description:
3589
'Eval is an anti-pattern in JavaScript, and the code executed cannot be evaluated by React Compiler',
3649
- severity: ErrorSeverity.UnsupportedJS,
3590
category: ErrorCategory.UnsupportedSyntax,
3591
loc: exprPath.node.loc ?? null,
3592
suggestions: null,
3643
// Else its an internal error bc we couldn't find the binding
3644
builder.errors.push({
3645
reason: `(BuildHIR::lowerAssignment) Could not find binding for declaration.`,
3706
- severity: ErrorSeverity.Invariant,
3646
category: ErrorCategory.Invariant,
3647
loc: path.node.loc ?? null,
3648
suggestions: null,
3655
) {
3656
builder.errors.push({
3657
reason: `Cannot reassign a \`const\` variable`,
3719
- severity: ErrorSeverity.InvalidJS,
3658
category: ErrorCategory.Syntax,
3659
loc: path.node.loc ?? null,
3660
description:
3712
if (kind === InstructionKind.Const && !isHoistedIdentifier) {
3713
builder.errors.push({
3714
reason: `Expected \`const\` declaration not to be reassigned`,
3777
- severity: ErrorSeverity.InvalidJS,
3715
category: ErrorCategory.Syntax,
3716
loc: lvalue.node.loc ?? null,
3717
suggestions: null,
3726
) {
3727
builder.errors.push({
3728
reason: `Unexpected context variable kind`,
3792
- severity: ErrorSeverity.InvalidJS,
3729
category: ErrorCategory.Syntax,
3730
loc: lvalue.node.loc ?? null,
3731
suggestions: null,
3797
} else {
3798
builder.errors.push({
3799
reason: `(BuildHIR::lowerAssignment) Handle ${property.type} properties in MemberExpression`,
3864
- severity: ErrorSeverity.Todo,
3800
category: ErrorCategory.Todo,
3801
loc: property.node.loc ?? null,
3802
suggestions: null,
3809
builder.errors.push({
3810
reason:
3811
'(BuildHIR::lowerAssignment) Expected private name to appear as a non-computed property',
3877
- severity: ErrorSeverity.Todo,
3812
category: ErrorCategory.Todo,
3813
loc: property.node.loc ?? null,
3814
suggestions: null,
3874
continue;
3875
} else if (identifier.kind === 'Global') {
3876
builder.errors.push({
3943
- severity: ErrorSeverity.Todo,
3877
category: ErrorCategory.Todo,
3878
reason:
3879
'Expected reassignment of globals to enable forceTemporaries',
3913
continue;
3914
} else if (identifier.kind === 'Global') {
3915
builder.errors.push({
3983
- severity: ErrorSeverity.Todo,
3916
category: ErrorCategory.Todo,
3917
reason:
3918
'Expected reassignment of globals to enable forceTemporaries',
3986
if (!argument.isIdentifier()) {
3987
builder.errors.push({
3988
reason: `(BuildHIR::lowerAssignment) Handle ${argument.node.type} rest element in ObjectPattern`,
4057
- severity: ErrorSeverity.Todo,
3989
category: ErrorCategory.Todo,
3990
loc: argument.node.loc ?? null,
3991
suggestions: null,
4017
continue;
4018
} else if (identifier.kind === 'Global') {
4019
builder.errors.push({
4089
- severity: ErrorSeverity.Todo,
4020
category: ErrorCategory.Todo,
4021
reason:
4022
'Expected reassignment of globals to enable forceTemporaries',
4034
if (!property.isObjectProperty()) {
4035
builder.errors.push({
4036
reason: `(BuildHIR::lowerAssignment) Handle ${property.type} properties in ObjectPattern`,
4107
- severity: ErrorSeverity.Todo,
4037
category: ErrorCategory.Todo,
4038
loc: property.node.loc ?? null,
4039
suggestions: null,
4043
if (property.node.computed) {
4044
builder.errors.push({
4045
reason: `(BuildHIR::lowerAssignment) Handle computed properties in ObjectPattern`,
4117
- severity: ErrorSeverity.Todo,
4046
category: ErrorCategory.Todo,
4047
loc: property.node.loc ?? null,
4048
suggestions: null,
4057
if (!element.isLVal()) {
4058
builder.errors.push({
4059
reason: `(BuildHIR::lowerAssignment) Expected object property value to be an LVal, got: ${element.type}`,
4132
- severity: ErrorSeverity.Todo,
4060
category: ErrorCategory.Todo,
4061
loc: element.node.loc ?? null,
4062
suggestions: null,
4079
continue;
4080
} else if (identifier.kind === 'Global') {
4081
builder.errors.push({
4155
- severity: ErrorSeverity.Todo,
4082
category: ErrorCategory.Todo,
4083
reason:
4084
'Expected reassignment of globals to enable forceTemporaries',
4228
default: {
4229
builder.errors.push({
4230
reason: `(BuildHIR::lowerAssignment) Handle ${lvaluePath.type} assignments`,
4305
- severity: ErrorSeverity.Todo,
4231
category: ErrorCategory.Todo,
4232
loc: lvaluePath.node.loc ?? null,
4233
suggestions: null,