Improve typedef for callback used as parameter#4533
Conversation
JoshuaKGoldberg
left a comment
There was a problem hiding this comment.
The code looks good to me (nice clean implementation!), but since this is a breaking change, I think we'd need to wait until 6.0 to merge in.
/cc @adidahiya
|
@JoshuaKGoldberg There was no consistency in this example So you can think it was a bug to not detect the error for callback return type. |
|
@JoshuaKGoldberg @adidahiya Is it a breaking change or a bug fix ? I think it's debatable. When is the v6 supposed to be released ? |
Both? 😄 Even if this is considered a bug, it's a pretty big change. If a project already enables the rule under the expectation that scenario of arrow lambdas passed to methods shouldn't be flagged, then it starts flagging them, it'd become more difficult to migrate to the next TSLint version (even if this is desirable). |
adidahiya
left a comment
There was a problem hiding this comment.
yes this is a breaking change and if you want to merge this it needs to be under a new option. I suggest naming the option check-call-signatures
| setTimeout(function() {}, 1000); | ||
|
|
||
| const foo = n => n+1 | ||
| ~~~~ [expected arrow-call-signature to have a typedef] |
There was a problem hiding this comment.
why does the failure range extend to the =? that seems a little off
There was a problem hiding this comment.
In const foo = n => n+1 location.pos = 11
in const foo = (n => n+1) location.pos = 13
I didn't touch this part
| ~~~~ [expected arrow-call-signature to have a typedef] | ||
|
|
||
| someFunc(n => n+1); | ||
| ~~~ [expected arrow-call-signature to have a typedef] |
There was a problem hiding this comment.
same here, feels strange to include the ( in the failure range
There was a problem hiding this comment.
It's made for (n) => n+1
.....................~~~ [expected arrow-call-signature to have a typedef]
The Node is only n.
But the code use this.addFailure(location.pos - 1, location.end + 1, failure);
I didn't touch this part
|
@JoshuaKGoldberg @adidahiya I agree it will be easier with something like A bug fix is always a breaking change. Before the rule had false positive, now it correctly find the errors. But if you prefer, you can wait for the next major version. But in this case I have a question. When is it planned ? There is already a lot of Breaking changes waiting for it. |
|
@VincentLanglet great question! 😄 just filed #4811 to discuss. |
|
@JoshuaKGoldberg Great ! Is this PR ready for 6.0.0 version ? |
|
Deferring to @adidahiya for review now that we're ready for breaking changes (#4811). |
|
thanks for the PR @VincentLanglet! |
PR checklist
Overview of change:
Typedef
arrow-call-signaturenow return error forIs there anything you'd like reviewers to focus on?
Actually, with all typedef rules actives.
After the PR, error everywhere ; for consistency.
Here #2000 (comment), a suggestion is a
child-arrow-call-signature. That's a possibility, but we have to (for consistency) add achild-arrow-parametertoo, which is also a suggestion here #813.We, then, have to decide before if we want also a
child-parameterand achild-call-signature.I can do it if you prefer.
Personally I don't think all these options are necessary. The typedef is a style rule for people who want to type the code (more like a documentation) even if it's not necessary thanks to inference. If you don't want to be redundant and infer as much type you can, just use the
noImplicitAnyoption intsconfig.CHANGELOG.md entry:
[enhancement]
typedefrulearrow-call-signatureoption is more consistent in reporting errors on lambdas and will flag more violations that were missed in the previous rule implementation.