error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:15:8
   |
LL |     if f != None { "yay" } else { "nay" }
   |        ^^^^^^^^^ help: use `Option::is_some()` instead: `f.is_some()`
   |
   = note: `-D clippy::partialeq-to-none` implied by `-D warnings`

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:45:13
   |
LL |     let _ = x == None;
   |             ^^^^^^^^^ help: use `Option::is_none()` instead: `x.is_none()`

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:46:13
   |
LL |     let _ = x != None;
   |             ^^^^^^^^^ help: use `Option::is_some()` instead: `x.is_some()`

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:47:13
   |
LL |     let _ = None == x;
   |             ^^^^^^^^^ help: use `Option::is_none()` instead: `x.is_none()`

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:48:13
   |
LL |     let _ = None != x;
   |             ^^^^^^^^^ help: use `Option::is_some()` instead: `x.is_some()`

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:50:8
   |
LL |     if foobar() == None {}
   |        ^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `foobar().is_none()`

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:52:8
   |
LL |     if bar().ok() != None {}
   |        ^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `bar().ok().is_some()`

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:54:13
   |
LL |     let _ = Some(1 + 2) != None;
   |             ^^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `Some(1 + 2).is_some()`

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:56:13
   |
LL |     let _ = { Some(0) } == None;
   |             ^^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `{ Some(0) }.is_none()`

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:58:13
   |
LL |       let _ = {
   |  _____________^
LL | |         /*
LL | |           This comment runs long
LL | |         */
LL | |         Some(1)
LL | |     } != None;
   | |_____________^
   |
help: use `Option::is_some()` instead
   |
LL ~     let _ = {
LL +         /*
LL +           This comment runs long
LL +         */
LL +         Some(1)
LL ~     }.is_some();
   |

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:68:13
   |
LL |     let _ = optref() == &&None;
   |             ^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `optref().is_none()`

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:69:13
   |
LL |     let _ = &&None != optref();
   |             ^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `optref().is_some()`

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:70:13
   |
LL |     let _ = **optref() == None;
   |             ^^^^^^^^^^^^^^^^^^ help: use `Option::is_none()` instead: `optref().is_none()`

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:71:13
   |
LL |     let _ = &None != *optref();
   |             ^^^^^^^^^^^^^^^^^^ help: use `Option::is_some()` instead: `optref().is_some()`

error: binary comparison to literal `Option::None`
  --> $DIR/partialeq_to_none.rs:74:13
   |
LL |     let _ = None != *x;
   |             ^^^^^^^^^^ help: use `Option::is_some()` instead: `(*x).is_some()`

error: aborting due to 15 previous errors

