PhpStorm 2021.3 Help

JavaScript 和 TypeScript 中的代码检查

本主题列出 了 JavaScript 和 TypeScript 中可用的所有 PhpStorm代码检查。

您可以在编辑器 |上切换特定检查或更改其严重性级别。IDE 设置的检查Ctrl+Alt+S页面。

DOM 问题

检查

描述

默认严重性

调用'document.write()'

document.write()报告对or的方法调用document.writeln()。此类调用的大多数用法通过显式 DOM 调用(例如getElementByID()和)执行得更好createElement()。此外,write()andwriteln()调用不适用于 XML DOM,包括用于 XHTML 的 DOM(如果被视为 XML)。这可能导致难以指出错误。

已禁用

平台检测不准确

报告用于检测运行脚本的浏览器或操作系统的常见 JavaScript 模式。除了指出不可移植的结构外,这些平台检测模式通常不完整且容易被愚弄。在大多数情况下,检测单个环境特征优于尝试检测整个平台。

检测到的模式包括:
  • document.all

  • document.layers

  • navigator.userAgent

  • navigator.oscpu

  • navigator.appName

  • navigator.appCodeName

  • navigator.platform

已禁用

不兼容的 XHTML 用法

报告可能会给 XHTML 文档带来问题的常见 JavaScript DOM 模式。特别是,检测到的模式的行为将完全不同,具体取决于文档是作为 XML 还是 HTML 加载的。这可能会导致脚本行为取决于文档的 MIME 类型而不是其内容的细微错误。检测到的模式包括 document.body、document.images、document.applet、document.links、document.forms 和 document.anchors。

已禁用

使用“innerHTML”属性

innerHTML使用该属性将对 DOM 节点的 JavaScript 访问报告为文本。的大多数用法在innerHTML显式 DOM 调用(例如getElementByID()和)时执行得更好createElement()。此外,innerHTML不适用于 XML DOM,包括 XHTML 的 DOM(如果被视为 XML)。这可能会导致难以诊断错误。

已禁用

导入和依赖

检查

描述

默认严重性

package.json 中的依赖项不匹配

报告 package.json 中未安装或与指定版本范围不匹配的依赖项。

警告 警告

JSX 代码中缺少“React”命名空间导入

报告使用 JSX 构造而不导入 React 命名空间。在文件范围内拥有 React 命名空间可确保正确的代码编译。

在具有 React 17+ 的项目中禁用检查,因为这些版本不再需要 React 命名空间。

弱警告 弱警告

缺少模块依赖

报告未安装或未在 package.json 依赖项中列出的require()调用或语句中的模块。import

建议安装模块和/或将其包含在 package.json 中。

对于调用,仅适用于Node.js Core JavaScript 库require()范围内的文件。

弱警告 弱警告

使用 URL 导入

检查 JavaScript 语言中使用的 URL 导入。建议下载指定远程 URL 的模块。这种关联使 IDE 能够提供正确的代码完成和导航。

仅 JavaScript 语言中的 ECMAScript 模块支持导入说明符中的 URL。

信息没有高亮,只有修复

未解析的导入名称

import在声明中报告未解析的名称或绑定。

TypeScript 代码被忽略。

弱警告 弱警告

未使用的导入

报告冗余import语句。如果源文件中未使用导入的符号,通常会出现这种情况。为避免副作用,请考虑使用裸导入import 'packageName'而不是常规导入。

警告 警告

将 package.json 依赖项更新到最新版本

建议将您的 package.json 依赖项升级到最新版本,忽略指定版本。

信息没有高亮,只有修复

代码质量工具

检查

描述

默认严重性

ESLint

报告ESLint linter检测到的差异。

突出显示基于ESLint 配置文件中为每个单独规则指定的规则严重性。

清除“使用配置文件中的规则严重性”复选框以将此检查中配置的严重性用于所有 ESLint 规则。

已禁用

JSHint

报告JSHint linter 检测到的问题。

已禁用

标准代码风格

报告JavaScript 标准样式linter 检测到的差异。

编辑器中突出显示的严重性基于 linter 报告的严重性级别。

已禁用

TSLint

报告TSLint linter检测到的差异。

突出显示基于在TSLint 配置文件中为每个单独的规则指定的规则严重性。

清除“使用配置文件中的规则严重性”复选框以将此检查中配置的严重性用于所有 TSLint 规则。

已禁用

作业问题

检查

描述

默认严重性

赋值可以替换为操作符赋值

报告可以用运算符赋值替换的赋值操作,以使您的代码更短并且可能更清晰。

例子:
x = x + 3;
x = x / 3;

应用快速修复后,结果如下所示:
x += 3;
x /= 3;

已禁用

分配给'for'循环参数

报告对声明为for循环参数的变量的赋值。尽管有时是有意的,但这种结构可能会非常令人困惑,并且通常是错误的结果。

已禁用

分配给功能参数

报告对函数参数的赋值,包括递增和递减操作。尽管有时是有意的,但这种结构可能会非常令人困惑,并且通常是错误的结果。

已禁用

用作条件的赋值

报告用作if, while, for, ordo语句条件的赋值。虽然偶尔是有意的,但这种用法令人困惑,并且通常表示拼写错误(例如,=代替==)。

警告 警告

嵌套赋值

报告嵌套在另一个表达式中的赋值表达式,例如a = b = 1. 这样的表达式可能会令人困惑,并且违反了给定构造应该只做一件事的一般设计原则。

已禁用

使用的分配结果

报告赋值表达式,其中赋值的结果用于包含表达式。此类分配通常指示编码错误,例如,=而不是==. 此外,由于操作的顺序,它们可能会导致混淆,因为赋值的评估可能会以意想不到的方式影响外部表达式。

