-
Notifications
You must be signed in to change notification settings - Fork 481
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Updating setter function's parameter cause invalid output #567
Comments
I believe that JavaScript setters are only allowed to have one formal parameter. So recast is seeing the second parameter and saying “okay, obviously not a setter, here. I’ll create a regular function declaration instead”.Sent from my iPhoneOn Sep 9, 2023, at 12:18, Pionxzh ***@***.***> wrote:
Adding/removing any parameter in an object's setter function generates wrong output.
Transform
export default function transformer(file, api) {
const j = api.jscodeshift;
return j(file.source)
.find(j.FunctionExpression)
.forEach(path => {
path.node.params.push(j.identifier('test'))
})
.toSource();
}
Input
const obj = {
set field (num) {}
};
Expected Output
const obj = {
set field (num, test) {}
};
Actual output
const obj = {
set field function(num, test) {}
};
path.node.params.splice(0) can also trigger the error.
It can be verified on astexplorer.
Hot Fix
You can manually fix it by recreating the Property
if (j.Property.check(path.parentPath.node)) {
const newProperty = j.property(
path.parentPath.node.kind,
path.parentPath.node.key,
j.functionExpression(
path.node.id,
path.node.params,
path.node.body,
path.node.generator,
path.node.expression,
),
)
path.parentPath.replace(newProperty)
}
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you are subscribed to this thread.Message ID: ***@***.***>
|
@ElonVolo I'm not familiar with how recast handles it, but removing the parameter can also trigger the error. path.node.params.splice(0) |
Setters are supposed to have exactly one parameter. Any more or less and you’re trying to make the language do something it wasn’t designed to do.Sent from my iPhoneOn Sep 10, 2023, at 23:40, Pionxzh ***@***.***> wrote:
@ElonVolo I'm not familiar with how recast handles it, but removing the parameter can also trigger the error.
path.node.params.splice(0)
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you were mentioned.Message ID: ***@***.***>
|
Let me provide another example that alters the parameter with an assignment pattern. path.node.params.splice(0, 1, j.assignmentPattern(j.identifier('num'), j.literal(1))) This also generate wrong output.
|
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Adding/removing any parameter in an object's setter function generates wrong output.
Transform
Input
Expected Output
Actual Output
path.node.params.splice(0)
can also trigger the error.It can be verified on astexplorer.
Hot Fix
You can manually fix it by recreating the
Property
The text was updated successfully, but these errors were encountered: