Issue #15848 has been updated by sos4nt (Stefan Sch=FC=DFler).


shevegen (Robert A. Heiler) wrote:
> I can't think of a simple way to controls warnings though :( - I guess if=
 we may have some
> simple way, somewhat similar to frozen-string literals true/false, that c=
ould solve quite
> a bit in this regard.

A per-file setting is too broad. Given:
```ruby
if (a =3D foo)
  do_this if a =3D=3D x
  do_that if a =3D y
end
```
I wanted Ruby to still warn me on the `a =3D y` part.

----------------------------------------
Feature #15848: Silence warning when conditional assignments are wrapped in=
 parentheses
https://bugs.ruby-lang.org/issues/15848#change-78009

* Author: sos4nt (Stefan Sch=FC=DFler)
* Status: Open
* Priority: Normal
* Assignee: =

* Target version: =

----------------------------------------
Sometime it's convenient to have an assignment in an `if`-condition. The Ru=
by documentation even contains an example showing this *"most common use of=
 side-effect"* practice:

http://ruby-doc.org/core-2.6.3/doc/syntax/control_expressions_rdoc.html#lab=
el-if+Expression
```ruby
if a =3D object.some_value
  # do something to a
end
```

Running that code however results in a warning:

> warning: found =3D in conditional, should be =3D=3D

It's very unfortunate that the Ruby docs contain example code that the pars=
er complains about. And it's unfortunate that we can't make use of conditio=
nal assignments without getting warnings or turning off warnings.

I propose an obvious change to the current warning mechanism:

**Don't show the warning when the assignment is wrapped in parentheses.**

```ruby
if a =3D object.some_value
  # warning
end

if (a =3D object.some_value)
  # no warning
end
```

This is the way RoboCop already works and it's also a known workaround from=
 other languages.

It would also allow the documentation to contain a warning-free example.



-- =

https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=3Dunsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>