use rustc_span::BytePos;
declare_clippy_lint! {
- /// **What it does:** Checks for usage of `*&` and `*&mut` in expressions.
+ /// ### What it does
+ /// Checks for usage of `*&` and `*&mut` in expressions.
///
- /// **Why is this bad?** Immediately dereferencing a reference is no-op and
+ /// ### Why is this bad?
+ /// Immediately dereferencing a reference is no-op and
/// makes the code less clear.
///
- /// **Known problems:** Multiple dereference/addrof pairs are not handled so
+ /// ### Known problems
+ /// Multiple dereference/addrof pairs are not handled so
/// the suggested fix for `x = **&&y` is `x = *&y`, which is still incorrect.
///
- /// **Example:**
+ /// ### Example
/// ```rust,ignore
/// // Bad
/// let a = f(*&mut b);
then {
let mut applicability = Applicability::MachineApplicable;
let sugg = if e.span.from_expansion() {
- if let Ok(macro_source) = cx.sess.source_map().span_to_snippet(e.span) {
+ #[allow(clippy::option_if_let_else)]
+ if let Some(macro_source) = snippet_opt(cx, e.span) {
// Remove leading whitespace from the given span
// e.g: ` $visitor` turns into `$visitor`
let trim_leading_whitespaces = |span| {
}
declare_clippy_lint! {
- /// **What it does:** Checks for references in expressions that use
+ /// ### What it does
+ /// Checks for references in expressions that use
/// auto dereference.
///
- /// **Why is this bad?** The reference is a no-op and is automatically
+ /// ### Why is this bad?
+ /// The reference is a no-op and is automatically
/// dereferenced by the compiler and makes the code less clear.
///
- /// **Example:**
+ /// ### Example
/// ```rust
/// struct Point(u32, u32);
/// let point = Point(30, 20);