diff --git a/doc/data/messages/i/invalid-name/details.rst b/doc/data/messages/i/invalid-name/details.rst index 0a612101ef..90160eaba5 100644 --- a/doc/data/messages/i/invalid-name/details.rst +++ b/doc/data/messages/i/invalid-name/details.rst @@ -84,7 +84,7 @@ The following type of names are checked with a predefined pattern: | Name type | Good names | Bad names | +====================+===================================================+============================================================+ | ``typevar`` | ``T``, ``_CallableT``, ``_T_co``, ``AnyStr``, | ``DICT_T``, ``CALLABLE_T``, ``ENUM_T``, ``DeviceType``, | -| | ``DeviceTypeT``, ``IPAddressT`` | ``_StrType`` | +| | ``DeviceTypeT``, ``IPAddressT`` | ``_StrType``, ``TAnyStr`` | +--------------------+---------------------------------------------------+------------------------------------------------------------+ Custom regular expressions diff --git a/doc/whatsnew/fragments/7322.false-positive b/doc/whatsnew/fragments/7322.false-positive new file mode 100644 index 0000000000..0c196ada0d --- /dev/null +++ b/doc/whatsnew/fragments/7322.false-positive @@ -0,0 +1,4 @@ +Improve default TypeVar name regex. Disallow names prefixed with ``T``. +E.g. use ``AnyStrT`` instead of ``TAnyStr``. + +Refs #7322 diff --git a/pylint/checkers/base/name_checker/checker.py b/pylint/checkers/base/name_checker/checker.py index 3f30fd8f01..e4b061a170 100644 --- a/pylint/checkers/base/name_checker/checker.py +++ b/pylint/checkers/base/name_checker/checker.py @@ -39,7 +39,7 @@ # Default patterns for name types that do not have styles DEFAULT_PATTERNS = { "typevar": re.compile( - r"^_{0,2}(?:[^\W\da-z_]+|(?:[^\W\da-z_]+[^\WA-Z_]+)+T?(?