括号中的表达式被忽略。

已禁用

变量分配给自己

报告表单中的分配x = x

警告 警告

可能令人困惑的代码结构

检查

描述

默认严重性

令人困惑的浮点文字

报告任何没有小数点的浮点数,或小数点前的任何数字,或小数点后的数字。这样的文字可能会令人困惑,并且违反了几个编码标准。

已禁用

'+' 或 '-' 的混淆序列

报告 JavaScript 代码中的可疑字符组合+-字符(例如,a+++b。这样的序列令人困惑,并且它们的语义可能会随着空格的变化而改变。

已禁用

执行动态生成的代码

报告对 、 或 函数的调用eval()setTimeout()对象setInterval()的分配Function。这些函数用于执行通常动态生成的任意 JavaScript 文本字符串。这可能非常令人困惑,并且可能存在安全风险。

忽略向这些方法静态提供回调函数而不生成代码的情况。

已禁用

幻数

报告一个“幻数”,它是一个没有被常量声明命名的数字文字。幻数可能导致代码意图不明确,如果幻数在一个代码位置更改但在另一个代码位置保持不变,则可能导致错误。数字 0、1、2、3、4、5、6、7、8、9、10、100、1000、0.0 和 1.0 将被忽略。

已禁用

否定的'if'语句

报告具有 else 分支和否定条件的 if 语句。颠倒 if 和 else 分支的顺序通常会增加此类语句的清晰度。

已禁用

否定条件表达式

报告其条件被否定的条件表达式。建议翻转条件表达式中的分支顺序,以增加语句的清晰度。例子:!condition ? 2 : 1

已禁用

嵌套条件表达式

报告另一个三元条件中的三元条件表达式。这种嵌套条件可能会非常混乱,最好用更明确的条件逻辑代替。

已禁用

嵌套函数

报告嵌套在另一个函数中的函数。尽管 JavaScript 允许函数嵌套,但这样的结构可能会让人困惑。

使用下面的复选框忽略匿名嵌套函数。

已禁用

过于复杂的算术表达式

报告包含太多项的算术表达式。这样的表达式可能会令人困惑并且容易出错。

使用下面的字段指定算术表达式中允许的最大项数。

已禁用

过于复杂的布尔表达式

报告包含太多项的布尔表达式。这样的表达式可能会令人困惑并且容易出错。

使用下面的字段指定算术表达式中允许的最大项数。

已禁用

无意义的算术表达式

报告算术表达式,包括加或减零、乘以零或一、除以一和移位零。此类表达式可能是由于未完全完成自动重构而产生的。

警告 警告

使用的递增或递减结果

报告一个递增 ( ++) 或递减 ( --) 表达式,其中赋值的结果用于包含表达式。由于操作的顺序,此类赋值可能会导致混淆,因为赋值的评估可能会以意想不到的方式影响外部表达式。例子:var a = b++

已禁用

正文为空的语句

报告正文为空的if, while, for, or语句。with此类陈述通常由拼写错误引起,并可能引起混淆。

使用下面的复选框指定是否应报告以空块语句为主体的语句。

警告 警告

不必要的块语句

报告不用作ifforwhiledowith、 ortry语句的主体或函数声明主体的块语句。从 ECMAScript 6 开始,JavaScript 块引入了新的作用域let和变量,但仍然独立的块语句可能会令人困惑,并在与变量const一起使用时导致细微的错误。var

已禁用

使用“调用者”属性

报告callerJavaScript 函数中属性的使用情况。使用此属性访问调用方法的堆栈帧可能会非常混乱并导致细微的错误。

警告 警告

节点.js

检查

描述

默认严重性

未解决的 Node.js API

建议为 Node.jsrequire和/或核心模块('path'、'http'、'fs'等)配置编码辅助。

有关完整列表,请参阅https://nodejs.org/api/

警告 警告

单元测试

检查

描述

默认严重性

突出显示测试代码中的失败行

报告失败的方法调用或测试中的断言。

警告 警告

异步代码和承诺

检查

描述

默认严重性

非异步函数中的“等待”

await报告在可能打算异步但实际上缺少async修饰符的函数中的用法。虽然await可以用作标识符,但很可能是打算用作运算符,因此应制作包含函数async

弱警告 弱警告

缺少等待异步函数调用

报告函数内部async没有预期await前缀的函数调用async。这样的调用返回 aPromise并且控制流立即继续。

例子:
异步函数 bar() { /* ... */ } 异步函数 foo() { bar(); // 坏的 }

应用快速修复后,await会添加前缀:
async function bar() { /* ... */ } async function foo() { await bar(); // 好的 }

选择“返回语句”复选框中的“报告”复选框时,还建议添加await返回语句。

虽然这通常不是必需的,但它有两个主要好处。

  • await当你用 .包围你的代码时,你不会忘记添加try-catch

  • 显式await帮助 V8 运行时提供异步堆栈跟踪

弱警告 弱警告

多余的“等待”表达式

报告 的冗余使用await,例如await await,或等待非承诺结果。

When the 'Report for promises' option is selected, suggests removing awaitbefore promises when applicable (in returnstatements, and with Promise.resolve/reject).

在这种情况下删除await会导致两个问题。
  • 将代码包围try-catch并忘记添加await会改变代码语义,而您可能没有注意到这一点。

  • 具有显式await可能会阻止 V8 运行时提供异步堆栈跟踪

弱警告 弱警告

返回 promise 的方法调用的结果被忽略

报告一个函数调用,该函数调用返回一个Promise以后不使用的。此类调用通常是无意的并指示错误。

弱警告 弱警告

顶级“等待”表达式

报告顶级await表达式的用法。虽然新的“顶级异步”提案正在进行中,await但不允许使用外部异步函数。

已禁用

有效性问题

检查

描述

默认严重性

'this' 引用全局对象的表达式

报告this对象文字或构造函数主体之外的表达式。此类this表达式引用顶级“全局”JavaScript 对象,但大多无用。

警告 警告

尝试分配给 const 或 readonly 变量

报告将值重新分配给常量或只读变量。

错误 错误

不是赋值或调用的表达式语句

报告既不是赋值也不是调用的表达式语句。此类陈述通常表示错误。

弱警告 弱警告

返回不一致的函数

报告在某些情况下返回值而在其他情况下不返回值的函数。这通常表示错误。

例子:
函数 foo() { if (true) return 3; 返回; }

已禁用

八进制整数

报告一个不推荐使用的八进制整数文字,前缀为0而不是0o

现代 ECMAScript 代码中不允许使用此类文字,并且在严格模式下使用它们是错误的。

要强制检查 ES5 和 ES3 语言级别,请选中下面的“警告 ES5 代码中过时的八进制文字”复选框。

错误 错误

用作名称的保留字

报告用作名称的 JavaScript 保留字。JavaScript 规范保留了一些当前不用作关键字的词。如果更高版本的 JavaScript 开始使用这些词作为关键字,则使用这些词作为标识符可能会导致代码损坏。

警告 警告

破坏 HTML 解析的字符串文字

报告包含</序列的字符串文字。此类字符串可能导致嵌入 JavaScript 代码的任何 HTML 解析不正确。

已禁用

数据流

检查

描述

默认严重性

冗余局部变量

报告是不必要的局部变量,不会使函数更易于理解:

  • 立即返回的局部变量

  • 立即分配给另一个变量并且不再使用的局部变量

  • 始终与另一个局部变量或参数具有相同值的局部变量。

使用下面的复选框让此检查忽略立即返回或抛出的变量。一些编码风格建议使用此类变量以提高清晰度和便于调试。

警告 警告

局部变量的重用

报告重用局部变量并用与原始变量使用无关的新值覆盖其值。以这种方式重用局部变量可能会造成混淆,因为局部变量的预期语义可能随每次使用而变化。如果代码更改导致预期在实际存在时被覆盖的值,它也可能导致错误。保持变量生命周期尽可能短是一种很好的做法,并且为了简洁而不要重用局部变量。

已禁用

打字稿

检查

描述

默认严重性

抽象类构造函数可以被保护

报告一个抽象类的公共构造函数并建议对其进行保护(因为将其公开是没有用的)。

弱警告 弱警告

分配的构造函数字段参数

报告 TypeScript 代码中的一个常见错误,即当将类字段声明为构造函数参数,然后分配此参数时。

在这种情况下,不会分配相应的字段,只修改本地参数值。
类 Foo { 构造函数(私有 p:数字) { p = 1; //必须是this.p = 1; } }

警告 警告

重复联合或交叉类型组件

报告联合或交集内的重复类型。

警告 警告

显式类型

报告与显式类型的当前代码样式不匹配的类型注释。

当从上下文推断的类型与类型注释完全匹配时,不需要类型声明,例如:

var pi: number = 3.14

在某些情况下,最好始终使用显式类型 - 这可以防止意外的类型更改并使代码更加明确。

信息没有高亮,只有修复

字段可以是只读的

报告可以设为只读的私有字段(例如,如果该字段仅在构造函数中分配)。

弱警告 弱警告

不一致的 tsconfig.json 属性

报告tsconfig.json 文件中的 、 或 属性paths不一致checkJsextends

checkJs属性需要allowJs.

extends属性应该是有效的文件引用。

警告 警告

不正确的泛型类型参数

报告函数、接口或类声明中的无效类型参数。

错误 错误

缺少增强导入

在没有显式导入的情况下报告来自扩充模块的使用情况。

信息没有高亮,只有修复

缺少全局库

报告符号所需的 TypeScript 库文件,但未libtsconfig.json.

错误 错误

缺少 tsconfig.json 选项

报告需要显式选项的用法tsconfig.json。例如,要在.tsx文件中使用 JSX,tsconfig.json必须包含"jsx": "react".

警告 警告

窄型

报告变量类型被类型保护缩小的变量的用法。请注意,严重性级别不会影响此检查。

警告 警告

冗余类型参数

报告一个等于默认值的类型参数并且可以删除。

例子:
类型 Foo<T=number> = T; 让 z: Foo<数字>;

弱警告 弱警告

引用的 UMD 全局变量

如果当前文件是模块(EcmaScript 或 CommonJS),则报告 UMD 全局变量的用法。如果未隐式包含库,则在没有显式导入的情况下引用 UMD 变量可能会导致运行时错误。

弱警告 弱警告

“任何”类型中的类型不匹配

如果上下文符号可以隐式解析为类型,则报告带有参数、返回值或分配的表达式或不正确类型的函数调用any

声明 var test: any; test.hasOwnProperty(true); //报告“真”

弱警告 弱警告

未解决的 React 组件

报告对 JSX (React) 组件的未解析引用。如果引用的组件在项目或其依赖项中定义或创建具有指定名称的新组件,则建议添加导入语句。

可以在 Editor | 中修改新组件的模板。文件和代码模板。

弱警告 弱警告

未解决的 TypeScript 函数

报告未解析的函数调用。

弱警告 弱警告

未解析的 TypeScript 变量

报告对变量或字段的未解析引用。

弱警告 弱警告

可能的错误

检查

描述

默认严重性

'for' 循环,其中更新或条件不使用循环变量

报告for条件或更新不使用for循环变量的循环。

已禁用

'typeof' 与非标准值的比较

报告typeof表达式与不是标准类型之一的文字字符串的比较:undefined, object, boolean, number, string,functionsymbol. 这样的比较总是会返回false

警告 警告

具有不兼容类型的表达式的比较

报告与不兼容类型的操作数或与没有可能公共值的类型的操作数的比较。

弱警告 弱警告

与 NaN 的比较

报告与 NaN 的比较。像expr == NaNorexpr === NaN这样的比较总是被评估为false

警告 警告

数组文字中的连续逗号

报告数组文字中的连续逗号。跳过的元素接受该undefined值,但它可能是无意的,例如,当逗号位于一行的末尾和下一行的开头时。

警告 警告

构造函数返回原始值

报告返回原始值的构造函数。当使用 调用时new,该值将丢失并返回一个对象。为避免警告,请使用@return标签指定函数的返回。

已禁用

被零除

报告除以零或余数除以零。

已禁用

相等运算符可能会导致类型强制

报告可能导致意外类型强制的相等运算符的使用。建议将==and替换!=为类型安全的相等运算符===!==.

根据选择的选项,将报告以下情况之一:
  • ==和运算符的所有用法!=

  • 除与 null 比较外的所有用法。某些代码样式允许x == null用作x === null || x === undefined.

  • 只有可疑的表达式,例如:==!=0, '', null, true, false, 或的比较undefined

警告 警告

无限循环语句

报告只能通过抛出异常退出的forwhile或语句。do这样的陈述通常表明编码错误。

警告 警告

无限递归

报告必须无限递归或抛出异常的函数。此类函数可能无法正常返回。

警告 警告

索引属性访问的目标可能不正确

报告可能无效的索引属性访问,例如Array[1].

警告 警告

潜在无效的构造函数用法

报告使用了可能无效的构造函数,例如:在 之后不是构造函数的函数new、使用构造函数的原型或在没有 的情况下调用构造函数new。假定构造函数具有大写名称(可选)或具有显式 JSDoc@constructor标记。

警告 警告

关闭时对“this”的潜在无效引用

报告一个this用于引用外部上下文属性的闭包。

例子:
函数外部() { this.outerProp = 1; function inner() { // 不好,因为 Outer 的 'outerProp' // 不会在此处更新 // 正如预期的那样调用 'new Outer()' this.outerProp = 2; } 内部();}

警告 警告

从闭包中对类的“this”的潜在无效引用

this.报告尝试通过不是 lambda 的嵌套函数中的限定符来引用 ECMAScript 类的成员。

this在不是 lambda 的嵌套函数中是函数自己的this,与外部类无关。

警告 警告

对象分配的结果被忽略

报告对象分配,其中分配对象的结果被忽略,例如,new Error();作为没有任何赋值的语句。这种分配表达式可能表示奇怪的对象初始化策略。

已禁用

可疑的“=+”分配

报告表单中的分配a =+ b。建议更换为a += b.

警告 警告

带有箭头功能的“绑定”的可疑用法

报告bind与箭头功能一起使用。

因为箭头函数使用 lexical this,所以bind调用对它们没有影响。

有关详细信息,请参见此处

警告 警告

可疑变量/参数名称组合

报告目标变量或函数参数的名称与分配给它的值的名称不匹配的赋值或函数调用。

例子:
变量 x = 0; 变量 y = x;
要么
变量 x = 0, y = 0; var rc = new Rectangle(y, x, 20, 20);

指定不应一起使用的名称。如果参数名称或赋值目标名称包含一组单词,而分配或传递的变量名称包含另一组单词,则会报告错误。

警告 警告

使用的无效函数返回值

报告不返回任何内容的函数的返回值。调用此类函数始终会产生一个undefined值,并且此类赋值可能表示错误。

例子:
让 a = console.log('foo');

以下用法被忽略:
  • 在 return 语句中

  • 在一些二元运算中

  • 对于重写的非空函数

警告 警告

控制流问题

检查

描述

默认严重性

'for' 循环可以被 'while' 循环代替

报告一个for既不包含初始化也不包含更新组件的循环。while建议用更简单的语句替换循环。

例子:
for(; exitCondition(); ) { 进程(); }

应用快速修复后,结果如下所示:
while(exitCondition()) { 进程(); }

如果您希望此检查忽略具有琐碎或不存在条件的循环,请使用下面的复选框。

已禁用

具有相同分支的“if”语句

报告if具有相同thenelse分支的语句。这样的陈述几乎可以肯定是一个错误。

已禁用

'if' 语句有太多分支

报告if具有太多分支的语句。这样的陈述可能会令人困惑,并且通常表明设计抽象级别不足。

使用下面的字段指定预期的最大分支数。

已禁用

具有相同分支的条件表达式

报告具有相同thenelse分支的三元条件表达式。

已禁用

常量条件表达式

以格式报告条件表达式true? result1: result2false? result1: result2. Suggests simplifying the expression.

警告 警告

“if”语句中的重复条件

if报告语句不同分支中的重复条件。重复的条件通常代表程序员的疏忽。

例子:
如果 (a) { ... } 否则如果 (a) { ... }

已禁用

不循环的循环语句

报告其主体保证最多执行一次的forwhile或语句。do通常,这表示错误。

警告 警告

对象为“空”或“未定义”

报告由调用方法、访问属性或调用对象上的函数引起的错误undefinednull

警告 警告

无意义的语句或布尔表达式

报告无意义或无意义复杂的布尔表达式或语句。

例子:
让 a = !(false && x); 让 b = 假 || X;

应用快速修复后,结果如下所示:
让 a = true; 让 b = x;

警告 警告

冗余的“if”语句

报告if可以简化为单个赋值或语句的return语句。

例子:
if(foo()) { 返回真;} 否则 { 返回假;}

应用快速修复后,代码如下所示:
返回 foo();

警告 警告

冗余条件表达式

报告表单的条件表达式

健康)状况 ?真:假条件?假:真

这些表达式可以安全地转换为
条件!条件

警告 警告

尾递归

报告尾递归,即当函数调用自身作为返回前的最后一个操作时。尾递归总是可以用循环代替,这会快得多。一些 JavaScript 引擎会执行此优化,而其他引擎则不会。因此,尾递归解决方案在不同环境中可能具有相当不同的性能特征。

已禁用

不必要的“继续”声明

continue在循环结束时报告不必要的语句。建议删除此类声明。

警告 警告

不必要的“退货”声明

报告一个不必要的return语句,即一个return不返回值并且恰好在函数“跌破”底部之前发生的语句。这些语句可以安全地删除。

警告 警告

不必要的标签

报告未使用的标签。

警告 警告

“break”声明上不必要的标签

报告一个带标签的break语句,其标签可以在不改变控制流的情况下被移除。

警告 警告

“继续”声明上不必要的标签

报告一个带标签的continue语句,其标签可以在不改变控制流的情况下被移除。

警告 警告

无法访问的代码

报告永远无法执行的代码,这几乎肯定表示错误

警告 警告

不健全的类型保护检查

报告一个typeofinstanceof不健全的类型保护检查。在以下typeof x两种情况之一中,类型保护可能是不健全的:

  • typeof x从不对应于指定的值(例如,typeof x === 'number'x类型为“字符串|布尔”时)

  • typeof x总是对应于指定的值(例如,typeof x === 'string'x类型为“字符串”时)

在以下x instanceof A两种情况之一中,类型保护可能是不健全的:
  • 的类型x不相关A

  • x是的类型A或子类型A

警告 警告

尝试语句问题

检查

描述

默认严重性

'finally' 块内的 'continue' 或 'break'

报告块内的breakorcontinue语句finally。这样的语句非常混乱,可能隐藏异常,并使调试复杂化。

警告 警告

在'finally'块内'return'

报告块return内的语句finally。此类return语句可能会掩盖抛出的异常,并使调试复杂化。

警告 警告

'throw' 在'finally' 块内

报告块throw内的语句finally。此类throw语句可能会掩盖抛出的异常,并使调试复杂化。

警告 警告

空的“catch”块

报告一个空catch块。这表明错误只是被忽略而不是处理它们。

块中的任何注释都会catch使检查静音。

已禁用

空的“终于”块

报告一个空finally块,这通常表示错误。

已禁用

空的“尝试”块

报告一个空try块,这通常表示错误。

已禁用

用于本地控制流的异常

报告throw其异常总是被包含语句捕获的try语句。使用throw语句goto来更改本地控制流是令人困惑的。

警告 警告

未使用的“catch”参数

报告catch相应块中未使用的参数。catch名为ignoreor的参数将ignored被忽略。

使用下面的复选框禁用对catch带有注释的块的检查。

已禁用

命名约定

检查

描述

默认严重性

类命名约定

报告使用名称太短、太长或不遵循指定正则表达式模式的 JSDoc@constructor或标记注释的类或函数。@class

使用下面提供的字段来指定类名的最小长度、最大长度和正则表达式。java.util.regex使用正则表达式的标准格式。

已禁用

函数命名约定

报告名称太短、太长或不遵循指定正则表达式模式的函数。

使用下面提供的字段来指定函数名称的最小长度、最大长度和正则表达式。java.util.regex使用正则表达式的标准格式。

已禁用

函数参数命名约定

报告名称太短、太长或不遵循指定正则表达式模式的函数参数。

使用下面提供的字段来指定局部变量名称的最小长度、最大长度和正则表达式。使用标准java.util.regex格式的正则表达式。

已禁用

带有非 ASCII 符号的标识符

报告名称中的非 ASCII 符号。

如果选择了“仅允许 ASCII 名称”选项,则报告包含非 ASCII 符号的所有名称。

否则报告所有同时包含 ASCII 和非 ASCII 符号的名称。

警告 警告

局部变量命名约定

报告名称太短、太长或不遵循指定正则表达式模式的局部变量。

使用下面提供的字段来指定局部变量名称的最小长度、最大长度和正则表达式。使用标准java.util.regex格式的正则表达式。

已禁用

流量类型检查器

检查

描述

默认严重性

Flow 未涵盖代码

报告流类型检查器未涵盖的 JavaScript 代码片段。要使用此检查,请在设置 |中配置 Flow 可执行文件。语言和框架 | JavaScript

已禁用

流量类型检查器

报告来自Flow的错误。

已禁用

错误的@flow 标志

报告@flow不在文件顶部的标志注释。

警告 警告

缺少 .flowconfig

@flow报告带有在项目中没有关联文件的标志的 JavaScript 文件.flowconfig

警告 警告

功能指标

检查

描述

默认严重性

具有三个以上否定的函数

报告具有三个或更多否定操作(!!=)的函数。这样的功能可能会造成不必要的混乱。

已禁用

具有多个循环的函数

报告具有多个循环语句的函数。

已禁用

具有多个返回点的函数

报告具有多个返回点的函数。这样的功能很难理解和维护。

已禁用

参数过多的函数

报告具有太多参数的函数。此类功能通常表明设计存在问题。

使用下面的字段来指定函数的最大可接受参数数。

已禁用

过于复杂的功能

报告函数中有太多分支点的函数(圈复杂度太高)。此类功能可能会令人困惑且难以测试。

使用下面提供的字段来指定函数的最大可接受圈复杂度。

已禁用

过长的函数

报告一个过长的函数。函数长度是通过计算函数中非空语句的数量来计算的。太长的函数容易出错并且难以测试。

使用下面的字段指定函数中可接受的最大语句数。

已禁用

过度嵌套的函数

报告一个函数,其主体包含在其他语句中嵌套太深的语句。这样的函数可能会令人困惑,并表明重构可能是必要的。

使用下面提供的字段来指定函数中允许的最大可接受嵌套深度。

已禁用

代码风格问题

检查

描述

默认严重性

'var' 声明不在函数的开头

检查用 var 声明的局部变量的声明是否位于函数作用域的顶部。

默认情况下,变量声明总是在代码执行时不可见地移动(“提升”)到其包含范围的顶部。因此,在范围顶部声明它们有助于在代码中表示这种行为。

已禁用

链式平等

报告链式相等比较(即a==b==c)。这样的比较是令人困惑的。

已禁用

链式函数调用

报告一个函数调用,其目标是另一个函数调用,例如,foo().bar()

已禁用

比较左侧的常数

报告左侧为常数值的比较操作。根据编码约定,常量应位于比较的右侧。

已禁用

比较右侧的常数

报告右侧为常数的比较操作。根据编码约定,常量只应位于比较的左侧。

已禁用

嵌套函数调用

报告在另一个函数调用中用作参数的函数调用,例如,foo(bar())

已禁用

箭头函数体周围的冗余大括号

报告一个箭头函数,其主体仅由大括号和一个语句组成。建议转换为不带括号的简洁语法。

let incrementer = (x) => {return x + 1};

应用快速修复后,代码片段如下所示:

let incrementer = (x) => x + 1;

信息没有高亮,只有修复

不带大括号的语句体

报告主体不是块语句的ifwhilefor或语句。with在语句体中使用代码块对于下游维护通常更安全。

已禁用

未定义的属性分配

报告对未在变量类型中定义的属性的赋值。

例子:
/** * @type {{ property1: string, property2: number }} */ let myVariable = create(); myVariable.newProperty = 3; // 坏的

弱警告 弱警告

不必要的括号

报告多余的括号。

在表达式中:var x = ((1) + 2) + 3

在箭头函数参数列表中:var incrementer = (x) => x + 1

在 TypeScript 和 Flow 类型声明中:type Card = (Suit & Rank) | (Suit & Number)

信息没有高亮,只有修复

未终止的语句

报告末尾没有分号或换行符的语句。

在编辑器 |中选择“用分号终止语句”选项。代码风格 | JavaScript 或 TypeScript -报告任何不以分号结尾的语句的标点符号,即使使用了换行符。根据某些编码风格,为了与其他语言保持一致,分号优于换行符。

已禁用

ES2015 迁移辅助

检查

描述

默认严重性

使用“for..in”代替“for..of”

报告for..in数组上循环的使用情况。建议用for..of循环替换它。

for..ofECMAScript 6 中引入的循环遍历iterable对象。对于数组,这种结构比 更可取for..in,因为它仅适用于数组值,但不适用于数组对象的属性。

信息没有高亮,只有修复

使用“让”代替“常量”

报告let可以进行的声明const

信息没有高亮,只有修复

使用“module.exports”代替“export”

报告一个module.export声明。建议用exportorexport default语句替换它。

请注意,转换module.export成的快速修复export不适用于module.export内部函数或语句,因为export语句只能位于模块的顶层。

信息没有高亮,只有修复

使用 'require()' 代替 'import'

报告一个require()声明。建议将其转换为require()带有import语句的调用。

启用“使用修复所有操作在内部范围内转换 require()”以require()在使用“修复所有”操作时转换嵌套函数和语句内的所有调用。

请注意,将require()内部范围内的语句转换为import语句可能会导致代码语义发生变化。导入语句是静态模块依赖并被提升,这意味着它们被移动到当前模块的顶部。require()动态调用加载模块。它们可以有条件地执行,它们的范围由使用它们的表达式定义。

清除“使用修复所有操作在内部范围内转换 require()”复选框,以防止在使用“修复所有”操作时对这些复杂情况进行任何更改。

信息没有高亮,只有修复

使用 'var' 代替 'let' 或 'const'

报告一个var用来代替letor的声明const

两者letconst都是块范围的并且行为更严格。

建议将所有var声明替换为letorconst声明,具体取决于特定值的语义。声明可以移动到函数的顶部或放置在第一次使用变量之前以避免引用错误。

选择“Conservatively convert var with Fix all action”选项,以防止在使用“Fix all”操作时在这些复杂情况下发生任何变化。

弱警告 弱警告

使用函数表达式代替箭头函数

报告函数表达式。建议将其转换为箭头函数

例子:
arr.map(function(el) {return el + 1})

应用快速修复后,代码如下所示:
arr.map(el => el + 1)

信息没有高亮,只有修复

使用索引“for”代替“for..of”

for报告在数组上使用的索引循环。建议用for..of循环替换它。

for..of循环在 ECMAScript 6 中引入并迭代iterable对象。

信息没有高亮,只有修复

使用字符串连接代替模板文字

报告字符串连接。建议用模板文字替换它

例子
“结果:” + a + “。”

应用快速修复后,代码如下所示:
`结果:${a}。`

信息没有高亮,只有修复

一般的

检查

描述

默认严重性

使用了已弃用的符号

报告不推荐使用的函数变量的使用情况。

弱警告 弱警告

使用相同的键解构属性

报告具有相同键的多个解构属性。建议合并属性。

弱警告 弱警告

重复声明

报告一个范围内的多个声明。

警告 警告

未遵循 ECMAScript 规范

报告基本语法问题和与语言规范的不一致,例如关键字的无效使用、不兼容的数字格式的使用或 getter/setter 的多个参数。

通常,必须始终报告此类错误并且不应禁用此类错误。但在某些情况下,例如由于 JavaScript 的动态特性、使用尚不支持的语言功能或 IDE 检查器中的错误等问题,禁用报告这些非常基本的错误可能会很方便。

错误 错误

隐式声明的全局 JavaScript 变量

报告全局变量的隐式声明。

例子:
var aaa = 1; // 好 bbb = 2; // 不好,如果 bbb 没有在某处用 'var' 声明

弱警告 弱警告

进口可以缩短

报告其from部分可以缩短的 ES6 导入。建议导入父目录。

警告 警告

引用了不可访问的 @private 和 @protected 成员

报告对标有 s@private@protected标签但不符合这些标签所暗示的可见性规则的 JavaScript 成员的引用。

警告 警告

JSDoc标签的错误使用

报告Google Closure Compiler注释所暗示的警告,包括正确使用@abstract@interface@implements标签。

警告 警告

可以优化 JQuery 选择器

报告可以缓存的重复 jQuery 选择器或属性或伪选择器的使用(可选)。

警告 警告

方法可以是静态的

报告可以安全生成的类方法static。如果方法static不引用其类的任何非静态方法和非静态字段并且未在子类中被覆盖,则该方法可以是。

使用下面的第一个复选框仅检查private方法。

警告 警告

JSDoc 和函数签名不匹配

报告 JSDoc 注释中的名称和参数数量与函数的实际参数不匹配。

警告 警告

不匹配的查询和集合的更新

报告其内容已查询但未更新或已更新但未查询的字段或变量的集合。这种不匹配的查询和更新是没有意义的,并且可能表示死代码或印刷错误。

查询方法会根据它们是否返回某些内容或是否传递给它们的回调来自动检测。使用下表指定哪些方法是更新方法。

警告 警告

缺少用于 HTTP 链接的本地存储库

报告与任何本地存储文件无关的外部 JavaScript 库的 URL。建议下载库。这种关联使 IDE 能够提供正确的代码完成和导航。

警告 警告

使用非严格模式

报告不在该strict模式下的 JavaScript 文件。

已禁用

使用的原始类型对象包装器

报告对原始类型的包装器的不当使用或正在修改的原始类型的属性,因为在后一种情况下,分配的值将丢失。

警告 警告

属性可以用简写代替

报告可以转换为 ES6 速记样式的对象属性,并提供快速修复来执行此操作。

var obj = {foo:foo}

应用快速修复后,代码如下所示:

var obj = {foo}

信息没有高亮,只有修复

使用的 React JSX 语法

报告 JavaScript 代码中 React JSX 标签的使用。

已禁用

模板文字中的冗余嵌套

报告字符串或模板文字的嵌套实例。建议将嵌套实例内联到包含的模板字符串中。

例子:`Hello, ${`Brave ${"New"}`} ${"World"}!`

应用快速修复后,代码如下所示:`Hello, Brave New World!`

弱警告 弱警告

从闭包中引用可变变量

报告从函数对外部可变变量的访问。

例子:
for (var i = 1; i <= 3; i++) { setTimeout(function() { console.log(i); // 错误 }, 0); }

警告 警告

签名不匹配

报告参数与引用函数的签名不匹配的 JavaScript 调用表达式,包括参数的类型及其编号。此外,报告重载函数在参数和返回类型方面是否与重载函数不匹配。

TypeScript 代码被忽略。

弱警告 弱警告

JSDoc 中的语法错误和未解决的引用

报告文档注释中的语法差异。

警告 警告

类型不匹配

报告不正确的类型:

  • 函数调用中的参数

  • 返回值

  • 赋值表达式

TypeScript 代码被忽略。

弱警告 弱警告

未过滤的 for..in 循环

报告未过滤for-in的循环。

使用此构造不仅可以处理对象的自身属性,还可以处理其原型的属性。在某些特定情况下可能是意外的,例如,在复制或修改所有属性的实用程序方法中,或者当Object' 的原型可能被错误地修改时。例如,以下代码将打印 42 和 myMethod:

Object.prototype.myMethod = 函数 myMethod() {}; 让 a = { foo: 42 }; for (let i in a) { console.log(a[i]); }

建议用方法替换整个循环Object.keys()或添加hasOwnProperty()检查。应用快速修复后,代码如下所示:
for (let i in a) { if (a.hasOwnProperty(i)) { console.log(a[i]); } }

已禁用

不必要的分号

报告不需要的分号。

警告 警告

数组文字中不需要的最后一个逗号

报告数组文字中尾随逗号的用法。

仅当 JavaScript 语言版本设置为 ECMAScript 5.1 时才会报告警告。

尽管规范允许数组中的尾随逗号,但某些浏览器在使用尾随逗号时可能会抛出错误。

您可以在 Code Style | 中配置尾随逗号的格式选项。JavaScript 或 TypeScript | 标点。

警告 警告

对象文字中不需要的最后一个逗号

报告对象文字中尾随逗号的用法。

仅当 JavaScript 语言版本设置为 ECMAScript 5.1 时才会报告警告。

规范允许对象文字中的尾随逗号,但是,当使用尾随逗号时,某些浏览器可能会抛出错误。

您可以在 Code Style | 中配置尾随逗号的格式选项。JavaScript 或 TypeScript | 标点。

警告 警告

未解决的 Ext JS xtype

xtype报告没有对应类的 Ext JS引用。

警告 警告

未解析的 JavaScript 函数

报告调用中未解析的函数。

TypeScript 代码被忽略。

弱警告 弱警告

未解析的 JavaScript 变量

报告未解析的引用变量或字段。

TypeScript 代码被忽略。

弱警告 弱警告

未解决的文件引用

报告 JavaScript 文件中未解析的文件引用,包括 CommonJS 和 AMD 模块引用。

警告 警告

在静态初始化程序中使用可能未分配的属性

报告一个类成员初始化程序,该初始化程序引用另一个未提升的类成员,而后者可能尚未初始化。

类成员的初始化因此发生在字段中,因此字段不能引用稍后声明的另一个字段。

警告 警告

变量声明可以与对变量的第一次赋值合并

报告一个在没有初始化器的情况下声明的变量,并且在代码或单个嵌套范围中使用得更远。建议将变量移近它的用法并将其与初始化表达式连接起来。

信息没有高亮,只有修复

Webpack 配置符合 JSON Schema

根据webpack 选项模式验证 webpack 配置文件中的选项(名称应以 `webpack` 开头,例如 `webpack.config.js`)。

禁用此检查以关闭配置对象内的验证和代码完成。

警告 警告

Switch 语句问题

检查

描述

默认严重性

“默认”不是“开关”中的最后一种情况

报告一个案例在另一个案例之前而不是最后一个案例的switch陈述,这可能会引起混淆。default

已禁用

“switch”语句缺少分支

报告switch有关该类型变量的语句,enum或者union当该语句未涵盖该类型的某些值选项时。

信息没有高亮,只有修复

“switch”语句没有“default”分支

当未枚举某些可能的值时,报告switch没有子句的语句。default

信息没有高亮,只有修复

'switch' 语句是多余的,可以替换

报告switch具有空主体、仅具有一个case分支或仅具有一个default分支的语句。

信息没有高亮,只有修复

重复的“案例”标签

报告语句上的重复case标签switch,这通常表示错误。

警告 警告

'switch' 语句中的失败

报告一个switch语句,其中控制可以从一个分支继续到下一个分支。这种“失败”通常表示错误,例如,缺少breakreturn

警告 警告

嵌套的'switch'语句

报告switch嵌套在另一个语句中的switch语句。嵌套switch语句可能非常令人困惑,尤其是在缩进不一致的情况下。

已禁用

“switch”语句中的文本标签

报告语句中的标记语句switch,这通常是由拼写错误引起的。

例子:
switch(x) { case 1: case2: //错字!案例3:中断;}

已禁用

“switch”语句的无法访问的“case”分支

报告无法访问的语句case分支。switch

例子:
/** * @param {('foo' | 'bar')} p */ function foo(p) { switch (p) { case 'foo': break; 案例“酒吧”:休息;案例'baz':休息;// 无法访问 } }

警告 警告

变量被声明并在不同的“case”子句中使用

case报告在语句的一个子句中switch声明但case在同一语句的另一个子句中使用的变量。对于块范围的变量,这会导致抛出ReferenceError. 对于var变量,它表示潜在的错误。

var如果有意使用此模式,请禁用对变量的检查。

警告 警告

位运算问题

检查

描述

默认严重性

按位表达式可以简化

报告一个包含and零、or零或移位的表达式。此类表达式可能是由于未完全完成的自动重构造成的。

已禁用

位运算符用法

&报告按位 AND (" ") 或 OR (" |") 运算符的可疑用法。通常这是一个错字,应用布尔运算 AND (" &&") 和 OR (" ||") 的结果是预期的。

警告 警告

不兼容的按位掩码操作

报告一个按位掩码表达式,其计算结果肯定为trueor false。表达式的形式是(var & constant1) == constant2or (var | constant1) == constant2, whereconstant1constant2是不兼容的位掩码常量。

例子:
// 不兼容的掩码:由于掩码中的最后一个字节为零, // 类似 0x1200 的值是可能的,但不是 0x1234 if ((mask & 0xFF00) == 0x1234) {...}

警告 警告

移位操作可能是错误的常数

报告第二个操作数是合理范围之外的常数的移位运算,例如,超出范围的整数移位运算0..31,移位负值或过大的值。

警告 警告

未使用的符号

检查

描述

默认严重性

未使用的分配

报告其值在赋值后从未使用过的变量。

建议删除未使用的变量以缩短代码并避免冗余分配。

报告了以下情况:
  • 赋值后永远不会读取变量。

  • 在下次读取变量之前,变量的值总是被另一个赋值覆盖。

  • 变量的初始化器是多余的(出于上述原因之一)。

警告 警告

未使用的全局符号

报告未使用的全局可访问的公共函数、变量、类或属性。

警告 警告

未使用的本地符号

报告未使用的本地可访问参数、局部变量、函数、类或私有成员声明。

警告 警告

可能不受欢迎的代码结构

检查

描述

默认严重性

“打破”声明

报告一个break语句。忽略break结束 case 块的语句。

已禁用

带有标签的'break'语句

报告带标签的break语句。

已禁用

“继续”声明

报告一个continue声明。

已禁用

带有标签的“继续”语句

报告带标签的continue语句。

已禁用

“调试器”语句

报告debugger用于与 Javascript 调试器交互的语句。此类语句不应出现在生产代码中。

已禁用

“无效”表达

报告一个void表达式。

已禁用

'with' 语句

报告一个with语句。这样的语句会导致潜在的混淆隐式绑定,并且在设置新变量时可能会表现得很奇怪。

警告 警告

匿名函数

报告一个匿名函数。函数表达式的显式名称可能有助于调试。如果没有名称的函数表达式具有nameECMAScript 6 标准中指定的属性,则忽略它们。例如,var bar = function() {};不报告。

已禁用

逗号表达式

报告逗号表达式。这样的表达式通常是代码过于聪明的标志,并可能导致细微的错误。初始化程序或循环更新部分中的逗号表达式将for被忽略。

警告 警告

条件表达式

报告三元条件表达式。一些编码标准禁止这样的表达以支持明确的if陈述。

已禁用

标签声明

报告带标签的语句。

已禁用

最后修改:2022 年 2 月 11 日