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

文章目录

  • 参考文章
  • 一、 SonarLint是什么(代码质量检测器)
    • SonarQube 和SonarCloud
  • 二、代码质量问题案例
    • 1、异常应该被记录或重新抛出,但不能同时被记录和重新抛出
    • 2、局部变量不应该声明后立即返回或抛出
    • 3、不使用的“私有”字段应该被删除
    • 4、代码段不应该被注释掉
    • 5、应该删除未使用的局部变量
    • 6、 在布尔表达式中应避免使用“布尔”
    • 7、Try-catch块不应该嵌套
    • 8、加密算法应采用安全模式和填充方案
    • 9、实例方法不应该写入“静态”字段
    • 10、非原语字段不应该是“易失性的” (原子性)
    • 11、“静态”基类成员不应通过派生类型访问
    • 12、应该删除不必要的导入
    • 13、不应使用原始类型
    • 14、不应该抛出泛型异常
    • 15、常量名称应该符合命名约定
    • 16、应该返回空数组和集合,而不是null
    • 17、方法的认知复杂性不应太高
    • 18、不应使用冗余强制转换
    • 19、代码段不应该被注释掉
    • 不行了不行了太多了我不干了
    • 21、嵌套三元表达式会使代码更加难以理解。
    • 22、实用程序类不应该有公共构造函数
    • 23、字符串不应该重复
    • 23、字符串#replace应优先于字符串#replaceAll
    • 24、子类字段不应覆盖父类字段


参考文章

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

SonarLint官网

SonarQube官网

SonarCloud官网

SonarQube简介

SonarQube与SonarLint的区别和联系

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

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

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

他可以通过在idea中直接通过插件安装
在这里插入图片描述
安装后重启就可以使用了
可以直接 ctrl +shift+s对当前文件扫描质量
或者右键文件夹对整个包或者模块项目全部质量扫描
SonarLint(代码质量检测工具+案例+好习惯养成器)_第1张图片

在扫描过后下面会有提示
像下面这些头部显示的图标就是有问题有严重的有不严重的,bug检测出来是一个小虫,如果是漏洞问题会显示一个锁。
SonarLint(代码质量检测工具+案例+好习惯养成器)_第2张图片

SonarQube 和SonarCloud

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

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

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

SonarQube的文档有安装的技巧
安装SonarQube 的时候报了jvm错误 ,只能手动改wrapper.conf文件
指向我再去的java版本
在这里插入图片描述
SonarLint(代码质量检测工具+案例+好习惯养成器)_第3张图片
你可构建自己的项目,创建一个本地项目
SonarLint(代码质量检测工具+案例+好习惯养成器)_第4张图片

需要下载

SonarLint(代码质量检测工具+案例+好习惯养成器)_第5张图片
我卡这了,就是连不上,token和密码都不行,吐血而亡

二、代码质量问题案例

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

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

Exceptions should be either logged or rethrown but not both

no
SonarLint(代码质量检测工具+案例+好习惯养成器)_第6张图片
yesSonarLint(代码质量检测工具+案例+好习惯养成器)_第7张图片

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
SonarLint(代码质量检测工具+案例+好习惯养成器)_第8张图片
yes
在这里插入图片描述

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

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

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

no

SonarLint(代码质量检测工具+案例+好习惯养成器)_第9张图片
yse
在这里插入图片描述

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

Unnecessary imports should be removed

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

SonarLint(代码质量检测工具+案例+好习惯养成器)_第10张图片

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一个空。
SonarLint(代码质量检测工具+案例+好习惯养成器)_第11张图片

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

Cognitive Complexity of methods should not be too high

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

SonarLint(代码质量检测工具+案例+好习惯养成器)_第12张图片

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

Redundant casts should not be used

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

在这里插入图片描述

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

Sections of code should not be commented out

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

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

在这里面可以勾选这个规则或者取消规则
SonarLint(代码质量检测工具+案例+好习惯养成器)_第13张图片

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

在这里插入图片描述
SonarLint(代码质量检测工具+案例+好习惯养成器)_第14张图片

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

Utility classes should not have public constructors

在这里插入图片描述

23、字符串不应该重复

String literals should not be duplicated

SonarLint(代码质量检测工具+案例+好习惯养成器)_第15张图片

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

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

String#replace should be preferred to String# replaceAll

SonarLint(代码质量检测工具+案例+好习惯养成器)_第16张图片
在这里插入图片描述
看第一个参数是regex 正则,但是有时候你用的不是,
SonarLint说:String::replace与String::replaceAll做的事情完全相同,没有regex的性能缺陷

24、子类字段不应覆盖父类字段

Child class fields should not shadow parent class fields

在两个不相关的类中有一个同名的变量是可以的,但在类层次结构中做同样的事情,往好了说会引起混乱,往坏了说会造成混乱。

意思应该是不应该命名和父类类似的名称

你可能感兴趣的:(java-笔记,java,开发语言)