如何使用Intellij搜索和替换模式消除'braces on new line'?



我正在尝试使用以下搜索和替换模板查找所有if语句,其中花括号写在新行中:

搜索模板:

if ($Expr$)
{
    $ThenStatements$;
}
else
{
    $ElseStatements$;
}

替换模板:

if ($Expr$) {
    $ThenStatements$;
}
else {
    $ElseStatements$;
}

如果模板引擎不能区分两个模板,我将面临的问题是。它让我用正确的模板替换搜索模板,但它也会将"正确"的模板检测为错误的模板。

有没有办法使用某种正则表达式来解决这个问题?

编辑:在Android Studio上工作。我正试图为我的公司生成一组lint规则代码样式约定,这些规则将显示为警告或错误

我相信适合这项工作的工具是代码格式化程序。

我猜想这就是我们所说的Java。

调整格式化程序设置:

  • 转到"设置"->"编辑器"->"代码样式"->"Java"->(选项卡)"环绕和括号"
  • 将项目"支架放置/其他"设置为:行的末尾
  • 检查预览是否为所需设置
  • 单击"确定"

格式化(所有)代码:

  • 选择根程序包
  • 单击Alt+L(菜单:"代码"->"重新格式化代码")
  • 出现"重新格式化代码"对话框,单击"确定"

所有的代码都应该按照规则重新格式化。

结构搜索&Replace是为搜索代码而设计的,无论代码的格式如何。因此,您的用例并没有得到真正的支持。然而,只要有一点黑客攻击,就有可能从中得到你想要的东西。

从搜索模板开始,向$Expr$变量添加以下Groovy脚本约束:

import com.intellij.psi.*
import com.intellij.openapi.editor.Document
PsiDocumentManager dm = PsiDocumentManager.getInstance(__context__.project)
Document d = dm.getDocument(__context__.containingFile)
PsiIfStatement is = __context__.parent
if (is.thenBranch != null && is.thenBranch.text.startsWith("{")) {
  if (d.getLineNumber(is.thenBranch.textOffset) > d.getLineNumber(is.RParenth.textOffset))
    return true
}
if (is.elseBranch != null && is.elseBranch.text.startsWith("{")) {
  if (d.getLineNumber(is.elseBranch.textOffset) > d.getLineNumber(is.elseElement.textOffset))
    return true;
}
return false 

此脚本检查then分支{是否位于大于if语句的)的行上,或者else分支{是否位于大于else关键字的行上;否则返回false

相关内容

  • 没有找到相关文章

最新更新