flake8-escaping-style
A flake8 plugin to help maintain a consistent style of escape sequences in string and bytes literals throughout your project.
Installation
This plugin requires at least version 3.7 of Python.
Like most flake8 plugins, start by installing the package:
pip install flake8-escaping-style
Then in your flake8 configuration, use a combination of select and ignore
that matches your preferences.
For example, here's how it would look like if you wanted to prevent all escapes
except for \N{name of character}:
select=ESC1
ignore=ESC105
List of error codes
For string literals (str)
| Error code | Escape sequence style | Example string ("café") |
|---|---|---|
ESC101 |
Octal (3 digits) | "caf\351" |
ESC102 |
Hexadecimal (2 digits) | "caf\xe9" |
ESC103 |
Hexadecimal (4 digits) | "caf\u00e9" |
ESC104 |
Hexadecimal (8 digits) | "caf\U000000e9" |
ESC105 |
Named character | "caf\N{latin small letter e with acute}" |
For byte string literals (bytes)
For completeness's sake, this plugin can also detect escape styles in bytestring literals:
| Error code | Escape sequence style | Example bytestring |
|---|---|---|
ESC201 |
Octal (3 digits) | b"caf\351" |
ESC202 |
Hexadecimal (2 digits) | b"caf\xE9" |
Motivation
Python has several different ways to write escape sequences.
In the old days of Python 2, any file was assumed to be ascii encoded unless
you added a special comment on the first line. That meant that if you wanted
to write the string "café" in your source code, you had to either add that
comment on the first line of your file, or use an escape sequence like
"caf\xe9" or "caf\u00E9".
Nowadays, Python has lifted those limitations and uses a more practical default encoding (utf-8, see PEP3120). So for most string literals you can use the character you want without having to use escape sequences at all.
I'd still recommend using an escape sequence when using "weird" 1 characters
and especially invisible ones. But in that case I like to use the "named character"
escaping style \N{name}.
Consider for example the case of a non-breaking space. It's a nifty little character and it can be very useful sometimes but it can also lead to some tough debugging:
Can you spot the difference?
>>> "hello world" == "hello world"
False
Using an escape sequence here (rather than the character itself) makes it more obvious as to what is going on:
>>> "hello world" == "hello\xa0world"
False
That's better in my opinion, but it still requires knowing which character has
the number A0 in hexadecimal. The best option is to use a named escape sequence:
>>> "hello world" == "hello\N{no-break space}world"
False
For that reason, I prefer my projects to only use the "named" style of escape
sequences (ESC105).
-
By "weird" I mean any character that requires more than two fingers to type on my keyboard. ↩
Release files for flake8-escaping-style 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| flake8-escaping-style-0.1.2.tar.gz | 5.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| flake8_escaping_style-0.1.2-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 11.1 kB
Release files / flake8-escaping-style-0.1.2.tar.gz
| Download URL | flake8-escaping-style-0.1.2.tar.gz |
|---|---|
| Size | 5.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2e2b4653cd83279bd052e7273a501c91108898cf52096943a9eda53e80451145
|
|
BLAKE2b-256 checksum How to use checksums |
b44db007f50bd50b22509ef92abc06dc02192bb5649e41ef29fe189a0d296a1b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0
|
Release files / flake8_escaping_style-0.1.2-py2.py3-none-any.whl
| Download URL | flake8_escaping_style-0.1.2-py2.py3-none-any.whl |
|---|---|
| Size | 5.7 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
253ec6105b0a52c1e3ca82442b218cd6d559f832e390b0ca95ea8101bc135d6f
|
|
BLAKE2b-256 checksum How to use checksums |
df39f6604947212db511a8fe11fec757bff4975dd6889484b1196c574de3bbc1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0
|