@@ -12,7 +12,7 @@ use rustc_lexer::{tokenize, TokenKind};
12
12
use rustc_lint:: { LateContext , LateLintPass , LintContext } ;
13
13
use rustc_middle:: lint:: in_external_macro;
14
14
use rustc_session:: { declare_tool_lint, impl_lint_pass} ;
15
- use rustc_span:: { BytePos , Pos , Span , SyntaxContext } ;
15
+ use rustc_span:: { BytePos , Pos , RelativeBytePos , Span , SyntaxContext } ;
16
16
17
17
declare_clippy_lint ! {
18
18
/// ### What it does
@@ -490,7 +490,7 @@ fn item_has_safety_comment(cx: &LateContext<'_>, item: &hir::Item<'_>) -> HasSaf
490
490
match text_has_safety_comment (
491
491
src,
492
492
& lines[ comment_start_line. line + 1 ..=unsafe_line. line ] ,
493
- unsafe_line. sf . start_pos . to_usize ( ) ,
493
+ unsafe_line. sf . start_pos ,
494
494
) {
495
495
Some ( b) => HasSafetyComment :: Yes ( b) ,
496
496
None => HasSafetyComment :: No ,
@@ -534,7 +534,7 @@ fn stmt_has_safety_comment(cx: &LateContext<'_>, span: Span, hir_id: HirId) -> H
534
534
match text_has_safety_comment (
535
535
src,
536
536
& lines[ comment_start_line. line + 1 ..=unsafe_line. line ] ,
537
- unsafe_line. sf . start_pos . to_usize ( ) ,
537
+ unsafe_line. sf . start_pos ,
538
538
) {
539
539
Some ( b) => HasSafetyComment :: Yes ( b) ,
540
540
None => HasSafetyComment :: No ,
@@ -595,7 +595,7 @@ fn span_from_macro_expansion_has_safety_comment(cx: &LateContext<'_>, span: Span
595
595
match text_has_safety_comment (
596
596
src,
597
597
& lines[ macro_line. line + 1 ..=unsafe_line. line ] ,
598
- unsafe_line. sf . start_pos . to_usize ( ) ,
598
+ unsafe_line. sf . start_pos ,
599
599
) {
600
600
Some ( b) => HasSafetyComment :: Yes ( b) ,
601
601
None => HasSafetyComment :: No ,
@@ -658,7 +658,7 @@ fn span_has_safety_comment(cx: &LateContext<'_>, span: Span) -> bool {
658
658
body_line. line < unsafe_line. line && text_has_safety_comment (
659
659
src,
660
660
& lines[ body_line. line + 1 ..=unsafe_line. line ] ,
661
- unsafe_line. sf . start_pos . to_usize ( ) ,
661
+ unsafe_line. sf . start_pos ,
662
662
) . is_some ( )
663
663
} )
664
664
} else {
@@ -671,13 +671,13 @@ fn span_has_safety_comment(cx: &LateContext<'_>, span: Span) -> bool {
671
671
}
672
672
673
673
/// Checks if the given text has a safety comment for the immediately proceeding line.
674
- fn text_has_safety_comment ( src : & str , line_starts : & [ BytePos ] , offset : usize ) -> Option < BytePos > {
674
+ fn text_has_safety_comment ( src : & str , line_starts : & [ RelativeBytePos ] , start_pos : BytePos ) -> Option < BytePos > {
675
675
let mut lines = line_starts
676
676
. array_windows :: < 2 > ( )
677
677
. rev ( )
678
678
. map_while ( |[ start, end] | {
679
- let start = start. to_usize ( ) - offset ;
680
- let end = end. to_usize ( ) - offset ;
679
+ let start = start. to_usize ( ) ;
680
+ let end = end. to_usize ( ) ;
681
681
let text = src. get ( start..end) ?;
682
682
let trimmed = text. trim_start ( ) ;
683
683
Some ( ( start + ( text. len ( ) - trimmed. len ( ) ) , trimmed) )
@@ -692,9 +692,7 @@ fn text_has_safety_comment(src: &str, line_starts: &[BytePos], offset: usize) ->
692
692
let ( mut line, mut line_start) = ( line, line_start) ;
693
693
loop {
694
694
if line. to_ascii_uppercase ( ) . contains ( "SAFETY:" ) {
695
- return Some ( BytePos (
696
- u32:: try_from ( line_start) . unwrap ( ) + u32:: try_from ( offset) . unwrap ( ) ,
697
- ) ) ;
695
+ return Some ( start_pos + BytePos ( u32:: try_from ( line_start) . unwrap ( ) ) ) ;
698
696
}
699
697
match lines. next ( ) {
700
698
Some ( ( s, x) ) if x. starts_with ( "//" ) => ( line, line_start) = ( x, s) ,
@@ -707,15 +705,13 @@ fn text_has_safety_comment(src: &str, line_starts: &[BytePos], offset: usize) ->
707
705
let ( mut line_start, mut line) = ( line_start, line) ;
708
706
loop {
709
707
if line. starts_with ( "/*" ) {
710
- let src = & src[ line_start..line_starts. last ( ) . unwrap ( ) . to_usize ( ) - offset ] ;
708
+ let src = & src[ line_start..line_starts. last ( ) . unwrap ( ) . to_usize ( ) ] ;
711
709
let mut tokens = tokenize ( src) ;
712
710
return ( src[ ..tokens. next ( ) . unwrap ( ) . len as usize ]
713
711
. to_ascii_uppercase ( )
714
712
. contains ( "SAFETY:" )
715
713
&& tokens. all ( |t| t. kind == TokenKind :: Whitespace ) )
716
- . then_some ( BytePos (
717
- u32:: try_from ( line_start) . unwrap ( ) + u32:: try_from ( offset) . unwrap ( ) ,
718
- ) ) ;
714
+ . then_some ( start_pos + BytePos ( u32:: try_from ( line_start) . unwrap ( ) ) ) ;
719
715
}
720
716
match lines. next ( ) {
721
717
Some ( x) => ( line_start, line) = x,
0 commit comments