前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP 免费代码质量检测工具 SonarLint

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

作者头像
Tinywan
发布2024-02-21 16:04:52
1290
发布2024-02-21 16:04:52
举报
文章被收录于专栏:开源技术小栈开源技术小栈

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

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

安装

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

安装后重启就可以使用了

使用

1 问题代码示例

代码语言:javascript
复制
<?php
$a = 2024;

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

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

扫描结果

解决办法

代码语言:javascript
复制
<?php
$a = 2024;

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

2 for 循环停止条件应该是不变的

不规范代码

代码语言:javascript
复制
for ($i = 0; $i < 10; $i++) {
  echo $i;
  if(condition) {
    $i = 20;
  }
}

扫描结果

解决办法

代码语言:javascript
复制
<?php
for ($i = 0; $i < 10; $i++) {
    echo $i;
}

3 所有的“catch” 块都应该能够捕获异常

在某些情况下, catch 块是死代码,因为它永远不会捕获任何异常:

  • 如果有一个基类的处理程序,后面跟着一个从该基类派生的类的处理程序,则第二个处理程序永远不会触发:基类的处理程序将与派生类匹配,并且将是唯一执行的处理程序。
  • 当多个 catch 块尝试捕获同一个异常类时,只会执行第一个。

当 catch 块在后面的 catch 块捕获每个异常之前捕获它时,此规则会引起问题。

不兼容的代码示例

代码语言:javascript
复制
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";
}

合规解决方案

代码语言:javascript
复制
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 不会被扩展。

不兼容的代码示例

代码语言:javascript
复制
switch ($param) {  //missing default clause
  case 0:
    do_something();
    break;
  case 1:
    do_something_else();
    break;
}

合规解决方案

代码语言:javascript
复制
switch ($param) {
  case 0:
    do_something();
    break;
  case 1:
    do_something_else();
    break;
  default:
    error();
    break;
}
本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-02-07,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 使用
    • 1 问题代码示例
      • 2 for 循环停止条件应该是不变的
        • 3 所有的“catch” 块都应该能够捕获异常
          • 4 “switch”语句应该有“default”子句
          相关产品与服务
          检测工具
          域名服务检测工具(Detection Tools)提供了全面的智能化域名诊断,包括Whois、DNS生效等特性检测,同时提供SSL证书相关特性检测,保障您的域名和网站健康。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
          http://www.vxiaotou.com