@@ -1782,13 +1782,20 @@ pub(crate) enum InvalidNanComparisonsSuggestion {
17821782#[ derive( LintDiagnostic ) ]
17831783pub ( crate ) enum AmbiguousWidePointerComparisons < ' a > {
17841784 #[ diag( lint_ambiguous_wide_pointer_comparisons) ]
1785- Spanful {
1785+ SpanfulEq {
17861786 #[ subdiagnostic]
17871787 addr_suggestion : AmbiguousWidePointerComparisonsAddrSuggestion < ' a > ,
17881788 #[ subdiagnostic]
17891789 addr_metadata_suggestion : Option < AmbiguousWidePointerComparisonsAddrMetadataSuggestion < ' a > > ,
17901790 } ,
17911791 #[ diag( lint_ambiguous_wide_pointer_comparisons) ]
1792+ SpanfulCmp {
1793+ #[ subdiagnostic]
1794+ cast_suggestion : AmbiguousWidePointerComparisonsCastSuggestion < ' a > ,
1795+ #[ subdiagnostic]
1796+ expect_suggestion : AmbiguousWidePointerComparisonsExpectSuggestion < ' a > ,
1797+ } ,
1798+ #[ diag( lint_ambiguous_wide_pointer_comparisons) ]
17921799 #[ help( lint_addr_metadata_suggestion) ]
17931800 #[ help( lint_addr_suggestion) ]
17941801 Spanless ,
@@ -1816,48 +1823,67 @@ pub(crate) struct AmbiguousWidePointerComparisonsAddrMetadataSuggestion<'a> {
18161823}
18171824
18181825#[ derive( Subdiagnostic ) ]
1819- pub ( crate ) enum AmbiguousWidePointerComparisonsAddrSuggestion < ' a > {
1820- #[ multipart_suggestion(
1821- lint_addr_suggestion,
1822- style = "verbose" ,
1823- // FIXME(#53934): make machine-applicable again
1824- applicability = "maybe-incorrect"
1825- ) ]
1826- AddrEq {
1827- ne : & ' a str ,
1828- deref_left : & ' a str ,
1829- deref_right : & ' a str ,
1830- l_modifiers : & ' a str ,
1831- r_modifiers : & ' a str ,
1832- #[ suggestion_part( code = "{ne}std::ptr::addr_eq({deref_left}" ) ]
1833- left : Span ,
1834- #[ suggestion_part( code = "{l_modifiers}, {deref_right}" ) ]
1835- middle : Span ,
1836- #[ suggestion_part( code = "{r_modifiers})" ) ]
1837- right : Span ,
1838- } ,
1839- #[ multipart_suggestion(
1840- lint_addr_suggestion,
1841- style = "verbose" ,
1842- // FIXME(#53934): make machine-applicable again
1843- applicability = "maybe-incorrect"
1826+ #[ multipart_suggestion(
1827+ lint_addr_suggestion,
1828+ style = "verbose" ,
1829+ // FIXME(#53934): make machine-applicable again
1830+ applicability = "maybe-incorrect"
1831+ ) ]
1832+ pub ( crate ) struct AmbiguousWidePointerComparisonsAddrSuggestion < ' a > {
1833+ pub ( crate ) ne : & ' a str ,
1834+ pub ( crate ) deref_left : & ' a str ,
1835+ pub ( crate ) deref_right : & ' a str ,
1836+ pub ( crate ) l_modifiers : & ' a str ,
1837+ pub ( crate ) r_modifiers : & ' a str ,
1838+ #[ suggestion_part( code = "{ne}std::ptr::addr_eq({deref_left}" ) ]
1839+ pub ( crate ) left : Span ,
1840+ #[ suggestion_part( code = "{l_modifiers}, {deref_right}" ) ]
1841+ pub ( crate ) middle : Span ,
1842+ #[ suggestion_part( code = "{r_modifiers})" ) ]
1843+ pub ( crate ) right : Span ,
1844+ }
1845+
1846+ #[ derive( Subdiagnostic ) ]
1847+ #[ multipart_suggestion(
1848+ lint_cast_suggestion,
1849+ style = "verbose" ,
1850+ // FIXME(#53934): make machine-applicable again
1851+ applicability = "maybe-incorrect"
1852+ ) ]
1853+ pub ( crate ) struct AmbiguousWidePointerComparisonsCastSuggestion < ' a > {
1854+ pub ( crate ) deref_left : & ' a str ,
1855+ pub ( crate ) deref_right : & ' a str ,
1856+ pub ( crate ) paren_left : & ' a str ,
1857+ pub ( crate ) paren_right : & ' a str ,
1858+ pub ( crate ) l_modifiers : & ' a str ,
1859+ pub ( crate ) r_modifiers : & ' a str ,
1860+ #[ suggestion_part( code = "({deref_left}" ) ]
1861+ pub ( crate ) left_before : Option < Span > ,
1862+ #[ suggestion_part( code = "{l_modifiers}{paren_left}.cast::<()>()" ) ]
1863+ pub ( crate ) left_after : Span ,
1864+ #[ suggestion_part( code = "({deref_right}" ) ]
1865+ pub ( crate ) right_before : Option < Span > ,
1866+ #[ suggestion_part( code = "{r_modifiers}{paren_right}.cast::<()>()" ) ]
1867+ pub ( crate ) right_after : Span ,
1868+ }
1869+
1870+ #[ derive( Subdiagnostic ) ]
1871+ #[ multipart_suggestion(
1872+ lint_expect_suggestion,
1873+ style = "verbose" ,
1874+ // FIXME(#53934): make machine-applicable again
1875+ applicability = "maybe-incorrect"
1876+ ) ]
1877+ pub ( crate ) struct AmbiguousWidePointerComparisonsExpectSuggestion < ' a > {
1878+ pub ( crate ) paren_left : & ' a str ,
1879+ pub ( crate ) paren_right : & ' a str ,
1880+ // FIXME(#127436): Adjust once resolved
1881+ #[ suggestion_part(
1882+ code = r#"{{ #[expect(ambiguous_wide_pointer_comparisons, reason = "...")] {paren_left}"#
18441883 ) ]
1845- Cast {
1846- deref_left : & ' a str ,
1847- deref_right : & ' a str ,
1848- paren_left : & ' a str ,
1849- paren_right : & ' a str ,
1850- l_modifiers : & ' a str ,
1851- r_modifiers : & ' a str ,
1852- #[ suggestion_part( code = "({deref_left}" ) ]
1853- left_before : Option < Span > ,
1854- #[ suggestion_part( code = "{l_modifiers}{paren_left}.cast::<()>()" ) ]
1855- left_after : Span ,
1856- #[ suggestion_part( code = "({deref_right}" ) ]
1857- right_before : Option < Span > ,
1858- #[ suggestion_part( code = "{r_modifiers}{paren_right}.cast::<()>()" ) ]
1859- right_after : Span ,
1860- } ,
1884+ pub ( crate ) before : Span ,
1885+ #[ suggestion_part( code = "{paren_right} }}" ) ]
1886+ pub ( crate ) after : Span ,
18611887}
18621888
18631889#[ derive( LintDiagnostic ) ]
0 commit comments