python - PyCharm:函数参数的正则表达式字符串意图
问题描述
我有一个函数,它接受一个字符串参数,该参数将被编译成正则表达式,如下所示:
class Pattern:
def __init__(self, pattern, **kwargs) -> None:
self.re = re.compile(pattern)
self.extras = dict(**kwargs)
... more methods ...
当我初始化一个Pattern
对象时,我喜欢 PyCharm(实际上,我正在使用带有 Python 插件的 IntelliJ IDEA,但我认为这本质上是同一个平台)知道我的pattern
参数字符串应该符合 Python 的正则表达式语法,并且可以突出显示语法,就像使用时一样re.compile(pattern)
:
# This won't be recognized as a regex intention:
p1 = Pattern(r'^(?P<site>[A-Z]{4}).(?P<unit>\d{4})')
# But this will:
p2 = re.compile(r'^(?P<site>[A-Z]{4}).(?P<unit>\d{4})')
有什么方法可以在这里给 IDE 一个提示,即作为pattern
参数传递的任何内容都Pattern
应该具有正则表达式语法?理想情况下,我可以在代码中添加某种提示注释或类型提示,这样它也适用于其他开发人员。
我知道:
- 我可以为此创建一个插件 - 在我的情况下,这可能会是巨大的矫枉过正。
- 对于任何特定的调用,我可以临时执行“注入语言或参考”
Pattern(...)
——但这是暂时的,当有很多这样的调用时,这很乏味,而且它并不能帮助其他开发人员更轻松地阅读代码。
编辑:
这个问题是“可以自动获得 Intellij 对自己的正则表达式参数的正则表达式帮助”的直接模拟,但是对于 Python 而不是 Java。该答案中的IntelliLang解决方案似乎仅适用于编辑 Java 或 XML 文件。
解决方案
我找到了一种方法,但它不像我预期的那么顺利。
File - Settings - Editor - Language Injections - Add
:
Generic Python
- ID:
RegExp
- 地方模式:
+ pyLiteralExpression().and(pyMethodArgument("Pattern", 0, "foo.bar.Pattern"))
现在RegExp
将被注入到Pattern
.
下一步是分享这个注入。注入是使用IDE
级别范围创建的,它存储在IDE
无法共享的设置中。
要将此注入到项目设置中,您必须将注入移动到Project
- 级别范围(相应的按钮位于添加注入的按钮下方)但随后它停止工作:(唯一的方法是Export
-Import
注入,但它不方便 :(
随意在这里创建一个问题。