PHP 免费代码质量检测工具 SonarLint

SonarLint 是一个免费的开源IDE 扩展,可识别并帮助您在编写代码时解决质量和安全问题。像拼写检查器一样,SonarLint 会显示缺陷并提供实时反馈和清晰的修复指导,以便从一开始就提供干净的代码。

官方:https://www.sonarsource.com/

安装

常用 IDEA 中可以通过通过插件直接安装,例如 PHPStrom

安装后重启就可以使用了

使用

1 问题代码示例

<?php
$a = 2024;

if ($a) return [\\\'year\\\' => 2024];

可以直接 ctrl +shift+s 对当前文件扫描质量,或者鼠标右键也可以选择扫描

PHP 免费代码质量检测工具 SonarLint

扫描结果

解决办法

<?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

Like (0)
网络技术联盟站的头像网络技术联盟站
Previous 2024年5月17日
Next 2024年5月17日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注