summaryrefslogtreecommitdiffstats
path: root/src/tools/clippy/src/docs/octal_escapes.txt
blob: eee820587158c0c37957874b744b8fcc47d0b98c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
### What it does
Checks for `\0` escapes in string and byte literals that look like octal
character escapes in C.

### Why is this bad?

C and other languages support octal character escapes in strings, where
a backslash is followed by up to three octal digits. For example, `\033`
stands for the ASCII character 27 (ESC). Rust does not support this
notation, but has the escape code `\0` which stands for a null
byte/character, and any following digits do not form part of the escape
sequence. Therefore, `\033` is not a compiler error but the result may
be surprising.

### Known problems
The actual meaning can be the intended one. `\x00` can be used in these
cases to be unambiguous.

The lint does not trigger for format strings in `print!()`, `write!()`
and friends since the string is already preprocessed when Clippy lints
can see it.

### Example
```
let one = "\033[1m Bold? \033[0m";  // \033 intended as escape
let two = "\033\0";                 // \033 intended as null-3-3
```

Use instead:
```
let one = "\x1b[1mWill this be bold?\x1b[0m";
let two = "\x0033\x00";
```