If statement 我能在我的团队中找到所有无括号的if语句吗';s代码?

If statement 我能在我的团队中找到所有无括号的if语句吗';s代码?,if-statement,phpstorm,curly-braces,If Statement,Phpstorm,Curly Braces,在我的公司里,我们有编码风格,包括总是在if语句中使用大括号,所以: // instead of this... if (condition) doThis(); // we want this if (condition) { doThis(); } 现在并不是每个人从一开始就这样做了,我们希望清理并使代码更加一致。有没有办法(最好使用PHPStorm)查找所有无括号的if语句?您可以尝试使用正则表达式搜索,如下所示: 编辑>查找>在路径中查找 搜索字符串if\s*\(.+\)[^

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

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

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

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

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

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

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


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

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


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


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

为此使用PHP_CodeSniffer规则?PhpStorm与此工具集成。我自己没有使用过它,但您可以将其配置为仅报告特定问题(或者只是浏览所有已报告的问题,只查找您感兴趣的问题)。另一种选择是尝试结构化搜索(
Edit | find | find Structural
)--理论上它可以做到,但不确定。感谢@LazyOne的建议。不过,就我的目的而言,Nate B下面的答案更简单。:-)很好,我不需要非常高级的东西,因为我不会经常这样做,所以这些小误报也没那么糟糕。但是,当条件不仅仅是布尔值时,它就不起作用了。比如
if(a!=b)
if(!confirm(“确定”))
。介意更新吗?嘿@chocochaos,它不是,但确实很有用!谢谢。嘿@K246,很有魅力,谢谢,不过对我来说有点过头了。:-(而且它不会跳过评论) python bracketless.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