SonarLint(代码质量检测工具+案例+好习惯养成器)

2023-11-12

文章目录


参考文章

个人笔记(我不是运维我也不是测试),不同意见,望有交流
直接可以点击跳转连接

SonarLint官网

SonarQube官网

SonarCloud官网

SonarQube简介

SonarQube与SonarLint的区别和联系

一、 SonarLint是什么(代码质量检测器)

这个东西是一个很好的插件,可以养成量好的代码习惯,一个好的程序员代码质量肯定是需要合格的。
SonarLint官网
官网的话:

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

他可以通过在idea中直接通过插件安装
在这里插入图片描述
安装后重启就可以使用了
可以直接 ctrl +shift+s对当前文件扫描质量
或者右键文件夹对整个包或者模块项目全部质量扫描
在这里插入图片描述

在扫描过后下面会有提示
像下面这些头部显示的图标就是有问题有严重的有不严重的,bug检测出来是一个小虫,如果是漏洞问题会显示一个锁。
在这里插入图片描述

SonarQube 和SonarCloud

使用 SonarLint + SonarQube 持续高效地交付
您的工作流程已经拥有所有正确的部分 - 它只需要一点涡轮增压。SonarLint 在您的 IDE 中捕获问题,同时 SonarQube分析拉取请求和分支。这种组合形成了一个持续的代码质量分析解决方案,可以让您的代码库保持干净。

您将花更少的时间审查代码问题,而将更多时间花在代码逻辑和解决有趣的问题上!
这两个也都可以做代码质量检测

SonarLint可以接收和连接SonrarQube对代码库扫描的结果从而通知Developer(程序员)

SonarQube的文档有安装的技巧
安装SonarQube 的时候报了jvm错误 ,只能手动改wrapper.conf文件
指向我再去的java版本
在这里插入图片描述
在这里插入图片描述
你可构建自己的项目,创建一个本地项目
在这里插入图片描述

需要下载

在这里插入图片描述
我卡这了,就是连不上,token和密码都不行,吐血而亡

二、代码质量问题案例

先说这些问题代码可不是我写的

1、异常应该被记录或重新抛出,但不能同时被记录和重新抛出

Exceptions should be either logged or rethrown but not both

no
在这里插入图片描述
yes在这里插入图片描述

2、局部变量不应该声明后立即返回或抛出

Local variables should not be declared and then immediately returned
or thrown

no
在这里插入图片描述
yes
在这里插入图片描述

3、不使用的“私有”字段应该被删除

没有用的东西删除

Unused “private” fields should be removed

no
在这里插入图片描述

yes
在这里插入图片描述

4、代码段不应该被注释掉

没用就不要了

Sections of code should not be commented out

no
在这里插入图片描述

yse
在这里插入图片描述

5、应该删除未使用的局部变量

Unused local variables should be removed

6、 在布尔表达式中应避免使用“布尔”

Boxed “Boolean” should be avoided in boolean expressions

7、Try-catch块不应该嵌套

Try-catch blocks should not be nested

8、加密算法应采用安全模式和填充方案

Encryption algorithms should be used with secure mode and padding
scheme

9、实例方法不应该写入“静态”字段

Instance methods should not write to “static” fields

在这里插入图片描述

10、非原语字段不应该是“易失性的” (原子性)

Non-primitive fields should not be “volatile”

将数组标记为volatile意味着数组本身将始终被刷新读取,而不会被线程缓存,但数组中的项将不会被刷新。类似地,将可变对象字段标记为volatile意味着对象引用是volatile,但对象本身不是,其他线程可能看不到对象状态的更新。

Atomic类型
AtomicIntegerArray:提供了原子性操作int数据类型数组元素的操作。
AtomicLongArray:提供了原子性操作long数据类型数组元素的操作。
AtomicReferenceArray:提供了原子性操作对象引用数组元素的操作。
保证原子类型的数组666

这可以通过使用相关的AtomicArray类(例如AtomicIntegerArray)来使用数组来回收。对于可变对象,应该删除volatile,并使用其他一些方法来确保线程安全,例如同步或ThreadLocal存储。
no
在这里插入图片描述
yes
在这里插入图片描述

11、“静态”基类成员不应通过派生类型访问

“static” base class members should not be accessed via derived types

为了代码的清晰性,基类的静态成员永远不应该使用派生类型的名称进行访问。这样做会让人感到困惑,可能会造成存在两个不同的静态成员的错觉

