@@ -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
@@ -514,7 +514,7 @@ fn item_has_safety_comment(cx: &LateContext<'_>, item: &hir::Item<'_>) -> HasSaf
514
514
match text_has_safety_comment (
515
515
src,
516
516
& lines[ comment_start_line. line + 1 ..=unsafe_line. line ] ,
517
- unsafe_line. sf . start_pos . to_usize ( ) ,
517
+ unsafe_line. sf . start_pos ,
518
518
) {
519
519
Some ( b) => HasSafetyComment :: Yes ( b) ,
520
520
None => HasSafetyComment :: No ,
@@ -558,7 +558,7 @@ fn stmt_has_safety_comment(cx: &LateContext<'_>, span: Span, hir_id: HirId) -> H
558
558
match text_has_safety_comment (
559
559
src,
560
560
& lines[ comment_start_line. line + 1 ..=unsafe_line. line ] ,
561
- unsafe_line. sf . start_pos . to_usize ( ) ,
561
+ unsafe_line. sf . start_pos ,
562
562
) {
563
563
Some ( b) => HasSafetyComment :: Yes ( b) ,
564
564
None => HasSafetyComment :: No ,
@@ -619,7 +619,7 @@ fn span_from_macro_expansion_has_safety_comment(cx: &LateContext<'_>, span: Span
619
619
match text_has_safety_comment (
620
620
src,
621
621
& lines[ macro_line. line + 1 ..=unsafe_line. line ] ,
622
- unsafe_line. sf . start_pos . to_usize ( ) ,
622
+ unsafe_line. sf . start_pos ,
623
623
) {
624
624
Some ( b) => HasSafetyComment :: Yes ( b) ,
625
625
None => HasSafetyComment :: No ,
@@ -675,7 +675,7 @@ fn span_in_body_has_safety_comment(cx: &LateContext<'_>, span: Span) -> bool {
675
675
body_line. line < unsafe_line. line && text_has_safety_comment (
676
676
src,
677
677
& lines[ body_line. line + 1 ..=unsafe_line. line ] ,
678
- unsafe_line. sf . start_pos . to_usize ( ) ,
678
+ unsafe_line. sf . start_pos ,
679
679
) . is_some ( )
680
680
} )
681
681
} else {
@@ -688,13 +688,13 @@ fn span_in_body_has_safety_comment(cx: &LateContext<'_>, span: Span) -> bool {
688
688
}
689
689
690
690
/// Checks if the given text has a safety comment for the immediately proceeding line.
691
- fn text_has_safety_comment ( src : & str , line_starts : & [ BytePos ] , offset : usize ) -> Option < BytePos > {
691
+ fn text_has_safety_comment ( src : & str , line_starts : & [ RelativeBytePos ] , start_pos : BytePos ) -> Option < BytePos > {
692
692
let mut lines = line_starts
693
693
. array_windows :: < 2 > ( )
694
694
. rev ( )
695
695
. map_while ( |[ start, end] | {
696
- let start = start. to_usize ( ) - offset ;
697
- let end = end. to_usize ( ) - offset ;
696
+ let start = start. to_usize ( ) ;
697
+ let end = end. to_usize ( ) ;
698
698
let text = src. get ( start..end) ?;
699
699
let trimmed = text. trim_start ( ) ;
700
700
Some ( ( start + ( text. len ( ) - trimmed. len ( ) ) , trimmed) )
@@ -709,9 +709,7 @@ fn text_has_safety_comment(src: &str, line_starts: &[BytePos], offset: usize) ->
709
709
let ( mut line, mut line_start) = ( line, line_start) ;
710
710
loop {
711
711
if line. to_ascii_uppercase ( ) . contains ( "SAFETY:" ) {
712
- return Some ( BytePos (
713
- u32:: try_from ( line_start) . unwrap ( ) + u32:: try_from ( offset) . unwrap ( ) ,
714
- ) ) ;
712
+ return Some ( start_pos + BytePos ( u32:: try_from ( line_start) . unwrap ( ) ) ) ;
715
713
}
716
714
match lines. next ( ) {
717
715
Some ( ( s, x) ) if x. starts_with ( "//" ) => ( line, line_start) = ( x, s) ,
@@ -724,15 +722,13 @@ fn text_has_safety_comment(src: &str, line_starts: &[BytePos], offset: usize) ->
724
722
let ( mut line_start, mut line) = ( line_start, line) ;
725
723
loop {
726
724
if line. starts_with ( "/*" ) {
727
- let src = & src[ line_start..line_starts. last ( ) . unwrap ( ) . to_usize ( ) - offset ] ;
725
+ let src = & src[ line_start..line_starts. last ( ) . unwrap ( ) . to_usize ( ) ] ;
728
726
let mut tokens = tokenize ( src) ;
729
727
return ( src[ ..tokens. next ( ) . unwrap ( ) . len as usize ]
730
728
. to_ascii_uppercase ( )
731
729
. contains ( "SAFETY:" )
732
730
&& tokens. all ( |t| t. kind == TokenKind :: Whitespace ) )
733
- . then_some ( BytePos (
734
- u32:: try_from ( line_start) . unwrap ( ) + u32:: try_from ( offset) . unwrap ( ) ,
735
- ) ) ;
731
+ . then_some ( start_pos + BytePos ( u32:: try_from ( line_start) . unwrap ( ) ) ) ;
736
732
}
737
733
match lines. next ( ) {
738
734
Some ( x) => ( line_start, line) = x,
0 commit comments