Add lint almost_complete_letter_range
This commit is contained in:
@@ -30,6 +30,7 @@ msrv_aliases! {
|
||||
1,34,0 { TRY_FROM }
|
||||
1,30,0 { ITERATOR_FIND_MAP, TOOL_ATTRIBUTES }
|
||||
1,28,0 { FROM_BOOL }
|
||||
1,26,0 { RANGE_INCLUSIVE }
|
||||
1,17,0 { FIELD_INIT_SHORTHAND, STATIC_IN_CONST, EXPECT_ERR }
|
||||
1,16,0 { STR_REPEAT }
|
||||
1,24,0 { IS_ASCII_DIGIT }
|
||||
|
||||
@@ -8,7 +8,7 @@ use rustc_hir::{Expr, ExprKind};
|
||||
use rustc_lint::{LateContext, LintContext};
|
||||
use rustc_span::hygiene;
|
||||
use rustc_span::source_map::SourceMap;
|
||||
use rustc_span::{BytePos, Pos, Span, SyntaxContext};
|
||||
use rustc_span::{BytePos, Pos, Span, SpanData, SyntaxContext};
|
||||
use std::borrow::Cow;
|
||||
|
||||
/// Checks if the span starts with the given text. This will return false if the span crosses
|
||||
@@ -389,6 +389,27 @@ pub fn without_block_comments(lines: Vec<&str>) -> Vec<&str> {
|
||||
without
|
||||
}
|
||||
|
||||
/// Trims the whitespace from the start and the end of the span.
|
||||
pub fn trim_span(sm: &SourceMap, span: Span) -> Span {
|
||||
let data = span.data();
|
||||
let sf: &_ = &sm.lookup_source_file(data.lo);
|
||||
let Some(src) = sf.src.as_deref() else {
|
||||
return span;
|
||||
};
|
||||
let Some(snip) = &src.get((data.lo - sf.start_pos).to_usize()..(data.hi - sf.start_pos).to_usize()) else {
|
||||
return span;
|
||||
};
|
||||
let trim_start = snip.len() - snip.trim_start().len();
|
||||
let trim_end = snip.len() - snip.trim_end().len();
|
||||
SpanData {
|
||||
lo: data.lo + BytePos::from_usize(trim_start),
|
||||
hi: data.hi - BytePos::from_usize(trim_end),
|
||||
ctxt: data.ctxt,
|
||||
parent: data.parent,
|
||||
}
|
||||
.span()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::{reindent_multiline, without_block_comments};
|
||||
|
||||
Reference in New Issue
Block a user