【问题标题】:Can I find all curly-braceless if-statements in my team's code?我可以在我的团队代码中找到所有无花括号的 if 语句吗?
【发布时间】:2015-07-09 11:27:18
【问题描述】:

在我的公司,我们有编码风格,包括总是使用带有 if 语句的花括号,所以:

// instead of this...
if (condition)
  doThis();

// we want this
if (condition) {
  doThis();
}

现在并不是每个人都从一开始就这样做了,我们希望清理并让代码更加一致。有没有办法(最好使用 PHPStorm)找到所有无括号的 if 语句?

【问题讨论】:

  • 为此使用 PHP_CodeSniffer 规则? PhpStorm 已与此工具集成。我自己没有使用过它,但也许您可以将其配置为仅报告特定问题(或者只运行所有报告的问题并仅找到您感兴趣的问题)。 confluence.jetbrains.com/display/PhpStorm/…
  • 另一种选择是尝试结构搜索 (Edit | Find | Find Structurally)——理论上它可以做到这一点,但不确定。
  • 感谢@LazyOne 的建议。但是,出于我的目的,下面的 Nate B 的回答更容易。 :-)

标签: if-statement phpstorm curly-braces


【解决方案1】:

如果你安装了 python,你可以运行下面的程序,我为你写的,在你的代码中找到所有这样的行:(在 python27 上测试)

运行方式:

 python 无括号.py yourfile 
import sys,re
fname = sys.argv[1]
with open(fname) as f:
    if_block = False
    lnum = 0        
    for i,line in enumerate(f):
        if (re.search(r'\bif\b', line)) and not '{' in line:
            if_block = True
            lnum = i+1 
            if ';' in line:
                print 'Found bracketless if in line {}'.format(lnum)
                if_block = False
        elif if_block:
            if '{' in line:
                if_block = False
            elif ';' in line:
                print 'Found bracketless if in line {}'.format(lnum)
                if_block = False

【讨论】:

  • 嘿@K246,就像一个魅力,谢谢,虽然这对我的目的来说有点矫枉过正。 :-)(而且它不会跳过 cmets)
【解决方案2】:

您可以尝试如下使用正则表达式搜索:

编辑 > 查找 > 在路径中查找

搜索字符串if\s*\(.+\)[^{\S]*\n,并确保正则表达式复选框处于活动状态。

这种技术并不完美,因为它会对跨越多行的条件产生误报(例如它们的左大括号位于第 2、3 行等...)。但它可以准确地区分简单的单行条件,例如您在问题中提供的两个条件。

【讨论】:

  • 太好了,我不需要非常高级的东西,因为我不会经常这样做,所以那些小误报还不错。但是,当条件不仅仅是布尔值时,它不起作用。喜欢if (a != b)if (!confirm("Sure?"))。介意更新吗?
【解决方案3】:

您也可以为此简单地使用 PhpStorm 的内置代码样式工具。如果您转到文件 -> 设置,然后转到编辑器 -> 代码样式 -> PHP -> 包装和大括号,您可以将 if/for/foreach/while/do...while 的强制大括号设置为“始终”。重新格式化代码时会自动添加大括号。

但是,这种方法显然也具有应用所有其他格式规则的“副作用”。这可能不是您想要的。

【讨论】:

  • 嘿@chocochaos,它不是,但它确实很有帮助!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 2012-05-03
  • 2023-01-16
  • 2015-01-20
相关资源
最近更新 更多