compiler: Add todo for getter/setter syntax

We were missing a check that ObjectMethods are not getters or setters. In our experience this is pretty rare within React components and hooks themselves, so let's start with a todo.

Closes #29586

[ghstack-poisoned]
This commit is contained in:
Joe Savona
2024-05-25 22:24:37 +01:00
parent a15a43e7df
commit 9bd33c975c
5 changed files with 119 additions and 0 deletions
@@ -1520,6 +1520,15 @@ function lowerExpression(
place,
});
} else if (propertyPath.isObjectMethod()) {
if (propertyPath.node.kind !== "method") {
builder.errors.push({
reason: `(BuildHIR::lowerExpression) Handle ${propertyPath.node.kind} functions in ObjectExpression`,
severity: ErrorSeverity.Todo,
loc: propertyPath.node.loc ?? null,
suggestions: null,
});
continue;
}
const method = lowerObjectMethod(builder, propertyPath);
const place = lowerValueToTemporary(builder, method);
const loweredKey = lowerObjectPropertyKey(builder, propertyPath);
@@ -0,0 +1,39 @@
## Input
```javascript
function Component({ value }) {
const object = {
get value() {
return value;
},
};
return <div>{object.value}</div>;
}
export const FIXTURE_ENTRYPOINT = {
fn: foo,
params: [{ value: 0 }],
sequentialRenders: [{ value: 1 }, { value: 2 }],
};
```
## Error
```
1 | function Component({ value }) {
2 | const object = {
> 3 | get value() {
| ^^^^^^^^^^^^^
> 4 | return value;
| ^^^^^^^^^^^^^^^^^^^
> 5 | },
| ^^^^^^ Todo: (BuildHIR::lowerExpression) Handle get functions in ObjectExpression (3:5)
6 | };
7 | return <div>{object.value}</div>;
8 | }
```
@@ -0,0 +1,14 @@
function Component({ value }) {
const object = {
get value() {
return value;
},
};
return <div>{object.value}</div>;
}
export const FIXTURE_ENTRYPOINT = {
fn: foo,
params: [{ value: 0 }],
sequentialRenders: [{ value: 1 }, { value: 2 }],
};
@@ -0,0 +1,41 @@
## Input
```javascript
function Component(props) {
let value;
const object = {
set value(v) {
value = v;
},
};
object.value = props.value;
return <div>{value}</div>;
}
export const FIXTURE_ENTRYPOINT = {
fn: foo,
params: [{ value: 0 }],
sequentialRenders: [{ value: 1 }, { value: 2 }],
};
```
## Error
```
2 | let value;
3 | const object = {
> 4 | set value(v) {
| ^^^^^^^^^^^^^^
> 5 | value = v;
| ^^^^^^^^^^^^^^^^
> 6 | },
| ^^^^^^ Todo: (BuildHIR::lowerExpression) Handle set functions in ObjectExpression (4:6)
7 | };
8 | object.value = props.value;
9 | return <div>{value}</div>;
```
@@ -0,0 +1,16 @@
function Component(props) {
let value;
const object = {
set value(v) {
value = v;
},
};
object.value = props.value;
return <div>{value}</div>;
}
export const FIXTURE_ENTRYPOINT = {
fn: foo,
params: [{ value: 0 }],
sequentialRenders: [{ value: 1 }, { value: 2 }],
};