no

在这里插入图片描述
yse
在这里插入图片描述

12、应该删除不必要的导入

Unnecessary imports should be removed

没有用的引入就删除了把兄弟

在这里插入图片描述

13、不应使用原始类型

Raw types should not be used

No
在这里插入图片描述
YES
在这里插入图片描述

14、不应该抛出泛型异常

Generic exceptions should never be thrown

这是最基本的规范

NO

YES
在这里插入图片描述

15、常量名称应该符合命名约定

Constant names should comply with a naming convention

NO 常量应该全大写啊
在这里插入图片描述

16、应该返回空数组和集合,而不是null

Empty arrays and collections should be returned instead of null

不要return一个空。
在这里插入图片描述

17、方法的认知复杂性不应太高

Cognitive Complexity of methods should not be too high

NO 在SonarLint里面 认知复杂对不能超过15,
这么高的复杂度如果让另一个人来维护这个代码,会骂人的。

在这里插入图片描述

18、不应使用冗余强制转换

Redundant casts should not be used

NO 意思就是他多此一举的转换
在这里插入图片描述

在这里插入图片描述

19、代码段不应该被注释掉

Sections of code should not be commented out

没用的代码就删除,不要乱扔垃圾。

不行了不行了太多了我不干了

在这里面可以勾选这个规则或者取消规则
在这里插入图片描述

21、嵌套三元表达式会使代码更加难以理解。

在这里插入图片描述
在这里插入图片描述

22、实用程序类不应该有公共构造函数

Utility classes should not have public constructors

在这里插入图片描述

23、字符串不应该重复

String literals should not be duplicated

在这里插入图片描述

重复的字符串使用,字符串应该从一而终,不应该在找一个一样的。渣男呸

23、字符串#replace应优先于字符串#replaceAll

String#replace should be preferred to String# replaceAll

在这里插入图片描述
在这里插入图片描述
看第一个参数是regex 正则,但是有时候你用的不是,
SonarLint说:String::replace与String::replaceAll做的事情完全相同,没有regex的性能缺陷

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SonarLint(代码质量检测工具+案例+好习惯养成器) 的相关文章

