Re: RFC: Marking return values as important (#[\NoDiscard])
| From: | Rob Landers | Date: | Wed, 29 Jan 2025 20:16:11 +0000 |
| Subject: | Re: RFC: Marking return values as important (#[\NoDiscard]) | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-126235@lists.php.net to get a copy of this message | ||
On Wed, Jan 29, 2025, at 20:50, Tim Düsterhus wrote:
> Hi
>
> On 1/29/25 20:31, Rob Landers wrote:
> > This looks promising!
> >
> > Why do we need the (void) cast? Wouldn't "@" work and avoid a BC issue?
>
> The
@ operator also suppresses any other warning or notice
> within the
> call chain. That is likely undesirable because it might hide issues one
> is interested in. See this example (https://3v4l.org/NDtR7):
>
> <?php
> function inner() {
> var_dump($undefined);
> }
>
> function outer() {
> inner();
> }
>
> outer();
> outer();
> @outer();
>
> The (void) cast makes the intent of not being interested in the
> return
> value clear. In C casting to (void) is an established pattern
> of
> "using" a value that the compiler would otherwise consider unused.
> Likewise will the void operator suppress the TypeScript-ESLint
> warning
> of not using returned Promise:
>
> https://typescript-eslint.io/rules/no-floating-promises/#ignorevoid
>
> Best regards
> Tim Düsterhus
>
Hi Tim,
I understand what you are saying, but I can also just remove the warning via:
$_ = outer;
Which, to me, is clearer on the intent than (void)outer(); It also happens to make the diffs more
natural looking when and if the return value gets used during a code review. I'll also note
that having (void) doesn't preclude me from using $_ either.
I was mostly just curious as to the reasoning; I don't like it, but it makes sense.
Best of luck!
— Rob