deno_lint
deno_lint copied to clipboard
Rule against `await await`
While the number of await
keywords can affect which promise job is executed first (because promise jobs have to be enqued even if the promise is fulfilled), in sane code you usually only ever want one await
keyword for one expression. And multiple await
keywords are usually just an accident, so it would be nice to have a rule to detect this.
E.g. Invalid:
await await fetch('/test');
Valid:
await fetch('/test');
Sounds reasonable, PRs are welcome
Has anyone ever written this kind of code though? Is a rule worth it considering the extra time necessary to check for this condition? Perhaps there is precedence in other linters?
It seems people write this kind of code: https://github.com/search?type=code&q=%22await+await+%22+language%3AJavaScript&l=JavaScript (maybe when coming from other languages like c# where this is necessary)
I have written this code by accident ... you can easily end up with await await
when copy'n'pasting code.
Maybe deno fmt should just remove multiple awaits.
As I explained in the issue description await await
can result in different behavior than just await
, so I think this change would be too dangerous for deno fmt
, which I'd expect to never change the semantics of code.
I'm surprised the tsc warning isn't shown in this case
'await' has no effect on the type of this expression. deno-ts(80007)
While the number of
await
keywords can affect which promise job is executed first
Does that really happen when await
ing a non-promise?
I'm surprised the tsc warning isn't shown in this case
Oh, ... yeah me too. In case we get that warning to work then this lint is probably redundant.
Does that really happen when awaiting a non-promise?
Yes, according to the ECMAScript standard it even must happen.
It does affect it, but I wouldn't consider it too dangerous. That said, considering it does change execution that's reasonable to not do it for formatting.
I'm surprised the tsc warning isn't shown in this case
Considering this is already handled by tsc, I think we should not add this to deno_lint. I'm going to close this issue.
I guess we should open a new issue at denoland/deno
about that tsc warning not being reported for await await fetch('/test');
?
I guess we should open a new issue at denoland/deno about that tsc warning not being reported for await await fetch('/test');?
It is reported as a warning in the editor.
But not by deno check
?
Ah, seems to work inconsistently:
Oh yeah. Looks like typescript is only reporting this as a suggestion diagnostic, which we don't surface except in the editor. Perhaps it being reported via deno lint would still be good. I'm going to reopen.
Slightly getting off-topic but would it make sense to add a deno check
flag to also report suggestion diagnostics? Although it seems like the tsc
CLI doesn't have such a flag.