随机推荐

  • vs2010环境下提示找不到d3dx9.h

    无法打开d3dx9 h 我们知道d3dx9 h是在DirectX SDK中的 我们只是需要下载下来就可以了 下载地址为 http www microsoft com en us download details aspx id 6812 如
  • 如何在 Luminar 4 中​使用AI天空更换工具?

    如何在 Luminar 4 中使用AI天空更换工具 如果照片缺少引人入胜的天空 AI天空更换工具可以轻松替换它 该工具设计用于平坦或暴风雨的天空 但通常可以通过改进滑块进行调整以适用于大多数天空 AI天空更换工具利用人工智能的力量自动分析图
  • 【JavaScript】(一)类型转换

    JS支持自动类型转换 其功能非常强大 首先看一段代码 结果如下 由此可见执行减法运算的时候 自动执行算术运算 但是执行加法运算的时候 默认将 作为连接符 它的转换规律如下 对于减号运算符 因为字符串不支持减法运算 所以系统自动将字符串转换成
  • Loongnix单机部署Ceph(LoongArch架构、Ceph N版、手动部署MON、OSD、MGR、Dashboard服务)

    基础环境信息 CPU 龙芯3C5000L 2 内存 128G 硬盘 系统盘 一块512G的NVME的SSD 数据盘 三块16T的HDD 操作系统版本 Loongnix 8 4 Ceph版本 Ceph 14 2 21 Nautilus Cep
  • java中优雅的参数校验方法

    一 引子 要对方法的参数进行校验 最简单暴力的写法是这个样子 public static void utilA String a BigDecimal b if StringUtils isEmpty a System out printl
  • java-FileReader和FileWriter的介绍

    在java中对数据输入输出的操作陈作为流 我们对不同的文件进行操作 或者对操作文件进行输入和输出时所用的流都是不同的 因此在java io的包下存在很多流的类或者接口提供给我们对应的操作 流的原理 输入流 input 将外部的文件通过流读取
  • css3中vh和vw分别是什么意思?

    1vw等于视口宽度 viewport width 的百分之一 也就是说100vw就是视口的宽度 同理 1vh等于视口高度 viewport height 的百分之一 100vh就是视口的高度
  • 位运算高级应用

    位运算的高级应用 位运算符 针对整数的二进制 下面的数据假设为1字节 实际为4字节 12 0000 1100 13 0000 1101 12 13 0000 1100 按位与 相同的位都为1才为1 12 13 0000 1101 按位或 相
  • 了解Linux虚拟化

    了解Linux虚拟化 本章为读者提供了Linux虚拟化中的主流技术及其相对于其他技术的优势的见解 本书共有14章 涵盖了KVM虚拟化的所有重要方面 从KVM内部和高级主题 如软件定义的网络 性能调整和优化 到物理到 虚拟迁移开始 在本章中
  • ubuntu安装ssh

    1 检查自己是否安装了openssh server dpkg l grep ssh 如果输出内容有openssh server 说明已经安装过了 可以跳过下一步 2 安装openssh server 由于ubuntu自带ssh客户端 只需要
  • docker 命令报异常permission denied

    在Linux系统中 新安装docker 输入命令 如 docker images 结果却报异常了 简单理解就是当前用户的连接被拒绝了 解决方案一 使用管理员权限 命令前加sudo 解决方案二 给当前用户加入到docker用户组中 sudo
  • 牛牛的等差数列【线段树】

    题目链接 这里的突破口在于小于等于25且大于等于3的质数连乘在1e8左右 所以 我们可以在操作上 将其看作对1e8去求模 而不是对每个都进行预处理 时间复杂度 也就是说 我们排除这个预处理之后 直接就是降了10倍左右的复杂度 然后 给区间一
  • 涉密服务器虚拟化软件,虚拟化软件解决方案

    1 背景 随着涉密行业信息化建设和IT业务的快速增长 涉密行业传统信息化建设中对于服务器应用面临着如下困境 资源利用率低 传统服务器应用部署模式采用 烟囱式 架构 单个应用独享整个服务器资源 资源利用率低 业务上线周期长 新增业务时 需要重
  • python小游戏 消消乐小游戏设计与实现

    文章目录 0 项目简介 1 游戏介绍 2 实现效果 3 开发工具 3 1 环境配置 3 2 Pygame介绍 4 具体实现 5 最后 0 项目简介 Hi 各位同学好呀 这里是L学长 今天向大家分享一个今年 2022 最新完成的毕业设计项目作
  • codeforces 1215d D. Ticket Game

    题意 有长度为n的串 内容为0 9数字或 Mono先手 填数 Mono希望前n 2个数和 后n 2个数和 Bicarp希望相等 问谁能赢 记录两边的 数量lnum rnum 记录两边和lsum rsum 如果两边lnum rnum时 如果l
  • python文件读写方法手机,Python中文件的读写操作的几种方法

    对文件的操作 步骤为 打开一个文件 gt 读取 写入内容 gt 保存文件 文件读写的3中模式 1 w 写模式 它是不能读的 如果用w模式打开一个已经存在的文件 会清空以前的文件内容 重新写 w 是读写内容 只要沾上w 肯定会清空原来的文件
  • 浅谈 logback的MDC机制

    logback的MDC机制 1 MDC 介绍 MDC Mapped Diagnostic Context 映射调试上下文 即将一些运行时的上下文数据通过logback打印出来 是 一种方便在多线程条件下记录日志的功能 和SiftingApp
  • 后谷歌时代:谁能笑到最后?

    后谷歌时代 谁能笑到最后 自从谷歌把 g cn转向 www google com hk那天起 后谷歌时代已经来临 早在谷歌退出中国市场仅仅是传言时 搜狗 有道 搜搜纷纷叫嚣着抢夺谷歌在中国的市场份额 现在看来 抢夺谷歌中国市场份额的绝非搜狗
  • Cypress vs Playwright——哪个 JavaScript 测试框架更好?

    10 年前 自动化测试人员如果要编写 E2E 测试 主要使用 Selenium 每个有机会使用该解决方案的人都应该会记得设置 编写和调试是多么不愉快 在此过程中还创建了一些更有趣的自动化工具 例如 Webdriver io TestCafe
  • SonarLint(代码质量检测工具+案例+好习惯养成器)

    文章目录 参考文章 一 SonarLint是什么 代码质量检测器 SonarQube 和SonarCloud 二 代码质量问题案例 1 异常应该被记录或重新抛出 但不能同时被记录和重新抛出 2 局部变量不应该声明后立即返回或抛出 3 不使用