Jump-start into modern Python by forcing yourself to use f-strings.
Works only with python>=3.6 since it was when f-strings were introduced.
pip install flake8-use-fstring-
FS001:%formatting is used. -
FS002:.formatformatting is used. -
FS003: f-string missing prefix (ignored by default).
This plugin checks each python statement (logical line)
and see if % or .format is used.
Since flake8 is only a code style checker and not a type checker,
it's impossible to tell for sure if the value before % or .format
is a string.
Thus, greedy level is introduced to control when the plugin should report errors.
-
Level 0 (default): only report error if the value before
%or.formatis a string literal. -
Level 1: report error if a string literal appears before
%or.formatanywhere in the statement. -
Level 2: report any usage of
%or.format.
If the value immediately before % or .format is not a string,
using level 1 or 2 may result in false positives.
See tests/example.py for examples.
Thus level 0 is the default level.
However, for most projects it should be reasonable to use greedy level 2 with confidence.
To set greedy levels,
set --percent-greedy=<level> and --format-greedy=<level> in the command line,
or set percent-greedy=<level> and format-greedy=<level> in the .flake8 config file.
This plugin can also check for strings that appear to be f-strings but don't have the f prefix.
FS003 will be reported if a string:
- is not prefixed with
f - contains at least one pair of
{} - is not prefixed with
r(because r-strings are often regexes that would contain{})
Due to the potential for false positives, this check (FS003) is disabled by default.
To enable this check,
add the --enable-extensions=FS003 command line option,
or set enable-extensions=FS003 in the .flake8 config file.
NOTE:
If you use the --ignore option of flake8, the default ignore list will be overwritten.
See --ignore
vs --extend-ignore.
The missing prefix check normally ignores strings that are using % or .format formatting.
To check those strings as well,
add the --fstring-ignore-format command line option,
or set fstring-ignore-format=True in the .flake8 config file.
Byte literals (strings that are prefixed with a literal b) will not be checked since Python does not support f-strings for them (as of 3.9).