Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: sync v8.31.0 #94

Merged
merged 7 commits into from Feb 25, 2023
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/rules/no-undefined.md
Expand Up @@ -56,6 +56,8 @@ if (foo === undefined) {
function foo(undefined) {
// ...
}

bar(undefined, "lorem");
```

:::
Expand All @@ -76,6 +78,8 @@ if (typeof foo === "undefined") {
}

global.undefined = "foo";

bar(void 0, "lorem");
```

:::
Expand Down
53 changes: 48 additions & 5 deletions src/rules/no-underscore-dangle.md
Expand Up @@ -53,13 +53,15 @@ const foo = (_bar) => {};

此规则选项为对象:

* `"allow"` 允许指定的标识符有悬空的下划线
* `"allowAfterThis": false`(默认值)不允许在 `this` 对象的成员中使用悬空的下划线
* `"allowAfterSuper": false`(默认值)不允许在 `super` 对象的成员中使用悬空的下划线
* `"allow"` 允许指定的标识符有悬空的下划线
* `"allowAfterThis": false`(默认值)不允许在 `this` 对象的成员中使用悬空的下划线
* `"allowAfterSuper": false`(默认值)不允许在 `super` 对象的成员中使用悬空的下划线
* `"allowAfterThisConstructor": false`(默认值)不允许在 `this.constructor` 对象的成员中使用悬空的下划线。
kecrily marked this conversation as resolved.
Show resolved Hide resolved
* `"enforceInMethodNames": false`(默认值)允许在方法名称中使用悬空的下划线
* `"enforceInMethodNames": false`(默认值)允许在方法名称中使用悬空的下划线
* `"enforceInClassFields": false`(默认值)允许在 es2022 类字段名中使用悬空的下划线。
kecrily marked this conversation as resolved.
Show resolved Hide resolved
* `"allowFunctionParams": true`(默认值)允许在函数参数名称中使用悬空的下划线。
* `"allowInArrayDestructuring": true`(默认值)允许在由数组解构分配的变量名称中使用悬空的下划线
* `"allowInObjectDestructuring": true`(默认值)允许在对象解构分配的变量名称中使用悬空的下划线
* `"allowFunctionParams": true`(默认值)允许在函数参数名称中使用悬空的下划线

### allow

Expand Down Expand Up @@ -181,6 +183,47 @@ class Foo {

:::

### allowInArrayDestructuring

使用此规则与 `{ "allowInArrayDestructuring": false }` 选项的**错误**示例:

::: incorrect

```js
/*eslint no-underscore-dangle: ["error", { "allowInArrayDestructuring": false }]*/
const [_foo, _bar] = list;
const [foo_, ..._bar] = list;
const [foo, [bar, _baz]] = list;
```

:::

### allowInObjectDestructuring

使用此规则与 `{ "allowInObjectDestructuring": false }` 选项的**错误**示例:

::: incorrect

```js
/*eslint no-underscore-dangle: ["error", { "allowInObjectDestructuring": false }]*/
const { foo, bar: _bar } = collection;
const { foo, bar, _baz } = collection;
```

:::

使用此规则与 `{ "allowInObjectDestructuring": false }` 选项的**正确**示例:

::: correct

```js
/*eslint no-underscore-dangle: ["error", { "allowInObjectDestructuring": false }]*/
const { foo, bar, _baz: { a, b } } = collection;
const { foo, bar, _baz: baz } = collection;
```

:::

### allowFunctionParams

使用此规则与 `{ "allowFunctionParams": false }` 选项的**错误**示例:
Expand Down
18 changes: 9 additions & 9 deletions src/user-guide/configuring/configuration-files-new.md
Expand Up @@ -35,21 +35,21 @@ export default [

每个配置对象都包括了 ESLint 检查一组文件所需的所有信息。配置对象由以下属性组成:

* `files` - 用于表示配置适用的文件范围的 glob 模式数组。在没有指定的情况下,配置对象适用于所有文件
* `ignores` - 一个表示配置对象不应适用的文件的 glob 模式数组。如果没有指定,配置对象将适用于所有由 `files` 匹配的文件。
* `languageOptions` - 一个对象,包含与如何为 linting 配置 JavaScript 有关的设置
* `files` - 表示配置适用的文件范围的 glob 模式数组。在没有指定的情况下,配置对象适用于所有与其他配置对象匹配的文件
* `ignores` - 表示配置对象不应适用的文件的 glob 模式数组。如果没有指定,配置对象将适用于所有由 `files` 匹配的文件。
* `languageOptions` - 包含如何配置检查过程中 JavaScript 设置的对
* `ecmaVersion` - 支持 ECMAScript 的版本。可以是任何年份(`2022`)或版本(`5`)。设置为 `"latest"` 则使用受支持的最新版本(默认为 `"latest"`)。
* `sourceType` - JavaScript 源码类型。传统脚本文件可以使用 `"script"`,ECMAScript 模块(ESM)可以用 `"module"` ,CommonJS 文件使用 `"commonjs`(默认情况下,用于 `.js` 和 `.mjs` 文件使用 `"module"`;`.cjs` 文件使用 `"commonjs"`)
* `globals` - 用于指定额外对象的对象,这些对象应该在 linting 期间被添加到全局范围
* `parser` - 包含 `parse()`方法的对象,或者表示插件内解析器名称的字符串(如 `"pluginName/parserName"`,默认为 `"@/espree"`)
* `sourceType` - JavaScript 源码类型。传统脚本文件可以使用 `"script"`,ECMAScript 模块(ESM)可以用 `"module"` ,CommonJS 文件使用 `"commonjs`(默认情况下,`.js` 和 `.mjs` 文件使用 `"module"`;`.cjs` 文件使用 `"commonjs"`)
* `globals` - 指定额外对象的对象,这些对象应该在检查期间会被添加到全局范围
* `parser` - 包含 `parse()` 方法的对象,或者表示插件内解析器名称的字符串(如 `"pluginName/parserName"`,默认为 `"@/espree"`)
* `parserOptions` - 指定额外选项的对象,直接传递给解析器的 `parser()` 方法。可用选项基于解析器。
* `linterOptions` - 对象,包含与提示过程有关的设置。
* `noInlineConfig` - 布尔值,表示是否允许内联配置
* `reportUnusedDisableDirectives` - 一个布尔值,表示是否应该跟踪和报告未用的禁用指令
* `noInlineConfig` - 表示是否允许内联配置布尔值
* `reportUnusedDisableDirectives` - 表示是否应该跟踪和报告未用的禁用指令的布尔值
* `processor` - 包含 `preprocess()` 和 `postprocess()` 方法的对象,或者表示插件内处理器名称的字符串(如 `"pluginName/processorName"`)。
* `plugins` - 包含插件名称与对应的插件对象的名值对对象。如果指定了 `files`,则只适用于与之匹配匹配的文件。
* `rules` - 包含规则配置的对象。如果指定了 `files` 或 `ignores`,则规则配置只适用于与之匹配匹配的文用。
* `settings` - 包括名值对的对象,这些信息应该对所有规则可用
* `settings` - 包含对所有规则可供的名值对的对象

### 指定 `files` 和 `ignores`

Expand Down
16 changes: 7 additions & 9 deletions src/user-guide/core-concepts.md
Expand Up @@ -47,38 +47,36 @@ ESLint 插件是一个包含 ESLint 规则、配置、解析器和环境变量

## 解析器

ESLint 解析器 converts code into an abstract syntax tree that ESLint can evaluate. By default, ESLint uses the built-in [Espree](https://github.com/eslint/espree) parser, which is compatible with standard JavaScript runtimes and versions.

ESLint 解析器将代码转换为 ESLint 可以评估的抽象语法树(AST, abstract syntax tree)。默认情况下,ESLint 使用内置的与标准 JavaScript运行时和版本兼容的 [Espree](https://github.com/eslint/espree) 解析器。

自定义解析器让 ESLint 可以解析非标准的 JavaScript 语法。通常自定义解析器会被包含在可共享配置或插件中,这一你就不需要直接使用它们了。

比如用于让 ESLint 可以解析 TypeScript 代码的 [@typescript-eslint/parser](https://www.npmjs.com/package/@typescript-eslint/parser) 解析器就被包含在 [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint) 项目中。
比如用于让 ESLint 可以解析 TypeScript 代码的 [@typescript-eslint/parser](https://www.npmjs.com/package/@typescript-eslint/parser) 解析器就被包含在 [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint) 项目中。

## 自定义处理器

ESLint 处理器可以从其他类型的文件中提取 JavaScript 代码,然后让 ESLint 对 JavaScript 代码进行检查。另外,你也可以在用 ESLint 解析 JavaScript 代码之前使用一个处理器对其进行处理
ESLint 处理器可以从其他类型的文件中提取 JavaScript 代码,然后让 ESLint 对 JavaScript 代码进行检查。另外,你也可以在用 ESLint 解析 JavaScript 代码之前使用处理器先对其进行处理

例如 [eslint-plugin-markdown](https://github.com/eslint/eslint-plugin-markdown) 就包括一个自定义处理器,让你可以对 Markdown 代码块内的 JavaScript 代码进行检查。

## 格式化工具

ESLint 格式化工具决定了命令行检查结果的样子
ESLint 格式化工具决定了命令行输出的检查结果的样子

更多信息请参见[格式化工具](./formatters/)。

## 集成

ESLint 相关集成生态是使 ESLint 成为如此有用的工具的原因之一。例如,许多代码编辑器都有 ESLint 扩展,这让工作时,可以即刻在文件中查看相关的代码 ESLint 结果,这样你就不需要使用 ESLint CLI 来查看检查结果
ESLint 相关集成生态是使 ESLint 成为如此有用的工具的原因之一。例如,许多代码编辑器都有 ESLint 扩展,这让工作时,可以即刻在文件中查看相关的代码 ESLint 结果,这样你就不需要使用 ESLint 命令行来查看检查结果

更多信息请参见[集成](./integrations)。

## CLI & Node.js API
## 命令行 & Node.js API

ESLint CLI 是一个命令行界面,让你可以在终端进行检查。CLI 有各种可以传递给命令的选项
ESLint 命令行是一个命令行界面,让你可以在终端进行检查。命令行有各种可以传递给命令的选项

ESLint 的 Node.js API 让你可以在 Node.js 代码中以编程的方式使用 ESLint。该 API 在开发插件、集成和其他与 ESLint 相关的工具时非常有用。

除非你以某种方式扩展 ESLint,否则你就应该使用 CLI
除非你要以某种方式扩展 ESLint,否则你就应该使用命令行

更多信息请参见[命令行界面](./command-line-interface)和 [Node.js API](../developer-guide/nodejs-api)。
72 changes: 59 additions & 13 deletions src/user-guide/getting-started.md
Expand Up @@ -8,15 +8,15 @@ eleventyNavigation:

---

ESLint 是一个根据方案识别并报告 ECMAScript/JavaScript 代码问题的工具,其目的是使代码风格更加一致并避免错误。在很多地方它都与 JSLint 和 JSHint 类似,除了:
ESLint 是一个根据方案识别并报告 ECMAScript/JavaScript 代码问题的工具,其目的是使代码风格更加一致并避免错误。

* ESLint 使用 [Espree](https://github.com/eslint/espree) 对 JavaScript 进行解析。
* ESLint 在代码中使用 AST 评估方案。
* ESLint 完全是插件式的,每个规则都是一个插件,你可以在运行时中添加更多插件。
ESLint 是完全插件化的。每一条规则都是一个插件,你可以在运行时添加更多的插件。你也可以添加社区插件、配置和解析器来扩展 ESLint 的功能。

## 安装并使用
## 使用前提

前提条件:内置 SSL 支持的 [Node.js](https://nodejs.org/en/) 版本(`^12.22.0`、`^14.17.0` 或 `>=16.0.0`),如果你使用的是官方 Node.js 发行版,那么已经内置了 SSL 支持。
要使用 ESLint,你必须使用内置 SSL 支持的 [Node.js](https://nodejs.org/en/) 版本(`^12.22.0`、`^14.17.0` 或 `>=16.0.0`),如果你使用的是官方 Node.js 发行版,那么已经内置了 SSL 支持。

## 快速开始

你可以使用该命令安装并配置 ESLint:

Expand All @@ -28,15 +28,15 @@ npm init @eslint/config

```shell
# 使用 `eslint-config-semistandard` 可共享配置
# npm 6.x
npm init @eslint/config --config semistandard
# ⚠️ npm 7+ 需要使用额外的双杠:
# npm 7+
npm init @eslint/config -- --config semistandard
# 或(可以省略 `eslint-config` 前缀)
npm init @eslint/config -- --config eslint-config-semistandard
# ⚠️ npm 6.x 无需使用额外的双杠:
npm init @eslint/config --config semistandard
```

`--config` 标志也支持传递数组
`--config` 标志也支持传递数组

```shell
npm init @eslint/config -- --config semistandard,standard
Expand All @@ -56,8 +56,6 @@ npx eslint yourfile.js
yarn run eslint yourfile.js
```

也可以全局安装 ESLint 而不仅限于本地(使用 `npm install eslint --global`)。但并不推荐这样做,因为无论使用哪种安装方式,你都需要在本地安装插件和可共享配置。

## 配置

**注意**:如果你正在使用 1.0.0 以前的版本,请阅读[迁移指南](migrating-to-1.0.0)。
Expand Down Expand Up @@ -89,7 +87,55 @@ yarn run eslint yourfile.js
}
```

这一行将启用[所有标记为“推荐”的规则](../rules/)。另外,你也可以通过在 [npmjs.com](https://www.npmjs.com/search?q=eslint-config) 上搜索“eslint-config”并使用别人创建的配置。在没有扩展别人的可共享配置或在配置中明确启用规则时,ESLint 不会限制你的代码。
这一行将启用[所有标记为“推荐”的规则](../rules)。另外,你也可以通过在 [npmjs.com](https://www.npmjs.com/search?q=eslint-config) 上搜索“eslint-config”并使用别人创建的配置。在没有使用别人的可共享配置或在配置中明确启用规则时,ESLint 不会检查你的代码。

## 全局安装

也可以全局安装 ESLint 而不仅限于羡慕本地(使用 `npm install eslint --global`)。但并不推荐这样做,因为即使全局安装 ESLint,你仍需要在本地安装插件和可共享配置。

## 手动设置

你也可以在项目中手动设置 ESLint.

在开始前你必须确保存在 `package.json` 文件。如果不存在,请优先运行 `npm init` 或 `yarn init` 来创建此文件。

1. 在项目中安装 ESLint 包:

```shell
npm install --save-dev eslint
```

1. 添加任一[支持的配置文件格式](./configuring/configuration-files#配置文件格式)的 `.eslintrc` 文件。

```shell
# 创建 JavaScript 配置文件
touch .eslintrc.js
```

1. 在 `.eslintrc` 文件中添加配置。阅读[配置 ESLint 文档](configuring/)学习如何添加规则、环境、自定义配置、插件以及其他内容。

```js
// .eslintrc.js 示例
module.exports = {
"env": {
"browser": true,
"es2021": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
}
```

1. 使用 ESLint 命令行检查代码:

```shell
npx eslint project-dir/ file1.js
```

更多关于可用命令行选项的信息,参见[命令行文档](./command-line-interface)。

---

Expand Down