@fast-china/eslint-config 2.0.9 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/CONTRIBUTING.md +8 -7
- package/README.md +108 -236
- package/README.zh.md +105 -231
- package/SECURITY.md +4 -4
- package/dist/configs/angular.d.mts +6 -6
- package/dist/configs/angular.mjs +1 -1
- package/dist/configs/angular.mjs.map +1 -1
- package/dist/configs/common.d.mts +2 -1
- package/dist/configs/common.mjs.map +1 -1
- package/dist/configs/environment.d.mts +21 -11
- package/dist/configs/environment.mjs +25 -5
- package/dist/configs/environment.mjs.map +1 -1
- package/dist/configs/ignores.d.mts +3 -2
- package/dist/configs/ignores.mjs +4 -3
- package/dist/configs/ignores.mjs.map +1 -1
- package/dist/configs/import.d.mts +2 -1
- package/dist/configs/import.mjs.map +1 -1
- package/dist/configs/index.d.mts +5 -4
- package/dist/configs/index.mjs +3 -2
- package/dist/configs/javascript.d.mts +2 -1
- package/dist/configs/javascript.mjs.map +1 -1
- package/dist/configs/json.d.mts +5 -3
- package/dist/configs/json.mjs +5 -4
- package/dist/configs/json.mjs.map +1 -1
- package/dist/configs/lodash.d.mts +2 -1
- package/dist/configs/lodash.mjs.map +1 -1
- package/dist/configs/markdown.d.mts +2 -1
- package/dist/configs/markdown.mjs.map +1 -1
- package/dist/configs/prettier.d.mts +2 -1
- package/dist/configs/prettier.mjs +4 -1
- package/dist/configs/prettier.mjs.map +1 -1
- package/dist/configs/react.d.mts +7 -44
- package/dist/configs/react.mjs +7 -8
- package/dist/configs/react.mjs.map +1 -1
- package/dist/configs/regexp.d.mts +4 -4
- package/dist/configs/regexp.mjs +5 -4
- package/dist/configs/regexp.mjs.map +1 -1
- package/dist/configs/sort-package.d.mts +4 -3
- package/dist/configs/sort-package.mjs +2 -2
- package/dist/configs/sort-package.mjs.map +1 -1
- package/dist/configs/sort-tsconfig.d.mts +4 -2
- package/dist/configs/sort-tsconfig.mjs +2 -1
- package/dist/configs/sort-tsconfig.mjs.map +1 -1
- package/dist/configs/typescript.d.mts +9 -56
- package/dist/configs/typescript.mjs +20 -29
- package/dist/configs/typescript.mjs.map +1 -1
- package/dist/configs/uniapp.d.mts +17 -0
- package/dist/configs/uniapp.mjs +30 -0
- package/dist/configs/uniapp.mjs.map +1 -0
- package/dist/configs/vue.d.mts +5 -38
- package/dist/configs/vue.mjs +25 -35
- package/dist/configs/vue.mjs.map +1 -1
- package/dist/constants/index.d.mts +33 -1
- package/dist/constants/index.mjs +33 -1
- package/dist/constants/index.mjs.map +1 -1
- package/dist/index.d.mts +41 -208
- package/dist/index.mjs +58 -100
- package/dist/index.mjs.map +1 -1
- package/dist/rules/angular.d.mts +1 -1
- package/dist/rules/angular.mjs +1 -1
- package/dist/rules/angular.mjs.map +1 -1
- package/dist/rules/common.d.mts +2 -2
- package/dist/rules/common.mjs +2 -2
- package/dist/rules/common.mjs.map +1 -1
- package/dist/rules/import.mjs.map +1 -1
- package/dist/rules/index.d.mts +2 -1
- package/dist/rules/index.mjs +2 -1
- package/dist/rules/javascript.d.mts +10 -6
- package/dist/rules/javascript.mjs +12 -6
- package/dist/rules/javascript.mjs.map +1 -1
- package/dist/rules/react.d.mts +2 -3
- package/dist/rules/react.mjs +2 -3
- package/dist/rules/react.mjs.map +1 -1
- package/dist/rules/regexp.d.mts +38 -0
- package/dist/rules/regexp.mjs +39 -0
- package/dist/rules/regexp.mjs.map +1 -0
- package/dist/rules/sort-package.d.mts +1 -1
- package/dist/rules/sort-package.mjs +1 -1
- package/dist/rules/sort-package.mjs.map +1 -1
- package/dist/rules/sort-tsconfig.d.mts +1 -1
- package/dist/rules/sort-tsconfig.mjs +1 -1
- package/dist/rules/sort-tsconfig.mjs.map +1 -1
- package/dist/rules/typescript.d.mts +11 -3
- package/dist/rules/typescript.mjs +10 -4
- package/dist/rules/typescript.mjs.map +1 -1
- package/dist/rules/vue.d.mts +8 -2
- package/dist/rules/vue.mjs +8 -2
- package/dist/rules/vue.mjs.map +1 -1
- package/docs/engineering-audit.zh.md +53 -77
- package/docs/rules-risk.md +104 -101
- package/docs/rules-risk.zh.md +104 -105
- package/package.json +3 -2
package/docs/rules-risk.zh.md
CHANGED
|
@@ -1,109 +1,108 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- `
|
|
12
|
-
- `
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
-
|
|
62
|
-
-
|
|
63
|
-
-
|
|
64
|
-
-
|
|
65
|
-
- `
|
|
66
|
-
- `
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
);
|
|
1
|
+
# 默认规则与风险指南
|
|
2
|
+
|
|
3
|
+
本文说明 2.1.0 当前配置模型、主要规则和迁移风险。规则源码注释只解释现行意图;历史差异统一记录在 `CHANGELOG.md`。
|
|
4
|
+
|
|
5
|
+
## 配置模型
|
|
6
|
+
|
|
7
|
+
SDK、OA、Admin、Vue Web 与 UniApp 客户端共享同一套 JavaScript、TypeScript、Import 和 RegExp 规则,不提供严格度档位。
|
|
8
|
+
|
|
9
|
+
根入口固定面向 Vue 3 + TypeScript + UniApp:
|
|
10
|
+
|
|
11
|
+
- `environment: "browser"`
|
|
12
|
+
- `.gitignore`
|
|
13
|
+
- JavaScript、类型感知 TypeScript
|
|
14
|
+
- Vue 3、`.nvue`、UniApp globals 与清单适配
|
|
15
|
+
- Import、RegExp、JSON/JSONC/JSON5
|
|
16
|
+
- `package.json` 和 `tsconfig*.json` 排序
|
|
17
|
+
- Prettier 冲突关闭层
|
|
18
|
+
- Node.js 工程文件 globals 与末尾规则覆写
|
|
19
|
+
|
|
20
|
+
`fastConfig()` 只保留 `environment`。React、Angular、Markdown 和 Lodash 通过 `./configs` 子路径组合;规则、globals、ignores 和解析器特殊设置使用后置 Flat Config。
|
|
21
|
+
|
|
22
|
+
## 预置来源
|
|
23
|
+
|
|
24
|
+
| 领域 | 预置或实现 |
|
|
25
|
+
| ---------- | ----------------------------------------------------------------------- |
|
|
26
|
+
| JavaScript | `@eslint/js` recommended + 本地规则 |
|
|
27
|
+
| TypeScript | typescript-eslint `recommendedTypeChecked` + Project Service |
|
|
28
|
+
| Vue | `eslint-plugin-vue` `flat/recommended` + 类型感知 TypeScript |
|
|
29
|
+
| React | `@eslint-react` recommended/type-checked + React Hooks Flat Recommended |
|
|
30
|
+
| Angular | Angular ESLint TypeScript、模板及无障碍 recommended |
|
|
31
|
+
| JSON | `eslint-plugin-jsonc` 三种方言 recommended |
|
|
32
|
+
| Import | `eslint-plugin-import-x` recommended + 固定顺序策略 |
|
|
33
|
+
| RegExp | 显式正确性、安全和超线性回溯规则 |
|
|
34
|
+
| Prettier | `eslint-config-prettier` 冲突关闭层 |
|
|
35
|
+
|
|
36
|
+
## 主要规则
|
|
37
|
+
|
|
38
|
+
### JavaScript
|
|
39
|
+
|
|
40
|
+
- `camelcase: ["error", { properties: "never" }]`
|
|
41
|
+
- `no-debugger: "error"`
|
|
42
|
+
- `no-use-before-define` 为 `warn`;类和变量必须先声明,函数声明允许提升。
|
|
43
|
+
- `prefer-arrow-callback`、`logical-assignment-operators`、`prefer-object-spread` 为 `error`。
|
|
44
|
+
- `prefer-exponentiation-operator`、`prefer-object-has-own` 为 `error`。
|
|
45
|
+
- `sort-imports` 为 `warn`,只排序同一 import 的成员。
|
|
46
|
+
- `import-x/order` 为 `error`,并设置 `warnOnUnassignedImports: true`。
|
|
47
|
+
|
|
48
|
+
### TypeScript
|
|
49
|
+
|
|
50
|
+
- 始终启用 `recommendedTypeChecked` 与 `projectService: true`。
|
|
51
|
+
- `explicit-module-boundary-types` 为 `error`,模块导出边界必须显式声明类型,不允许用显式 `any` 参数规避。
|
|
52
|
+
- `explicit-function-return-type` 不额外启用,内部函数和回调可以依赖推断。
|
|
53
|
+
- `no-explicit-any` 为 `warn`。
|
|
54
|
+
- `no-unused-vars` 为 `error`;`_` 前缀表示有意忽略,rest siblings 不误报。
|
|
55
|
+
- `no-empty-function` 仅允许空构造函数和空覆写方法。
|
|
56
|
+
- `consistent-type-imports` 使用行内 `type` 修复形式。
|
|
57
|
+
- `no-non-null-assertion` 为 `error`。
|
|
58
|
+
|
|
59
|
+
### Vue
|
|
60
|
+
|
|
61
|
+
- 使用 `flat/recommended`。
|
|
62
|
+
- `attribute-hyphenation: ["error", "always"]`。
|
|
63
|
+
- `no-v-html` 为 `warn`。
|
|
64
|
+
- `no-v-text-v-html-on-component` 为 `error`。
|
|
65
|
+
- `require-explicit-emits`、`attributes-order`、`no-mutating-props` 为 `error`。
|
|
66
|
+
- `.vue` 与 `.nvue` 统一使用 TypeScript parser 和 Project Service。
|
|
67
|
+
|
|
68
|
+
## 类型感知要求
|
|
69
|
+
|
|
70
|
+
TypeScript、Vue 和 React TSX 始终依赖类型信息。被检查文件必须属于可发现的 `tsconfig.json`,否则 Project Service 会报告配置错误。
|
|
71
|
+
|
|
72
|
+
本包不再提供 `typeChecked` 或 `tsconfigRootDir` 包装选项。复杂 monorepo 可以通过后置 Flat Config 直接覆盖 `languageOptions.parserOptions`,但不应通过关闭类型检查绕过项目边界问题。
|
|
73
|
+
|
|
74
|
+
## UniApp 边界
|
|
75
|
+
|
|
76
|
+
根入口默认声明 `uni`、`uniCloud`、页面 API 及条件编译平台对象,并允许 `pages.json`、`manifest.json` 中的注释。
|
|
77
|
+
|
|
78
|
+
ESLint 不执行条件编译,因此 `wx`、`plus` 等对象在根入口处理的全部代码文件中可见。这避免平台分支中的 `no-undef`,但不能验证对象是否位于正确的 `#ifdef` 分支。普通 Vue 项目如不希望获得这些 globals,应直接组合所需配置片段,而不是使用根入口。
|
|
79
|
+
|
|
80
|
+
## 自动修复风险
|
|
81
|
+
|
|
82
|
+
重点审查以下自动修复:
|
|
83
|
+
|
|
84
|
+
- Import 分组、成员顺序和副作用导入位置。
|
|
85
|
+
- TypeScript 行内 `type` 导入。
|
|
86
|
+
- Vue 属性命名与排序。
|
|
87
|
+
- `package.json` 和 `tsconfig*.json` 字段顺序。
|
|
88
|
+
|
|
89
|
+
`package.json` 排序不会进入顺序具有运行时语义的条件 `exports` 对象。
|
|
90
|
+
|
|
91
|
+
建议先运行:
|
|
92
|
+
|
|
93
|
+
```sh
|
|
94
|
+
pnpm exec eslint .
|
|
97
95
|
```
|
|
98
96
|
|
|
99
|
-
|
|
97
|
+
确认问题范围后再运行:
|
|
98
|
+
|
|
99
|
+
```sh
|
|
100
|
+
pnpm exec eslint . --fix
|
|
101
|
+
```
|
|
100
102
|
|
|
101
|
-
##
|
|
103
|
+
## 维护约定
|
|
102
104
|
|
|
103
|
-
1.
|
|
104
|
-
2.
|
|
105
|
-
3.
|
|
106
|
-
4.
|
|
107
|
-
5. ESLint 或任一内置插件版本变化后运行 `pnpm typegen`,审查并提交 `src/typegen.d.ts`;不得手工修改生成声明。
|
|
108
|
-
6. 为解析器、插件、作用域、自动修复、生成类型或公开导出的变化增加集成测试。
|
|
109
|
-
7. 完成后运行 `pnpm check` 和 `pnpm pack --dry-run`,并检查自动修复后的真实 diff。
|
|
105
|
+
1. 修改规则时解释当前行为、风险和例外,不在源码注释中引用历史版本。
|
|
106
|
+
2. 升级 recommended 预置后检查最终生效规则,避免上游变化静默改变严重级别。
|
|
107
|
+
3. 新增框架只增加解析器、文件范围和框架语义,不建立第二套语言规则档位。
|
|
108
|
+
4. 新增公共配置工厂、解析器或自动修复行为时同步增加类型和运行时测试。
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fast-china/eslint-config",
|
|
3
|
-
"version": "2.0
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "2.1.0",
|
|
4
|
+
"description": "Practical, typed ESLint Flat Config for Vue 3, UniApp, React, Angular, Vite, TypeScript, JavaScript, and Node.js.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"fast",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"flat-config",
|
|
13
13
|
"react",
|
|
14
14
|
"typescript",
|
|
15
|
+
"uniapp",
|
|
15
16
|
"vite",
|
|
16
17
|
"vue",
|
|
17
18
|
"vue3"
|