Look for soft hyphens as well
This commit is contained in:
parent
f0eac45db4
commit
515ca93123
@ -8,18 +8,18 @@ use rustc_span::source_map::Span;
|
||||
use unicode_normalization::UnicodeNormalization;
|
||||
|
||||
declare_clippy_lint! {
|
||||
/// **What it does:** Checks for the Unicode zero-width space in the code.
|
||||
/// **What it does:** Checks for invisible Unicode characters in the code.
|
||||
///
|
||||
/// **Why is this bad?** Having an invisible character in the code makes for all
|
||||
/// sorts of April fools, but otherwise is very much frowned upon.
|
||||
///
|
||||
/// **Known problems:** None.
|
||||
///
|
||||
/// **Example:** You don't see it, but there may be a zero-width space
|
||||
/// somewhere in this text.
|
||||
/// **Example:** You don't see it, but there may be a zero-width space or soft hyphen
|
||||
/// somewhere in this text.
|
||||
pub ZERO_WIDTH_SPACE,
|
||||
correctness,
|
||||
"using a zero-width space in a string literal, which is confusing"
|
||||
"using an invisible character in a string literal, which is confusing"
|
||||
}
|
||||
|
||||
declare_clippy_lint! {
|
||||
@ -91,14 +91,14 @@ fn escape<T: Iterator<Item = char>>(s: T) -> String {
|
||||
|
||||
fn check_str(cx: &LateContext<'_>, span: Span, id: HirId) {
|
||||
let string = snippet(cx, span, "");
|
||||
if string.contains('\u{200B}') {
|
||||
if let Some(invisible) = string.chars().find(|c| ['\u{200B}', '\u{ad}'].contains(&c)) {
|
||||
span_lint_and_sugg(
|
||||
cx,
|
||||
ZERO_WIDTH_SPACE,
|
||||
span,
|
||||
"zero-width space detected",
|
||||
&format!("invisible character detected: {:?}", invisible),
|
||||
"consider replacing the string with",
|
||||
string.replace("\u{200B}", "\\u{200B}"),
|
||||
string.replace("\u{200B}", "\\u{200B}").replace("\u{ad}", "\\u{AD}"),
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
|
@ -2,6 +2,8 @@
|
||||
fn zero() {
|
||||
print!("Here >< is a ZWS, and another");
|
||||
print!("This\u{200B}is\u{200B}fine");
|
||||
print!("Here >< is a SHY, and another");
|
||||
print!("This\u{ad}is\u{ad}fine");
|
||||
}
|
||||
|
||||
#[warn(clippy::unicode_not_nfc)]
|
||||
|
@ -1,4 +1,4 @@
|
||||
error: zero-width space detected
|
||||
error: invisible character detected: '/u{200b}'
|
||||
--> $DIR/unicode.rs:3:12
|
||||
|
|
||||
LL | print!("Here >< is a ZWS, and another");
|
||||
@ -6,8 +6,14 @@ LL | print!("Here >< is a ZWS, and another");
|
||||
|
|
||||
= note: `-D clippy::zero-width-space` implied by `-D warnings`
|
||||
|
||||
error: invisible character detected: '/u{ad}'
|
||||
--> $DIR/unicode.rs:5:12
|
||||
|
|
||||
LL | print!("Here >< is a SHY, and another");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider replacing the string with: `"Here >/u{AD}< is a SHY, and /u{AD}another"`
|
||||
|
||||
error: non-NFC Unicode sequence detected
|
||||
--> $DIR/unicode.rs:9:12
|
||||
--> $DIR/unicode.rs:11:12
|
||||
|
|
||||
LL | print!("̀àh?");
|
||||
| ^^^^^ help: consider replacing the string with: `"̀àh?"`
|
||||
@ -15,12 +21,12 @@ LL | print!("̀àh?");
|
||||
= note: `-D clippy::unicode-not-nfc` implied by `-D warnings`
|
||||
|
||||
error: literal non-ASCII character detected
|
||||
--> $DIR/unicode.rs:15:12
|
||||
--> $DIR/unicode.rs:17:12
|
||||
|
|
||||
LL | print!("Üben!");
|
||||
| ^^^^^^^ help: consider replacing the string with: `"/u{dc}ben!"`
|
||||
|
|
||||
= note: `-D clippy::non-ascii-literal` implied by `-D warnings`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user