blob: 65738434ac2863a06742e08dcf39ee45527c5fd9 [file] [log] [blame] [edit]
use super::Fragments;
use crate::doc::TEST_ATTR_IN_DOCTEST;
use clippy_utils::diagnostics::span_lint;
use clippy_utils::tokenize_with_text;
use rustc_lexer::TokenKind;
use rustc_lint::LateContext;
pub fn check(cx: &LateContext<'_>, text: &str, offset: usize, fragments: Fragments<'_>) {
if !text.contains("#[test]") {
return;
}
let mut spans = Vec::new();
let mut tokens = tokenize_with_text(text).filter(|&(kind, ..)| kind != TokenKind::Whitespace);
while let Some(token) = tokens.next() {
if let (TokenKind::Pound, _, pound_span) = token
&& let Some((TokenKind::OpenBracket, ..)) = tokens.next()
&& let Some((TokenKind::Ident, "test", _)) = tokens.next()
&& let Some((TokenKind::CloseBracket, _, close_span)) = tokens.next()
&& let Some(span) = fragments.span(cx, pound_span.start + offset..close_span.end + offset)
{
spans.push(span);
}
}
if !spans.is_empty() {
span_lint(
cx,
TEST_ATTR_IN_DOCTEST,
spans,
"unit tests in doctest are not executed",
);
}
}