【问题标题】:Can one automatically get Intellij's regex assistance for one's own regex parameters是否可以自动获得 Intellij 对自己的正则表达式参数的正则表达式帮助
【发布时间】:2016-05-03 16:32:33
【问题描述】:

Intellij 为需要正则表达式的参数提供正则表达式“帮助”(语法检查),例如编码:

String[] array = string.split("(*.");

将在正则表达式下标记错误并提供工具提示错误:

未封闭组

这也适用于变量,例如

String myVar = "(*."; // shows above error here
String[] array = string.split(myVar);

但如果我创建自己的需要正则表达式的方法,我不会得到这种帮助,例如:

String[] myMethod(String regexParameter) {
    return someString.split(regexParameter);
}

myMethod("(*."); // no "error" marker like above

虽然 Intellij 可以确定 regexParameter 应该是一个有效的正则表达式,但它不会像检查 JDK 参数那样检查它。

如何获得我自己的方法参数的正则表达式帮助?


注意:

理想情况下,会有一个基于注释的解决方案或类似的解决方案,其中方法的参数被“定义”为 Intellij 的正则表达式,因此所有开发人员在加载代码库时都会自动获得帮助。

【问题讨论】:

    标签: java regex intellij-idea syntax-highlighting


    【解决方案1】:

    要在 IDE 中为参数激活正则表达式语言,请双击正则表达式字符串并按 AltEnterIntention Actions 的快捷方式) 并选择“注入语言或参考”,然后在结果列表中选择“Regexp”:

    这会将正则表达式永久附加到所有调用站点的参数。

    要对多个文本片段执行此操作,请按住 ShiftAlt 键并继续双击所有实例(多选 IntelliJ 中的功能)。

    要创建一个自动具有 Intellij 语言辅助功能的参数,以便您的其他开发团队成员也可以自动获得正则表达式帮助,请使用 IntelliJ 的 IntelliLang 插件,将 jetbrains 的注释库添加为编译依赖,例如对于 gradle:

    dependencies {
        ...
        compile 'org.jetbrains:annotations:15.0'
    }
    

    然后要使用它,请将"RegExp" 指定为参数的@Language

    import org.intellij.lang.annotations.Language;
    
    void myMethod(@Language("RegExp") String regex) {
        // some impl
    }
    

    现在,任何人在 Intellij 中编辑源代码的任何方法调用都可以对传递给方法的字符串进行正则表达式验证。


    注意:有一种不推荐的替代方法,即向构建添加依赖项(如果有的话),并且知道效果仅在您的 IDE 中,您必须在您的 IDE 中编译,Intellij让你这样做:

    1. 在方法参数中添加@Language("RegExp")注解
    2. 点击红色灯泡图标将注释导入类路径

    【讨论】:

    • 好消息是您的建议确实传播到所有呼叫站点,但它没有回答问题。我想将参数声明为正则表达式,以便使用该代码的其他开发人员将自动获得语言参考,就像我们对String.split() 所做的一样。 +1 无论如何
    • 嗨波西米亚人,我已根据您的回复更新了我的答案。 (不确定网站是否会通知您编辑)。希望此解决方案对您有用。
    • 这让我找到了一个更好的解决方案恕我直言,我可以将其作为另一个答案发布,但我宁愿将其编辑到这个答案中(你值得称赞)。可以吗,还是你想自己做(我可以在另一条评论中解释)?
    • 如果有时间,您可以编辑我的答案,我认为这样会更容易。
    • 我所做的主要更改是使用适当的 gradle 依赖项,因此任何人都可以构建代码。您的版本会破坏团队的构建,因为语言注释只会在 your IDE 中的 your classpath* 上。另外,我为按键添加了一些降价功能:)
    猜你喜欢
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多