SonarLint 是一个免费的开源IDE 扩展,可识别并帮助您在编写代码时解决质量和安全问题。像拼写检查器一样,SonarLint 会显示缺陷并提供实时反馈和清晰的修复指导,以便从一开始就提供干净的代码。
官方:https://www.sonarsource.com/
安装
常用 IDEA 中可以通过通过插件直接安装,例如 PHPStrom
安装后重启就可以使用了
使用
1 问题代码示例
<?php
$a = 2024;
if ($a) return [\\\'year\\\' => 2024];
可以直接
ctrl +shift+s
对当前文件扫描质量,或者鼠标右键也可以选择扫描
扫描结果
解决办法
<?php
$a = 2024;
if ($a) {
return [\\\'year\\\' => 2024];
}
2 for 循环停止条件应该是不变的
不规范代码
for ($i = 0; $i < 10; $i++) {
echo $i;
if(condition) {
$i = 20;
}
}
扫描结果
解决办法
<?php
for ($i = 0; $i < 10; $i++) {
echo $i;
}
3 所有的“catch” 块都应该能够捕获异常
在某些情况下, catch 块是死代码,因为它永远不会捕获任何异常:
-
如果有一个基类的处理程序,后面跟着一个从该基类派生的类的处理程序,则第二个处理程序永远不会触发:基类的处理程序将与派生类匹配,并且将是唯一执行的处理程序。 -
当多个 catch 块尝试捕获同一个异常类时,只会执行第一个。
当 catch 块在后面的 catch 块捕获每个异常之前捕获它时,此规则会引起问题。
不兼容的代码示例
class MyException extends Exception {}
class MySubException extends MyException {}
try {
doSomething();
} catch (MyException $e) {
echo $e;
} catch (MySubException $e) { // Noncompliant: MySubException is a subclass of MyException
echo \\\"Never executed\\\";
}
合规解决方案
class MyException extends Exception {}
class MySubException extends MyException {}
try {
doSomething();
} catch (MySubException $e) {
echo \\\"Executed\\\";
} catch (MyException $e) {
echo $e;
}
4 “switch”语句应该有“default”子句
最终 case default 子句的要求是防御性编程。该条款应采取适当的行动,或包含适当的评论,说明为什么不采取行动。即使 switch 覆盖了 enum 的所有当前值,仍然应该使用默认情况,因为不能保证 enum 不会被扩展。
不兼容的代码示例
switch ($param) { //missing default clause
case 0:
do_something();
break;
case 1:
do_something_else();
break;
}
合规解决方案
switch ($param) {
case 0:
do_something();
break;
case 1:
do_something_else();
break;
default:
error();
break;
}
原创文章,作者:网络技术联盟站,如若转载,请注明出处:https://www.sudun.com/ask/49812.html