JavaScript 和 TypeScript 中的代码检查
本主题列出了 JavaScript 和 TypeScript 中所有 JetBrains Rider 代码检查。
您可以在 编辑器 | 检查设置 | 检查严重性 | 其他语言 设置页面  Ctrl+Alt+S 上切换特定检查或更改其严重性级别。
代码质量工具
检查 | 描述 | 默认严重性 |
|---|---|---|
ESLint | 报告由 ESLint 检查器检测到的不一致。 | |
JSHint | 报告由 JSHint 检查器检测到的问题。 | |
标准代码样式 | 报告由 JavaScript Standard Style 检查器检测到的不一致。 | |
TSLint | 报告由 TSLint 检查器检测到的不一致。 |
赋值问题
检查 | 描述 | 默认严重性 |
|---|---|---|
赋值可以替换为运算符赋值 | 报告可以用运算符赋值替代的赋值操作,以使代码更简洁且可能更清晰。 示例: x = x + 3;
应用快速修复后,结果如下: x += 3;
| |
赋值给 'for' 循环参数 | 报告将值赋给声明为 | |
赋值给函数参数 | 报告对函数参数的赋值操作,包括递增和递减操作。 尽管偶尔是有意为之,但这种结构可能会极其令人困惑,并且通常是错误的结果。 | |
赋值用作条件 | 报告用作 | |
嵌套赋值 | 报告嵌套在另一个表达式中的赋值表达式,例如, | |
赋值结果被使用 | 报告在包含表达式中使用赋值结果的赋值表达式。 此类赋值通常表明存在编码错误,例如, 括号中的表达式将被忽略。 | |
变量被赋值为自身 | 报告形式为 |
可能引起混淆的代码结构
检查 | 描述 | 默认严重性 |
|---|---|---|
令人困惑的浮点文字 | 报告任何没有小数点的浮点数,或小数点前没有数字,或小数点后没有数字的浮点数。 此类文字可能会引起混淆,并违反若干编码标准。 | |
令人困惑的 '+' 或 '-' 序列 | 报告 JavaScript 代码中 | |
执行动态生成的代码 | 报告调用 | |
魔术数字 | 报告一个“魔术数字”,即未通过常量声明命名的数字字面量。 魔术数字可能导致代码意图不明确,并且如果一个魔术数字在一个代码位置被更改而在另一个位置未更改,可能会导致错误。 数字 0、1、2、3、4、5、6、7、8、9、10、100、1000、0.0 和 1.0 被忽略。 | |
取反的 'if' 语句 | 报告具有 else 分支和取反条件的 if 语句。 颠倒 if 和 else 分支的顺序通常会提高此类语句的清晰度。 | |
取反的条件表达式 | 报告条件被取反的条件表达式。 建议颠倒条件表达式中分支的顺序,以提高语句的清晰度。 示例: | |
嵌套的条件表达式 | 报告嵌套在另一个三元条件中的三元条件表达式。 此类嵌套条件可能会极其令人困惑,最好用更明确的条件逻辑替代。 | |
嵌套函数 | 报告嵌套在另一个函数中的函数。 尽管 JavaScript 允许函数嵌套,但此类结构可能会令人困惑。 使用下面的复选框忽略匿名嵌套函数。 | |
过于复杂的算术表达式 | 报告包含过多项的算术表达式。 此类表达式可能会引起混淆并容易出错。 使用下面的字段指定算术表达式中允许的最大项数。 | |
过于复杂的布尔表达式 | 报告包含过多项的布尔表达式。 此类表达式可能会引起混淆并容易出错。 使用下面的字段指定算术表达式中允许的最大项数。 | |
无意义的算术表达式 | 报告包含加减零、乘以零或一、除以一以及移位零的算术表达式。 此类表达式可能是未完全完成的自动重构的结果。 | |
增量或减量结果被使用 | 报告在包含表达式中使用赋值结果的增量( | |
带空主体的语句 | 报告带有空主体的 使用下面的复选框指定是否应报告主体为空块语句的语句。 | |
不必要的块语句 | 报告未用作 | |
使用 'caller' 属性 | 报告在 JavaScript 函数中使用 |
有效性问题
检查 | 描述 | 默认严重性 |
|---|---|---|
引用全局对象的 'this' 表达式 | 报告在对象字面量或构造函数主体之外的 | |
尝试赋值给 const 或只读变量 | 报告将值重新分配给常量或只读变量。 | |
不是赋值或调用的表达式语句 | 报告既不是赋值也不是调用的表达式语句。 此类语句通常表明存在错误。 | |
具有不一致返回值的函数 | 报告一个函数在某些情况下返回值,而在其他情况下不返回值。 这通常表明存在错误。 示例:
function foo() {
if (true)
return 3;
return;
}
| |
八进制整数 | 报告一个已弃用的八进制整数文字,其前缀为 | |
保留字用作名称 | 报告将 JavaScript 保留字用作名称。 JavaScript 规范保留了一些当前未用作关键字的单词。 如果 JavaScript 的后续版本开始将这些单词用作关键字,将它们用作标识符可能会导致代码损坏。 | |
破坏 HTML 解析的字符串文字 | 报告包含 |
数据流
检查 | 描述 | 默认严重性 |
|---|---|---|
冗余的局部变量 | 报告一个不必要的局部变量,该变量不会使函数更易理解:
使用下面的复选框使此检查忽略立即返回或抛出的变量。 某些编码风格建议使用此类变量以提高代码清晰度并便于调试。 | |
重复使用局部变量 | 报告重复使用局部变量,并用与原始变量用法无关的新值覆盖其值。 以这种方式重复使用局部变量可能会引起混淆,因为局部变量的预期语义可能会因每次使用而有所不同。 如果代码更改导致预期会被覆盖的值实际上仍然有效,这也可能导致错误。 保持变量生命周期尽可能短,并且不要为了简洁而重复使用局部变量是良好的实践。 |
TypeScript
检查 | 描述 | 默认严重性 |
|---|---|---|
抽象类构造函数可以设为受保护 | 报告抽象类的公共构造函数,并建议将其设为受保护(因为将其设为公共是没有意义的)。 | |
分配的构造函数字段参数 | 报告 TypeScript 代码中的一个常见错误,即类字段被声明为构造函数参数,然后该参数被赋值。
class Foo {
constructor(private p: number) {
p = 1; //must be this.p = 1;
}
}
| |
重复的联合或交集类型组件 | 报告联合或交集中的重复类型。 | |
显式类型 | 报告与当前显式类型代码样式不匹配的类型注解。 当从上下文推断出的类型与类型注解完全匹配时,不需要进行类型声明,例如:
在某些情况下,始终使用显式类型是更可取的——这可以防止意外的类型更改,并使代码更加明确。 |
|
字段可以设为只读 | 报告可以设为只读的私有字段(例如,如果该字段仅在构造函数中被赋值)。 | |
不一致的 tsconfig.json 属性 | 报告 tsconfig.json 文件中 | |
泛型类型参数不正确 | 报告函数、接口或类声明中无效的类型参数。 | |
缺少增强导入 | 报告从 增强模块 使用时未显式导入。 |
|
缺少全局库 | 报告一个 TypeScript 库文件,该文件是符号所需的,但未列在 | |
缺少 tsconfig.json 选项 | 报告需要在 | |
收窄的类型 | 报告变量类型被类型保护收窄的用法。 请注意,严重性级别不会影响此检查。 | |
冗余的类型参数 | 报告与默认类型参数相同且可以移除的类型参数。 示例:
type Foo<T=number> = T;
let z: Foo<number>;
| |
引用的 UMD 全局变量 | 报告在当前文件为模块(ECMAScript 或 CommonJS)时使用 Universal Module Definition (UMD) 全局变量的情况。 在未显式导入的情况下引用 UMD 变量,如果库未被隐式包含,可能会导致运行时错误。 | |
类型不匹配 | 报告参数、返回值或赋值表达式的类型不正确。 | |
'any' 类型中的类型不匹配 | 报告函数调用中参数、返回值或赋值表达式的类型不正确,如果上下文符号可以隐式解析为
declare var test: any;
test.hasOwnProperty(true); //reports 'true'
| |
未解析的 TypeScript 引用 | 报告 TypeScript 代码中未解析的引用。 | |
未解析的导入名称 | 报告 TypeScript 代码中 |
可能的 bug
检查 | 描述 | 默认严重性 |
|---|---|---|
'for' 循环中更新或条件未使用循环变量 | 报告 | |
'typeof' 与非标准值的比较 | 报告将 | |
比较具有不兼容类型的表达式 | 报告操作数类型不兼容或类型没有可能的共同值的比较。 | |
与 NaN 的比较 | 报告与 NaN 的比较。 类似于 | |
数组文字中的连续逗号 | 报告数组文字中的连续逗号。 跳过的元素接受 | |
构造函数返回原始值 | 报告返回原始值的构造函数。 当使用 | |
除以零 | 报告除以零或余数为零的情况。 | |
相等运算符可能导致类型强制转换 | 报告可能导致意外类型强制转换的相等运算符的使用。 建议将 根据所选选项,将报告以下情况之一:
| |
无限循环语句 | 报告一个 | |
无限递归 | 报告一个必须无限递归或抛出异常的函数。 此类函数可能无法正常返回。 | |
索引属性访问的目标可能不正确 | 报告可能无效的索引属性访问,例如, | |
可能无效的构造函数用法 | 报告可能无效的构造函数的使用,例如:在 | |
可能无效的从闭包引用 'this' | 报告在闭包中使用的 示例:
function Outer() {
this.outerProp = 1;
function inner() {
// bad, because 'outerProp' of Outer
// won't be updated here
// on calling 'new Outer()' as may be expected
this.outerProp = 2;
}
inner();
}
| |
可能无效的从闭包引用类的 'this' | 报告尝试在非 lambda 的嵌套函数中通过 | |
对象分配结果被忽略 | 报告对象分配的结果被忽略的情况,例如, | |
可疑的 '=+' 赋值 | 报告形式为 | |
将 'bind' 与箭头函数一起使用的可疑用法 | 报告与箭头函数一起使用的 | |
可疑的变量/参数名称组合 | 报告赋值或函数调用,其中目标变量或函数参数的名称与分配给它的值的名称不匹配。 示例:
var x = 0;
var y = x;
或者
var x = 0, y = 0;
var rc = new Rectangle(y, x, 20, 20);
此处检查猜测 指定不应一起使用的名称。 如果参数名称或赋值目标名称包含某组中的单词,而分配或传递的变量名称包含另一组中的单词,则会报告错误。 | |
使用了 void 函数的返回值 | 报告一个函数的返回值,而该函数实际上不返回任何内容。 调用此类函数总是会生成一个 示例:
let a = console.log('foo');
|
try 语句问题
检查 | 描述 | 默认严重性 |
|---|---|---|
在 'finally' 块中使用 'continue' 或 'break' | 报告在 | |
在 'finally' 块中使用 'return' | 报告在 | |
在 'finally' 块中使用 'throw' | 报告在 | |
空的 'catch' 块 | 报告一个空的 | |
空的 'finally' 块 | 报告一个空的 | |
空的 'try' 块 | 报告一个空的 | |
异常用于本地控制流 | 报告一个 | |
未使用的 'catch' 参数 | 报告一个 使用下面的复选框禁用对带有注释的 |
命名约定
检查 | 描述 | 默认严重性 |
|---|---|---|
类命名约定 | 报告一个类或函数,该类或函数带有 JSDoc 使用下面提供的字段指定类名的最小长度、最大长度和预期的正则表达式。 使用标准的 | |
函数命名约定 | 报告一个函数,其名称过短、过长或不符合指定的正则表达式模式。 使用下面提供的字段指定函数名称的最小长度、最大长度和正则表达式。 使用标准的 | |
函数参数命名约定 | 报告一个函数参数,其名称过短、过长或不符合指定的正则表达式模式。 使用下面提供的字段指定局部变量名称的最小长度、最大长度和预期的正则表达式。 使用标准的 | |
包含非 ASCII 符号的标识符 | 报告名称中包含非 ASCII 符号的情况。 | |
局部变量命名约定 | 报告局部变量的名称过短、过长或不符合指定的正则表达式模式。 使用下面提供的字段指定局部变量名称的最小长度、最大长度和预期的正则表达式。 使用标准的 |
Flow 类型检查器
函数度量
检查 | 描述 | 默认严重性 |
|---|---|---|
包含超过三个取反的函数 | 报告包含三个或更多取反操作( | |
包含多个循环的函数 | 报告包含多个循环语句的函数。 | |
包含多个返回点的函数 | 报告包含多个返回点的函数。 此类函数难以理解和维护。 | |
包含过多参数的函数 | 报告包含过多参数的函数。 此类函数通常表明设计存在问题。 使用下面的字段指定函数允许的最大参数数量。 | |
过于复杂的函数 | 报告一个函数中分支点过多的情况(圈复杂度过高)。 此类函数可能会令人困惑且难以测试。 使用下面提供的字段指定函数允许的最大圈复杂度。 | |
过于冗长的函数 | 报告过于冗长的函数。 函数的长度通过计算函数中非空语句的数量来确定。 过于冗长的函数容易出错且难以测试。 使用下面的字段指定函数中允许的最大语句数量。 | |
过于嵌套的函数 | 报告一个函数,其主体包含嵌套过深的语句。 此类函数可能会令人困惑,并表明可能需要进行重构。 使用下面提供的字段指定函数中允许的最大嵌套深度。 |
代码样式问题
检查 | 描述 | 默认严重性 |
|---|---|---|
'var' 未在函数开头声明 | 检查使用 var 声明的局部变量是否在函数作用域的顶部声明。 | |
链式相等 | 报告链式相等比较(即 | |
链式函数调用 | 报告一个函数调用,其目标是另一个函数调用,例如, | |
比较中左侧的常量 | 报告左侧为常量值的比较操作。 根据编码约定,常量应位于比较的右侧。 | |
比较中右侧的常量 | 报告右侧为常量的比较操作。 根据编码约定,常量应仅位于比较的左侧。 | |
嵌套函数调用 | 报告一个函数调用,该调用被用作另一个函数调用的参数,例如, | |
箭头函数主体周围的冗余大括号 | 报告一个箭头函数,其主体仅由大括号和一个语句组成。 建议转换为无大括号的简洁语法。
应用快速修复后,代码片段如下所示:
|
|
没有大括号的语句主体 | 报告 | |
未定义属性赋值 | 报告将值赋给未在变量类型中定义的属性。 示例:
/**
* @type {{ property1: string, property2: number }}
*/
let myVariable = create();
myVariable.newProperty = 3; // bad
| |
不必要的括号 | 报告冗余的括号。 在表达式中:
在箭头函数参数列表中:
在 TypeScript 和 Flow 类型声明中:
|
|
未终止的语句 | 报告一个语句末尾没有分号或换行符的情况。 在 编辑器 | 代码样式 | JavaScript 或 TypeScript - 标点 中选择“用分号终止语句”选项,以报告任何未以分号结束的语句,即使使用了换行符。 根据某些编码风格,为了与其他语言保持一致,分号比换行符更受青睐。 |
可能不理想的代码结构
检查 | 描述 | 默认严重性 |
|---|---|---|
'break' 语句 | 报告 | |
带标签的 'break' 语句 | 报告带标签的 | |
'continue' 语句 | 报告一个 | |
带标签的 'continue' 语句 | 报告带标签的 | |
'debugger' 语句 | 报告用于与 JavaScript 调试器交互的 | |
'void' 表达式 | 报告一个 | |
'with' 语句 | 报告 | |
匿名函数 | 报告匿名函数。 函数表达式的显式名称可能有助于调试。 如果函数表达式没有名称且具有 ECMAScript 6 标准中指定的 | |
逗号表达式 | 报告一个逗号表达式。 此类表达式通常是过于巧妙代码的标志,可能会导致细微的错误。 初始化器或 | |
条件表达式 | 报告一个三元条件表达式。 某些编码标准禁止此类表达式,建议使用显式的 | |
带标签的语句 | 报告带标签的语句。 |
DOM 问题
检查 | 描述 | 默认严重性 |
|---|---|---|
调用 'document.write()' | 报告对 | |
不准确的平台检测 | 报告一种常见的 JavaScript 模式,用于检测脚本运行的浏览器或操作系统。 除了指出非可移植的结构外,这些平台检测模式通常不完整且容易被欺骗。 在大多数情况下,检测单个环境特性比尝试检测整个平台更可取。 检测到的模式包括:
| |
不兼容的 XHTML 用法 | 报告可能会对 XHTML 文档造成问题的常见 JavaScript DOM 模式。 特别是,检测到的模式在文档作为 XML 或 HTML 加载时,其行为会完全不同。 这可能会导致细微的错误,其中脚本行为依赖于文档的 MIME 类型,而不是其内容。 检测到的模式包括 document.body、document.images、document.applets、document.links、document.forms 和 document.anchors。 | |
使用 'innerHTML' 属性 | 报告使用 |
导入和依赖
检查 | 描述 | 默认严重性 |
|---|---|---|
package.json 中的依赖项不匹配 | 报告 package.json 中未安装或与指定的 版本范围 不匹配的依赖项。 | |
缺少 JSX 命名空间 | 报告在未导入命名空间的情况下使用 JSX 构造。 在文件范围内拥有命名空间可确保代码正确编译。 |
|
缺少模块依赖 | 报告一个模块,该模块通过 建议安装该模块并将其包含到 package.json 中。 对于 | |
使用了 URL 导入 | 检查 JavaScript 语言中使用的 URL 导入。 建议为指定的远程 URL 下载模块。 这种关联使 IDE 能够提供适当的代码补全和导航功能。 |
|
未使用的导入 | 报告一个冗余的 | |
将 package.json 依赖项更新到最新版本 | 建议将您的 package.json 依赖项升级到最新版本,忽略指定的版本。 |
|
Node.js
检查 | 描述 | 默认严重性 |
|---|---|---|
未解析的 Node.js API | 建议为 Node.js 配置代码辅助功能,例如, 请参阅 https://nodejs.org/api/ 以获取完整列表。 |
单元测试
React
检查 | 描述 | 默认严重性 |
|---|---|---|
无效的 DOM 元素嵌套 | 检测 JSX 文件中未按照 DOM 规范正确嵌套的 HTML 元素。 React 会在元素嵌套不正确时报告运行时警告。 |
异步代码和 Promise
检查 | 描述 | 默认严重性 |
|---|---|---|
在非异步函数中使用 'await' | 报告在函数中使用 | |
异步函数调用缺少 await | 报告在 示例:
async function bar() { /* ... */ }
async function foo() {
bar(); // bad
}
应用快速修复后,添加了
async function bar() { /* ... */ }
async function foo() {
await bar(); // good
}
| |
冗余的 'await' 表达式 | 报告冗余使用 当选中“报告 Promise”选项时,建议在适用的情况下(在 在此类上下文中移除
| |
返回 Promise 的方法调用结果被忽略 | 报告一个函数调用,该调用返回一个 | |
顶级 'await' 表达式 | 报告顶级 |
控制流问题
检查 | 描述 | 默认严重性 |
|---|---|---|
'for' 循环可以替换为 'while' 循环 | 报告一个 示例:
for(; exitCondition(); ) {
process();
}
应用快速修复后,结果如下:
while(exitCondition()) {
process();
}
如果您希望此检查忽略条件简单或不存在的 for 循环,请使用下面的复选框。 | |
具有相同分支的 'if' 语句 | 报告一个 | |
具有过多分支的 'if' 语句 | 报告一个 使用下面的字段指定预期的最大分支数量。 | |
具有相同分支的条件表达式 | 报告具有相同 | |
常量条件表达式 | 报告格式为 | |
'if' 语句中的重复条件 | 报告 示例:
if (a) {
...
} else if (a) {
...
}
| |
不会循环的循环语句 | 报告一个 | |
对象为 'null' 或 'undefined' | 报告由于在 | |
无意义的语句或布尔表达式 | 报告无意义或过于复杂的布尔表达式或语句。 示例:
let a = !(false && x);
let b = false || x;
应用快速修复后,结果如下:
let a = true;
let b = x;
| |
冗余的 'if' 语句 | 报告一个 示例:
if(foo())
{
return true;
}
else
{
return false;
}
应用快速修复后,代码如下所示: return foo();
| |
冗余的条件表达式 | 报告格式为以下形式的条件表达式
condition ? true : false
condition ? false : true
这些表达式可以安全地转换为
condition
!condition
| |
尾递归 | 报告尾递归,即函数在返回之前将自身调用作为最后一个操作。 尾递归始终可以用循环替代,这将显著提高速度。 某些 JavaScript 引擎会执行此优化,而其他引擎则不会。 因此,尾递归解决方案在不同环境中的性能特性可能会有显著差异。 | |
不必要的 'continue' 语句 | 报告循环末尾不必要的 | |
不必要的 'return' 语句 | 报告一个不必要的 | |
不必要的标签 | 报告未使用的标签。 | |
不必要的 'break' 语句标签 | 报告带标签的 | |
不必要的 'continue' 语句标签 | 报告带标签的 | |
不可达代码 | 报告永远无法执行的代码,这几乎可以肯定表明存在错误 | |
不健全的类型保护检查 | 报告
|
ES2015 迁移辅助
检查 | 描述 | 默认严重性 |
|---|---|---|
使用 'for..in' 而不是 'for..of' | 报告在数组上使用 |
|
使用 'let' 而不是 'const' | 报告一个 |
|
使用 'module.exports' 而不是 'export' | 报告一个 |
|
使用 'require()' 而不是 'import' | 报告一个 |
|
使用 'var' 而不是 'let' 或 'const' | 报告一个 | |
使用函数表达式而不是箭头函数 | 示例: arr.map(function(el) {return el + 1})
应用快速修复后,代码如下所示: arr.map(el => el + 1)
|
|
使用索引 'for' 而不是 'for..of' | 报告在数组上使用索引 |
|
使用字符串连接而不是模板字符串 | 报告字符串连接。 建议将其替换为 模板字符串 示例 "result: " + a + "."
应用快速修复后,代码如下所示: `result: ${a}.`
|
|
常规
检查 | 描述 | 默认严重性 |
|---|---|---|
已弃用的符号被使用 | 报告已弃用函数变量的使用。 | |
具有相同键的解构属性 | 报告具有相同键的多个解构属性。 建议合并这些属性。 | |
重复声明 | 报告在同一作用域中的多个声明。 | |
未遵循 ECMAScript 规范 | 报告基本语法问题和与语言规范的不一致,例如关键字的无效用法、不兼容的数字格式用法或 getter/setter 的多个参数。 | |
隐式声明的全局 JavaScript 变量 | 报告隐式声明的全局变量。 示例:
var aaa = 1; // good
bbb = 2; // bad, if bbb is not declared with 'var' somewhere
| |
导入可以简化 | 报告一个 ES6 导入,其 | |
引用了不可访问的 @private 和 @protected 成员 | 报告对标有 | |
JSDoc 标签的错误用法 | 报告由 Google Closure 编译器 注解暗示的警告,包括正确使用 | |
JQuery 选择器可以优化 | 报告一个重复的 jQuery 选择器,该选择器可以被缓存,或者一个属性或伪选择器的使用(可选)。 | |
使用了 JSX 语法 | 报告在 JavaScript 代码中使用 JSX 标签的情况。 | |
方法可以设为 'static' | 报告一个类方法,该方法可以安全地设为 使用下面的第一个复选框仅检查 |
|
JSDoc 与函数签名不匹配 | 报告 JSDoc 注释中的参数名称和数量与函数的实际参数不匹配的情况。 建议更新 JSDoc 注释中的参数。 示例:
/**
* @param height Height in pixels
*/
function sq(height, width) {} // width is not documented
应用快速修复后:
/**
* @param height Height in pixels
* @param width
*/
function sq(height, width) {}
| |
查询和更新集合不匹配 | 报告字段或变量集合的内容被查询但未更新,或被更新但未查询的情况。 此类不匹配的查询和更新毫无意义,可能表明是无效代码或拼写错误。 查询方法会自动检测,基于它们是否返回某些内容或是否传递了回调函数。 使用下表指定哪些方法是更新方法。 | |
缺少本地存储的 HTTP 链接库 | 报告一个外部 JavaScript 库的 URL,该库未与任何本地存储的文件关联。 建议下载该库。 这种关联使 IDE 能够提供适当的代码补全和导航功能。 | |
未使用严格模式 | 报告未处于 | |
使用了原始类型对象包装器 | 报告对原始类型包装器的不当使用或对原始类型属性的修改,因为在后一种情况下,分配的值将会丢失。 | |
属性可以替换为简写 | 报告一个可以转换为 ES6 简写样式的对象属性,并提供快速修复来完成此操作。 示例:
var obj = {foo:foo}
应用快速修复后,代码如下所示:
var obj = {foo}
|
|
模板字符串中的冗余嵌套 | 报告字符串或模板字符串的嵌套实例。 建议将嵌套实例内联到包含的模板字符串中。 示例:
let a = `Hello, ${`Brave ${"New"}`} ${"World"}!`
应用快速修复后,代码如下所示:
let a = `Hello, Brave New World!`
| |
从闭包引用可变变量 | 报告从函数访问外部可变变量的情况。 示例:
for (var i = 1; i <= 3; i++) {
setTimeout(function() {
console.log(i); // bad
}, 0);
}
| |
签名不匹配 | 报告一个 JavaScript 调用表达式,其中参数与引用函数的签名不匹配,包括参数的类型和数量。 此外,如果重载函数在参数和返回类型方面与被重载的函数不匹配,也会报告。 忽略 TypeScript 代码。 | |
JSDoc 中的语法错误和未解析的引用 | 报告文档注释中的语法差异。 | |
未过滤的 for..in 循环 | 报告未过滤的
Object.prototype.myMethod = function myMethod() {};
let a = { foo: 42 };
for (let i in a) {
console.log(a[i]);
}
建议将整个循环替换为
for (let i in a) {
if (a.hasOwnProperty(i)) {
console.log(a[i]);
}
}
| |
不必要的分号 | 报告一个不必要的分号。 | |
数组文字中不需要的最后一个逗号 | 报告在数组文字中使用尾随逗号的情况。 仅当 JavaScript 语言版本设置为 ECMAScript 5.1 时才会报告此警告。 尽管规范允许数组中的尾随逗号,但某些浏览器在使用尾随逗号时可能会抛出错误。 您可以在代码样式 | JavaScript 或 TypeScript | 标点中配置尾随逗号的格式选项。 | |
对象文字中不需要的最后一个逗号 | 报告在对象文字中使用尾随逗号的情况。 仅当 JavaScript 语言版本设置为 ECMAScript 5.1 时才会报告此警告。 对象文字中的尾随逗号是规范允许的,但某些浏览器在使用尾随逗号时可能会抛出错误。 您可以在代码样式 | JavaScript 或 TypeScript | 标点中配置尾随逗号的格式选项。 | |
未解析的 Ext JS xtype | 报告一个 Ext JS | |
未解析的 JSX 组件 | 报告对 JSX 组件的未解析引用。 建议添加缺少的导入语句(如果引用的组件在项目或其依赖项中定义),或者创建一个具有此名称的新组件。 新组件的模板可以在编辑器 | 文件和代码模板中修改。 | |
未解析的 JavaScript 引用 | 报告 JavaScript 代码中未解析的引用。 忽略 TypeScript 代码。 | |
未解析的文件引用 | 报告 JavaScript 文件中未解析的文件引用,包括 CommonJS 和 AMD 模块引用。 | |
在静态初始化器中使用可能未赋值的属性 | 报告一个类成员初始化器,该初始化器引用了另一个未提升的类成员,而后者可能尚未初始化。 | |
变量声明可以与第一次赋值合并 | 报告一个未初始化声明的变量,该变量在代码中更远处或单个嵌套作用域中被使用。 建议将变量移到更接近其使用的位置,并将其与初始化表达式合并。 |
|
Webpack 配置与 JSON Schema 的兼容性 | 验证 webpack 配置文件中的选项(其名称应以 `webpack` 开头,例如 `webpack.config.js`),并与 webpack 选项模式 进行对比。 |
switch 语句问题
检查 | 描述 | 默认严重性 |
|---|---|---|
'default' 不是 'switch' 中的最后一个 case | 报告一个 | |
'switch' 语句缺少分支 | 报告一个 |
|
'switch' 语句没有 'default' 分支 | 报告一个 |
|
'switch' 语句是多余的,可以被替换 | 报告一个 |
|
重复的 'case' 标签 | 报告在 | |
'switch' 语句中的贯穿 | 报告一个 | |
嵌套的 'switch' 语句 | 报告嵌套在另一个 | |
'switch' 语句中的文本标签 | 报告在 示例:
switch(x)
{
case 1:
case2: //typo!
case 3:
break;
}
| |
不可达的 'switch' 语句 'case' 分支 | 报告 示例:
/**
* @param {('foo' | 'bar')} p
*/
function foo(p) {
switch (p) {
case 'foo': break;
case 'bar': break;
case 'baz': break; // unreachable
}
}
| |
变量在不同的 'case' 子句中声明并被使用 | 报告在 如果此模式是有意使用的,请禁用对 |
按位运算问题
检查 | 描述 | 默认严重性 |
|---|---|---|
按位表达式可以简化 | 报告包含 | |
按位运算符的使用 | 报告可疑的按位与(" | |
不兼容的按位掩码操作 | 报告一个按位掩码表达式,该表达式肯定会评估为 示例:
// Incompatible mask: as the last byte in mask is zero,
// something like 0x1200 would be possible, but not 0x1234
if ((mask & 0xFF00) == 0x1234) {...}
| |
可能错误常量的移位操作 | 报告移位操作,其中第二个操作数是超出合理范围的常量,例如,整数移位操作超出范围 |