Use Freeze for SourceFile.lines

This commit is contained in:
John Kåre Alsaker 2023-08-31 22:12:47 +02:00
parent 953901e35c
commit 0f74faf158
2 changed files with 39 additions and 47 deletions

View File

@ -507,20 +507,18 @@ fn item_has_safety_comment(cx: &LateContext<'_>, item: &hir::Item<'_>) -> HasSaf
&& Lrc::ptr_eq(&unsafe_line.sf, &comment_start_line.sf) && Lrc::ptr_eq(&unsafe_line.sf, &comment_start_line.sf)
&& let Some(src) = unsafe_line.sf.src.as_deref() && let Some(src) = unsafe_line.sf.src.as_deref()
{ {
return unsafe_line.sf.lines(|lines| { return if comment_start_line.line >= unsafe_line.line {
if comment_start_line.line >= unsafe_line.line { HasSafetyComment::No
HasSafetyComment::No } else {
} else { match text_has_safety_comment(
match text_has_safety_comment( src,
src, &unsafe_line.sf.lines()[comment_start_line.line + 1..=unsafe_line.line],
&lines[comment_start_line.line + 1..=unsafe_line.line], unsafe_line.sf.start_pos,
unsafe_line.sf.start_pos, ) {
) { Some(b) => HasSafetyComment::Yes(b),
Some(b) => HasSafetyComment::Yes(b), None => HasSafetyComment::No,
None => HasSafetyComment::No,
}
} }
}); };
} }
} }
HasSafetyComment::Maybe HasSafetyComment::Maybe
@ -551,20 +549,18 @@ fn stmt_has_safety_comment(cx: &LateContext<'_>, span: Span, hir_id: HirId) -> H
&& Lrc::ptr_eq(&unsafe_line.sf, &comment_start_line.sf) && Lrc::ptr_eq(&unsafe_line.sf, &comment_start_line.sf)
&& let Some(src) = unsafe_line.sf.src.as_deref() && let Some(src) = unsafe_line.sf.src.as_deref()
{ {
return unsafe_line.sf.lines(|lines| { return if comment_start_line.line >= unsafe_line.line {
if comment_start_line.line >= unsafe_line.line { HasSafetyComment::No
HasSafetyComment::No } else {
} else { match text_has_safety_comment(
match text_has_safety_comment( src,
src, &unsafe_line.sf.lines()[comment_start_line.line + 1..=unsafe_line.line],
&lines[comment_start_line.line + 1..=unsafe_line.line], unsafe_line.sf.start_pos,
unsafe_line.sf.start_pos, ) {
) { Some(b) => HasSafetyComment::Yes(b),
Some(b) => HasSafetyComment::Yes(b), None => HasSafetyComment::No,
None => HasSafetyComment::No,
}
} }
}); };
} }
} }
HasSafetyComment::Maybe HasSafetyComment::Maybe
@ -614,20 +610,18 @@ fn span_from_macro_expansion_has_safety_comment(cx: &LateContext<'_>, span: Span
&& Lrc::ptr_eq(&unsafe_line.sf, &macro_line.sf) && Lrc::ptr_eq(&unsafe_line.sf, &macro_line.sf)
&& let Some(src) = unsafe_line.sf.src.as_deref() && let Some(src) = unsafe_line.sf.src.as_deref()
{ {
unsafe_line.sf.lines(|lines| { if macro_line.line < unsafe_line.line {
if macro_line.line < unsafe_line.line { match text_has_safety_comment(
match text_has_safety_comment( src,
src, &unsafe_line.sf.lines()[macro_line.line + 1..=unsafe_line.line],
&lines[macro_line.line + 1..=unsafe_line.line], unsafe_line.sf.start_pos,
unsafe_line.sf.start_pos, ) {
) { Some(b) => HasSafetyComment::Yes(b),
Some(b) => HasSafetyComment::Yes(b), None => HasSafetyComment::No,
None => HasSafetyComment::No,
}
} else {
HasSafetyComment::No
} }
}) } else {
HasSafetyComment::No
}
} else { } else {
// Problem getting source text. Pretend a comment was found. // Problem getting source text. Pretend a comment was found.
HasSafetyComment::Maybe HasSafetyComment::Maybe
@ -671,13 +665,11 @@ fn span_in_body_has_safety_comment(cx: &LateContext<'_>, span: Span) -> bool {
// Get the text from the start of function body to the unsafe block. // Get the text from the start of function body to the unsafe block.
// fn foo() { some_stuff; unsafe { stuff }; other_stuff; } // fn foo() { some_stuff; unsafe { stuff }; other_stuff; }
// ^-------------^ // ^-------------^
unsafe_line.sf.lines(|lines| { body_line.line < unsafe_line.line && text_has_safety_comment(
body_line.line < unsafe_line.line && text_has_safety_comment( src,
src, &unsafe_line.sf.lines()[body_line.line + 1..=unsafe_line.line],
&lines[body_line.line + 1..=unsafe_line.line], unsafe_line.sf.start_pos,
unsafe_line.sf.start_pos, ).is_some()
).is_some()
})
} else { } else {
// Problem getting source text. Pretend a comment was found. // Problem getting source text. Pretend a comment was found.
true true

View File

@ -118,7 +118,7 @@ fn first_char_in_first_line<T: LintContext>(cx: &T, span: Span) -> Option<BytePo
fn line_span<T: LintContext>(cx: &T, span: Span) -> Span { fn line_span<T: LintContext>(cx: &T, span: Span) -> Span {
let span = original_sp(span, DUMMY_SP); let span = original_sp(span, DUMMY_SP);
let SourceFileAndLine { sf, line } = cx.sess().source_map().lookup_line(span.lo()).unwrap(); let SourceFileAndLine { sf, line } = cx.sess().source_map().lookup_line(span.lo()).unwrap();
let line_start = sf.lines(|lines| lines[line]); let line_start = sf.lines()[line];
let line_start = sf.absolute_position(line_start); let line_start = sf.absolute_position(line_start);
span.with_lo(line_start) span.with_lo(line_start)
} }