目录

​前言​

​问题​

​1. Correct this attempt to modify "candidates" or use "let" in its declaration.​

​2. Expected an assignment or function call and instead saw an expression.​

​3. Consider using "forEach" instead of "map" as its return value is not being used here.​

​4. Unreachable code.​

​5. Duplicate key 'speakerDeviceList'.​

​6. Add the "let", "const" or "var" keyword to this declaration of "win" to make it explicit.​


前言

Sonar 作为优秀的代码静态检测工具,咱们怎么能落下呢。这不,今天就把环境搭起来了,先拿一个 JS 工程试一试吧。

问题

rcroom 工程是一个 JS 语言为主的工程项目,集成到 Sonar 检测系统中,果然有不少问题,具体的问题清单,如下图所示:

#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_sed#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_音视频_02

Sonar 中所有的问题按照类型划分,可以分为 Bug、漏洞、异味三种,按照严重程度划分,可以分为阻断、严重、主要、次要、提示五档。如上图所示,该项目 Bug 69个,漏洞0个,异味71个;阻断的19个,主要42个,次要8个,严重和提示均为0个。下面针对上述问题中比较典型展开讨论。

1. Correct this attempt to modify "candidates" or use "let" in its declaration.

问题代码:

#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_音视频_03#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_sed_04

修复:

candidates 变量声明时使用 let 代替 const。

2. Expected an assignment or function call and instead saw an expression.

问题代码:

#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_ide_05#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_音视频_06修复:

其实是一个笔误的 bug,修改成赋值语句或者函数调用的形式,而不是表达式。

去掉一个等号 “=” 即可。

3. Consider using "forEach" instead of "map" as its return value is not being used here.

问题代码:

#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_ide_07#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_sed_08

修复:

把 map 方法替换为 forEach 方法即可。

4. Unreachable code.

问题代码:

#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_音视频_09#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_音视频_10

解决:

去掉 break; 代码行,其实,有些规则不必太死板,有些编码规则就要求每个 case 后边必须跟一个 break;语句。也是可以存在特例的。

5. Duplicate key 'speakerDeviceList'.

问题代码: 

#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_ide_11#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_sed_12

解决:

报错原因是重复声明了,不提示的话确实不容易看出来,哈哈。 瞬间发现了 Sonar 的好处。

6. Add the "let", "const" or "var" keyword to this declaration of "win" to make it explicit.

问题代码:

#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_sed_13#yyds干货盘点#Sonar 代码检测常见问题及修改实例(前端JS版本)_ide_14

修复:

显式的定义一个全局变量 win,代码如下:


let win



作者简介:?大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,?公众号:玩转音视频。同时也是 华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!?