blob: 0a49b17005828ca5414f2f56869255d777f99f18 [file]
#![allow(dead_code)]
#[warn(clippy::invisible_characters)]
fn zero() {
print!("Here >\u{200B}< is a ZWS, and \u{200B}another");
//~^ invisible_characters
print!("This\u{200B}is\u{200B}fine");
print!("Here >\u{AD}< is a SHY, and \u{AD}another");
//~^ invisible_characters
print!("This\u{ad}is\u{ad}fine");
print!("Here >\u{2060}< is a WJ, and \u{2060}another");
//~^ invisible_characters
print!("This\u{2060}is\u{2060}fine");
}
#[warn(clippy::unicode_not_nfc)]
fn canon() {
print!("̀àh?");
//~^ unicode_not_nfc
print!("a\u{0300}h?"); // also ok
}
mod non_ascii_literal {
#![deny(clippy::non_ascii_literal)]
fn uni() {
print!("\u{dc}ben!");
//~^ non_ascii_literal
print!("\u{DC}ben!"); // this is ok
}
// issue 8013
fn single_quote() {
const _EMPTY_BLOCK: char = '\u{25b1}';
//~^ non_ascii_literal
const _FULL_BLOCK: char = '\u{25b0}';
//~^ non_ascii_literal
}
#[test]
pub fn issue_7739() {
// Ryū crate: https://github.com/dtolnay/ryu
}
mod issue_8263 {
#![deny(clippy::non_ascii_literal)]
// Re-allow for a single test
#[test]
#[allow(clippy::non_ascii_literal)]
fn allowed() {
let _ = "悲しいかな、ここに日本語を書くことはできない。";
}
#[test]
fn denied() {
let _ = "\u{60b2}\u{3057}\u{3044}\u{304b}\u{306a}\u{3001}\u{3053}\u{3053}\u{306b}\u{65e5}\u{672c}\u{8a9e}\u{3092}\u{66f8}\u{304f}\u{3053}\u{3068}\u{306f}\u{3067}\u{304d}\u{306a}\u{3044}\u{3002}";
//~^ non_ascii_literal
}
}
}
mod ascii_macro_with_non_ascii_value {
// The source is pure ASCII, but the value contains non-ASCII, invisible, and
// non-NFC characters. The lints check the source snippet, not the value, so
// none of them may fire here.
#![deny(clippy::invisible_characters, clippy::non_ascii_literal, clippy::unicode_not_nfc)]
macro_rules! non_ascii_value {
() => {
"\u{00E9}\u{200B}a\u{0300}"
};
}
fn no_lint() {
let _ = non_ascii_value!();
}
}
mod ascii_value_from_non_ascii_snippet {
// The reverse: `file!()` produces an ASCII value (the file path), but the
// literal's span covers the whole macro invocation, so the snippet is
// non-ASCII and the lint must fire. Checking the value would miss it.
#![deny(clippy::non_ascii_literal)]
macro_rules! with_location {
($($arg:tt)*) => {
let _ = file!();
};
}
fn lint() {
with_location!("h\u{e9}llo");
//~^ non_ascii_literal
}
}
fn main() {}