if (1==1) {
// if
} else {
// else
}
if (1==1) {
// if
} else if {
// else if
}
if (1==1) {
// if
}
就找到类似找到第 2,3 个这样的代码片段。checkstyle 可以做到吗?或者有其它检查工具吗?
1
geelaw 2019-04-24 12:20:38 +08:00 via iPhone
你可以写一个 custom check 来完成这件事情。如果你想找到所有没有 else 的 if,你只需要关注 { } if else 四个 token 即可;如果你只想判断是否存在没有 else 的 if,你只需要关注 if else 这两个 token。
|
2
stevenbipt 2019-04-24 12:24:11 +08:00 via Android
第一想法是通过栈实现,类似于匹配括号的想法,遇到 if 就入栈,遇到 else 出栈,去户县栈没空遇到下一个 if 那缺失应该就是在这一段之间
|
3
Mogugugugu 2019-04-24 12:24:55 +08:00 1
sonar 可以,idea 装一个 sonar lint 插件,然后在 rules 里面可以找到这条规则 需要自己手动开启,默认没有打开。
|
4
c4f36e5766583218 OP @Mogugugugu #3 好的,谢谢。https://www.sonarsource.com/products/sonarlint/ SonarLint 的官网打不开 2333
|
5
Mogugugugu 2019-04-24 13:03:09 +08:00
|
6
night98 2019-04-24 13:08:47 +08:00
https://blog.csdn.net/linsongbin1/article/details/80211919
直接拉到末尾处,参考他这种方法 |
7
c4f36e5766583218 OP @night98 #6 看了下,“按照模板找内容” 好像解决我的问题。。(不过这篇博文蛮不错的
|
8
c4f36e5766583218 OP @Mogugugugu #3 测试了下,发现有 else if 后面是否需要 else 的检查,但没有 if 后面是否需要 else 的检查。23333
|
9
c4f36e5766583218 OP @stevenbipt #2 我觉得有空还是用 2 楼说的,Python/Java 自写一个比较好,2333 因为感觉 if 后面好多情况都是不用写 else 的,所以一些现有工具也没加这个功能。
|
10
stevenbipt 2019-04-24 19:47:16 +08:00
@c4f36e5766583218 #9 那就搞一个~目测难度也不高
|
11
geelaw 2019-04-26 17:16:07 +08:00 via iPhone
@stevenbipt #2 if { if {} else {} } else {} 不缺少 else,但你的算法会觉得缺少。正确的算法必须能够知道现在出现的 else 是哪个 if 的,为此需要追踪 { }——把 if 和 else 设置为一种括号,{ 和 } 设置为另一种括号,源代码是合法 Java 代码且每个 if 都有 else,当且仅当这个序列是合法括号序列。
另外不太理解为什么要单独列出 2、3 两个例子,2 和 3 是同一种情况,处理了 3 自然就会找到 2。 |