mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-24 15:54:15 +00:00
Fix clippy
This commit is contained in:
parent
52a9c157d0
commit
d642c3b6f8
@ -2,6 +2,7 @@ use crate::utils::{implements_trait, is_entrypoint_fn, is_type_diagnostic_item,
|
||||
use if_chain::if_chain;
|
||||
use itertools::Itertools;
|
||||
use rustc_ast::ast::{AttrKind, Attribute};
|
||||
use rustc_ast::token::CommentKind;
|
||||
use rustc_data_structures::fx::FxHashSet;
|
||||
use rustc_hir as hir;
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
@ -249,7 +250,7 @@ fn lint_for_missing_headers<'tcx>(
|
||||
}
|
||||
}
|
||||
|
||||
/// Cleanup documentation decoration (`///` and such).
|
||||
/// Cleanup documentation decoration.
|
||||
///
|
||||
/// We can't use `rustc_ast::attr::AttributeMethods::with_desugared_doc` or
|
||||
/// `rustc_ast::parse::lexer::comments::strip_doc_comment_decoration` because we
|
||||
@ -257,31 +258,23 @@ fn lint_for_missing_headers<'tcx>(
|
||||
/// the spans but this function is inspired from the later.
|
||||
#[allow(clippy::cast_possible_truncation)]
|
||||
#[must_use]
|
||||
pub fn strip_doc_comment_decoration(comment: &str, span: Span) -> (String, Vec<(usize, Span)>) {
|
||||
pub fn strip_doc_comment_decoration(doc: &str, comment_kind: CommentKind, span: Span) -> (String, Vec<(usize, Span)>) {
|
||||
// one-line comments lose their prefix
|
||||
const ONELINERS: &[&str] = &["///!", "///", "//!", "//"];
|
||||
for prefix in ONELINERS {
|
||||
if comment.starts_with(*prefix) {
|
||||
let doc = &comment[prefix.len()..];
|
||||
if comment_kind == CommentKind::Line {
|
||||
let mut doc = doc.to_owned();
|
||||
doc.push('\n');
|
||||
return (
|
||||
doc.to_owned(),
|
||||
vec![(doc.len(), span.with_lo(span.lo() + BytePos(prefix.len() as u32)))],
|
||||
);
|
||||
}
|
||||
let len = doc.len();
|
||||
return (doc, vec![(len, span.with_lo(span.lo() + BytePos(3)))]);
|
||||
}
|
||||
|
||||
if comment.starts_with("/*") {
|
||||
let doc = &comment[3..comment.len() - 2];
|
||||
let mut sizes = vec![];
|
||||
let mut contains_initial_stars = false;
|
||||
for line in doc.lines() {
|
||||
let offset = line.as_ptr() as usize - comment.as_ptr() as usize;
|
||||
let offset = line.as_ptr() as usize - doc.as_ptr() as usize;
|
||||
debug_assert_eq!(offset as u32 as usize, offset);
|
||||
contains_initial_stars |= line.trim_start().starts_with('*');
|
||||
// +1 for the newline
|
||||
sizes.push((line.len() + 1, span.with_lo(span.lo() + BytePos(offset as u32))));
|
||||
sizes.push((line.len() + 1, span.with_lo(span.lo() + BytePos(3 + offset as u32))));
|
||||
}
|
||||
if !contains_initial_stars {
|
||||
return (doc.to_string(), sizes);
|
||||
@ -301,10 +294,8 @@ pub fn strip_doc_comment_decoration(comment: &str, span: Span) -> (String, Vec<(
|
||||
no_stars.push_str(chars.as_str());
|
||||
no_stars.push('\n');
|
||||
}
|
||||
return (no_stars, sizes);
|
||||
}
|
||||
|
||||
panic!("not a doc-comment: {}", comment);
|
||||
(no_stars, sizes)
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone)]
|
||||
@ -318,9 +309,8 @@ fn check_attrs<'a>(cx: &LateContext<'_>, valid_idents: &FxHashSet<String>, attrs
|
||||
let mut spans = vec![];
|
||||
|
||||
for attr in attrs {
|
||||
if let AttrKind::DocComment(ref comment) = attr.kind {
|
||||
let comment = comment.to_string();
|
||||
let (comment, current_spans) = strip_doc_comment_decoration(&comment, attr.span);
|
||||
if let AttrKind::DocComment(comment_kind, comment) = attr.kind {
|
||||
let (comment, current_spans) = strip_doc_comment_decoration(&comment.as_str(), comment_kind, attr.span);
|
||||
spans.extend_from_slice(¤t_spans);
|
||||
doc.push_str(&comment);
|
||||
} else if attr.has_name(sym!(doc)) {
|
||||
|
@ -60,13 +60,13 @@ declare_lint_pass!(TabsInDocComments => [TABS_IN_DOC_COMMENTS]);
|
||||
|
||||
impl TabsInDocComments {
|
||||
fn warn_if_tabs_in_doc(cx: &EarlyContext<'_>, attr: &ast::Attribute) {
|
||||
if let ast::AttrKind::DocComment(comment) = attr.kind {
|
||||
if let ast::AttrKind::DocComment(_, comment) = attr.kind {
|
||||
let comment = comment.as_str();
|
||||
|
||||
for (lo, hi) in get_chunks_of_tabs(&comment) {
|
||||
let new_span = Span::new(
|
||||
attr.span.lo() + BytePos(lo),
|
||||
attr.span.lo() + BytePos(hi),
|
||||
attr.span.lo() + BytePos(3 + lo),
|
||||
attr.span.lo() + BytePos(3 + hi),
|
||||
attr.span.ctxt(),
|
||||
);
|
||||
span_lint_and_sugg(
|
||||
|
@ -506,7 +506,7 @@ pub fn eq_attr(l: &Attribute, r: &Attribute) -> bool {
|
||||
use AttrKind::*;
|
||||
l.style == r.style
|
||||
&& match (&l.kind, &r.kind) {
|
||||
(DocComment(l), DocComment(r)) => l == r,
|
||||
(DocComment(l1, l2), DocComment(r1, r2)) => l1 == r1 && l2 == r2,
|
||||
(Normal(l), Normal(r)) => eq_path(&l.path, &r.path) && eq_mac_args(&l.args, &r.args),
|
||||
_ => false,
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user