pylint 的 TypeVar 名称规范是什么?

TNT*_*Tzx 8 python pylint vscode-python

每当发生类似情况时,Pylint 都会发出警告:

import typing

SEQ_FR = typing.TypeVar("SEQ_FR")
#^^^^^ gets underlined with the warning
Run Code Online (Sandbox Code Playgroud)

警告是这样的:Type variable name "SEQ_FR" doesn't conform to predefined naming style. pylint(invalid-name)

我尝试搜索 Pylint 的文档,但没有找到所使用的确切正则表达式/规范。与常规变量、方法、函数、类等不同,我似乎也无法将自定义正则表达式传递到 Pylint 上。

Pylint 使用什么规范将 TypeVar 变量标记为有效或无效名称?

Mar*_*ers 11

您可以在Pylint 消息文档中找到使用的规则;这个错误是named的,所以具体的文档可以在invalid-name/C0103页面invalid-name上找到,该页面的Predefined Naming Patterns部分有一条规则:TypeVar

\n
\n

名称类型: typevar
\n好名称: T, _CallableT, _T_co, AnyStr, DeviceTypeT, IPAddressT
\n坏名称: DICT_T, CALLABLE_T, ENUM_T, DeviceType, _StrType,TAnyStr

\n
\n

这里没有记录确切的正则表达式规则,但当您使用 --include-naming-hint=y命令行开关*)时,Pylint 实际上会包含错误消息中使用的正则表达式:

\n
\n

Type variable name "SEQ_FR" doesn\'t conform to predefined naming style (\'^_{0,2}(?!T[A-Z])(?:[A-Z]+|(?:[A-Z]+[a-z]+)+T?(?<!Type))(?:_co(?:ntra)?)?$\' pattern) (invalid-name)

\n
\n

或者,您可以在源代码中找到类型变量的正则表达式

\n

打破模式,类型变量名称在遵循以下规则时是合规的:

\n
    \n
  • 可选择以 0-2 个下划线开头
  • \n
  • 开始于以T<大写字母>
  • \n
  • 要么\n
      \n
    • 全部大写字母且无下划线,
    • \n
    • PascalCaseWord \xe2\x9c\x9d)可选以T结尾,没有下划线,并且不以Type结尾
    • \n
    \n
  • \n
  • 带有可选的_co_contra结尾。
  • \n
\n

换句话说,typevar 名称必须是 PascalCase \xe2\x9c\x9d)或全部大写,可以选择受保护 ( _) 或私有 ( __),可以选择标记为协变 ( _co) 或逆变 ( _contra),并且不应以Type结尾。

\n

您的示例的合规名称可以是SeqFrSeqFrT;后缀T旨在明确 SnakeCaseT 名称是一个 typevar

\n

或者,您可以使用 --typevar-rgx=<regex>命令行开关*)指定您自己的正则表达式。

\n

注意:正如 Pierre Sassoulas(Pylint 的维护者)在评论中指出的那样:对于 typevar 命名还没有 PEP-8 约定;相反,PyLint 团队捕获了 Python 项目中观察到的规则和类型提示文档。因此,如果要制定正式公约,确切的规则仍然可能会发生变化。

\n
\n

*) Python 扩展的 Visual Studio Code 设置包括一个python.linting.pylintArgs采用命令行开关列表的选项。

\n

\xe2\x9c\x9d) PascalCase也称为CapitalizedWordsUpperCamelCaseStudlyCase。不要将其与camelCase(首字母小写)或snake_case(全部小写并带下划线)混淆。我经常这样做!如果有疑问,维基百科有一个方便的多词格式表

\n