mm_eslint 1.2.6 → 1.2.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mm_eslint",
3
- "version": "1.2.6",
3
+ "version": "1.2.8",
4
4
  "description": "ESLint plugin for naming conventions - PascalCase, camelCase, snake_case, and UPPER_SNAKE_CASE naming rules",
5
5
  "main": "index.js",
6
6
  "keywords": [
@@ -32,11 +32,13 @@
32
32
  "eslint": ">=8.0.0"
33
33
  },
34
34
  "scripts": {
35
- "test": "node tests/test_new_recommen_words.js",
35
+ "test": "node tests/test_basic.js",
36
36
  "lint": "npx eslint . --config eslint.config.js"
37
37
  },
38
38
  "files": [
39
39
  "index.js",
40
+ "detector.js",
41
+ "config.js",
40
42
  "README.md",
41
43
  "README_EN.md",
42
44
  "LICENSE"
package/README.md DELETED
@@ -1,410 +0,0 @@
1
- # MM ESLint Plugin
2
-
3
- 基于个人命名规范的ESLint插件,支持类名、函数名、变量名、常量名等命名规范检测。
4
-
5
- ## 功能特性
6
-
7
- - ✅ **类名检测** - 大驼峰命名法(PascalCase)
8
- - ✅ **函数名检测** - 小驼峰命名法(camelCase)
9
- - ✅ **方法名检测** - 小驼峰命名法(camelCase)
10
- - ✅ **变量名检测** - 小写蛇形命名法(snake_case)
11
- - ✅ **常量名检测** - 大写蛇形命名法(UPPER_SNAKE_CASE)
12
- - ✅ **私有成员检测** - 下划线开头的小写蛇形命名
13
- - ✅ **入参名检测** - 小写蛇形命名法(snake_case)
14
- - ✅ **属性名检测** - 基于值类型的多风格命名
15
- - ✅ **长度限制** - 所有命名长度限制在1-20字符
16
- - ✅ **单个单词优先** - 鼓励使用单个单词命名
17
- - ✅ **单词长度限制** - 每个单词限制在最大8字符
18
- - ✅ **禁止废话词** - 避免使用Manager、Handler等冗余词汇
19
- - ✅ **JSDoc支持** - 集成JSDoc文档要求
20
- - ✅ **命名推荐功能** - 推荐更短的替代名称,同时保持语义不变
21
-
22
- ## 安装
23
-
24
- ### npm安装
25
-
26
- ```bash
27
- npm install mm_eslint --save-dev
28
- ```
29
-
30
- ### 本地安装
31
-
32
- 如果您想使用本地版本,可以将插件文件复制到项目中:
33
-
34
- ```bash
35
- # 复制插件文件到您的项目
36
- cp mm_eslint/index.js your-project/eslint-plugins/
37
- ```
38
-
39
- ## 快速开始
40
-
41
- ### 1. 完整配置
42
-
43
- 在您的ESLint配置文件中引入插件:
44
-
45
- ```javascript
46
- // eslint.config.js
47
- const namingConventionPlugin = require("mm_eslint");
48
-
49
- module.exports = [
50
- {
51
- files: ["**/*.js"],
52
- plugins: {
53
- "naming-convention": namingConventionPlugin,
54
- jsdoc: require("eslint-plugin-jsdoc"),
55
- },
56
- rules: {
57
- // 自定义命名规范插件规则(优先使用)
58
- "naming-convention/class-name": "error",
59
- "naming-convention/function-name": "error",
60
- "naming-convention/method-name": "error",
61
- "naming-convention/variable-name": "warn",
62
- "naming-convention/constant-name": "error",
63
- "naming-convention/private-naming": "warn",
64
- "naming-convention/param-name": "warn",
65
- "naming-convention/property-name": "warn",
66
-
67
- // 禁用与命名规范插件冲突的默认规则
68
- camelcase: "off",
69
- "id-match": "off",
70
- "new-cap": "off",
71
- "id-length": "off",
72
- "id-denylist": "off",
73
- "id-blacklist": "off",
74
- },
75
- },
76
-
77
- {
78
- // 代码风格规则
79
- rules: {
80
- "max-len": ["error", { code: 100 }],
81
- indent: ["error", 2],
82
- quotes: ["error", "single"],
83
- "no-tabs": "error",
84
- semi: ["error", "always"],
85
- },
86
- },
87
-
88
- {
89
- // 错误处理规则
90
- rules: {
91
- "no-unused-vars": ["error", { args: "all" }],
92
- "no-unsafe-finally": "warn",
93
- "no-throw-literal": "error",
94
- },
95
- },
96
-
97
- {
98
- // 最佳实践规则
99
- rules: {
100
- "prefer-promise-reject-errors": "error",
101
- "no-param-reassign": "error",
102
- "prefer-object-spread": "error",
103
- "prefer-arrow-callback": "error",
104
- "max-lines-per-function": ["warn", { max: 40 }],
105
- complexity: ["warn", 10],
106
- },
107
- },
108
-
109
- {
110
- // JSDoc规则
111
- rules: {
112
- "jsdoc/require-jsdoc": ["warn", { publicOnly: true }],
113
- "jsdoc/check-alignment": "warn",
114
- "jsdoc/check-indentation": "warn",
115
- "jsdoc/check-param-names": "warn",
116
- "jsdoc/check-syntax": "warn",
117
- "jsdoc/check-tag-names": "warn",
118
- "jsdoc/check-types": "warn",
119
- "jsdoc/no-undefined-types": "warn",
120
- "jsdoc/require-description": "warn",
121
- "jsdoc/require-param": "warn",
122
- "jsdoc/require-param-description": "warn",
123
- "jsdoc/require-param-name": "warn",
124
- "jsdoc/require-param-type": "warn",
125
- "jsdoc/require-returns": "warn",
126
- "jsdoc/require-returns-check": "warn",
127
- "jsdoc/require-returns-description": "warn",
128
- "jsdoc/require-returns-type": "warn",
129
- "jsdoc/valid-types": "warn",
130
- },
131
- },
132
- ];
133
- ```
134
-
135
- ### 2. 命令行使用
136
-
137
- ```bash
138
- # 验证单个文件
139
- npx eslint your-file.js
140
-
141
- # 验证所有JS文件
142
- npx eslint "**/*.js"
143
-
144
- # 验证并自动修复
145
- npx eslint --fix your-file.js
146
- ```
147
-
148
- ## 命名规范规则
149
-
150
- ### 类名规则(class-name)
151
-
152
- - **级别**: error
153
- - **要求**: 大驼峰命名法(PascalCase)
154
- - **长度**: 1-20字符
155
- - **单词长度**: 每个单词≤8字符
156
- - **示例**: `User`, `Product`
157
- - **错误示例**: `UserConfiguration`, `ProductManagement`
158
-
159
- ### 函数名规则(function-name)
160
-
161
- - **级别**: error
162
- - **要求**: 小驼峰命名法(camelCase)
163
- - **长度**: 1-20字符
164
- - **单词长度**: 每个单词≤8字符
165
- - **优先**: 单个单词
166
- - **示例**: `get`, `getName`, `process`
167
- - **错误示例**: `getConfiguration`, `processInformation`
168
-
169
- ### 方法名规则(method-name)
170
-
171
- - **级别**: error
172
- - **要求**: 小驼峰命名法(camelCase)
173
- - **长度**: 1-20字符
174
- - **单词长度**: 每个单词≤8字符
175
- - **优先**: 单个单词
176
- - **示例**: `add`, `setName`, `isValid`
177
- - **错误示例**: `addConfiguration`, `validateAuthentication`
178
-
179
- ### 变量名规则(variable-name)
180
-
181
- - **级别**: warn
182
- - **要求**: 小写蛇形命名法(snake_case)
183
- - **长度**: 1-20字符
184
- - **示例**: `user_count`, `max_retry`
185
- - **错误示例**: `userCount`, `MAX_RETRY`
186
-
187
- ### 常量名规则(constant-name)
188
-
189
- - **级别**: error
190
- - **要求**: 大写蛇形命名法(UPPER_SNAKE_CASE)
191
- - **长度**: 1-20字符
192
- - **示例**: `MAX_RETRY`, `DEFAULT_TIMEOUT`
193
- - **错误示例**: `maxRetry`, `defaultTimeout`
194
-
195
- ### 私有成员规则(private-naming)
196
-
197
- - **级别**: warn
198
- - **要求**: 下划线开头的小写蛇形命名
199
- - **长度**: 2-20字符
200
- - **示例**: `_user_count`, `_internal_data`
201
- - **错误示例**: `userCount`, `_UserCount`
202
-
203
- ### 入参名规则(param-name)
204
-
205
- - **级别**: warn
206
- - **要求**: 小写蛇形命名法(snake_case)
207
- - **长度**: 1-20字符
208
- - **示例**: `user_name`, `max_count`
209
- - **错误示例**: `userName`, `maxCount`
210
-
211
- ### 属性名规则(property-name)
212
-
213
- - **级别**: warn
214
- - **要求**: 基于值类型的多风格命名
215
- - **长度**: 1-20字符
216
- - **示例**: `user_name`(字符串), `getUser`(函数), `User`(类)
217
-
218
- ## 错误示例
219
-
220
- ```javascript
221
- // ❌ 错误的命名示例
222
- class UserConfiguration { // "Configuration"超过8字符
223
- const getConfiguration = function() {}; // "Configuration"超过8字符
224
- let maxRetryCount = 5; // 变量名应该小写蛇形
225
- const userCount = 10; // 常量名应该大写蛇形
226
-
227
- // ✅ 正确的命名示例
228
- class User {
229
- constructor() {
230
- this._user_count = 0; // 私有属性正确
231
- }
232
-
233
- /**
234
- * 获取用户数量
235
- * @returns {number} 用户数量
236
- */
237
- get() { // 方法名正确(单个单词≤8字符)
238
- return this._user_count;
239
- }
240
- }
241
-
242
- const MAX_RETRY = 5; // 常量名正确
243
- let user_count = 10; // 变量名正确
244
- ```
245
-
246
- ## 单词长度验证
247
-
248
- 插件验证复合名称中的每个单词不超过8个字符:
249
-
250
- - **有效**: `UserService`("User"=4, "Service"=7)
251
- - **无效**: `UserConfiguration`("Configuration"=13 > 8)
252
- - **有效**: `getUser`("get"=3, "User"=4)
253
- - **无效**: `getConfiguration`("Configuration"=13 > 8)
254
-
255
- ## 配置选项
256
-
257
- 您可以通过配置自定义规则参数:
258
-
259
- ```javascript
260
- // 自定义配置示例
261
- const customConfig = {
262
- "class-name": {
263
- regex: /^[A-Z][a-zA-Z]*$/,
264
- min: 1,
265
- max: 25, // 扩展最大长度
266
- single_word_len: 10, // 扩展单词长度限制
267
- message: "类名{name}必须使用大驼峰命名法",
268
- },
269
- };
270
-
271
- const detector = new NamingDetector(customConfig);
272
-
273
- ## 命名推荐功能
274
-
275
- 插件包含智能命名推荐系统,建议使用更短的替代名称,同时保持语义不变。
276
-
277
- ### 核心原则
278
-
279
- 核心原则是**"缩短命名而不改变语义"**。推荐系统:
280
- - 推荐更短的单词,同时保持相同含义
281
- - 避免会改变功能的概念性变化
282
- - 确保推荐词始终比原词短
283
- - 保留编程特定术语和概念差异
284
-
285
- ### 配置
286
-
287
- 在ESLint配置中启用推荐功能:
288
-
289
- ```javascript
290
- // eslint.config.js
291
- const namingConventionPlugin = require("mm_eslint");
292
-
293
- module.exports = [
294
- {
295
- files: ["**/*.js"],
296
- plugins: {
297
- "naming-convention": namingConventionPlugin,
298
- },
299
- rules: {
300
- "naming-convention/class-name": "error",
301
- "naming-convention/function-name": ["error", { recommen: true }], // 启用推荐功能
302
- // ... 其他规则
303
- },
304
- },
305
- ];
306
- ```
307
-
308
- ### 可用推荐
309
-
310
- 插件为常见编程操作提供推荐:
311
-
312
- | 原词 | 推荐词 | 描述 |
313
- |------|--------|------|
314
- | `calculate` | `calc` | 数学运算 |
315
- | `generate` | `gen` | 数据生成 |
316
- | `initialize` | `init` | 初始化操作 |
317
- | `execute` | `exec` | 命令执行 |
318
- | `process` | `run` | 数据处理 |
319
- | `retrieve` | `load` | 数据加载 |
320
- | `persist` | `save` | 数据存储 |
321
- | `compare` | `cmp` | 比较操作 |
322
- | `duplicate` | `copy` | 数据复制 |
323
- | `transfer` | `move` | 数据移动 |
324
- | `convert` | `to` | 类型转换 |
325
- | `verify` | `check` | 验证检查 |
326
- | `construct` | `create` | 对象创建 |
327
- | `handle` | `run` | 事件处理 |
328
-
329
- ### 示例
330
-
331
- ```javascript
332
- // ❌ 原词(较长名称)
333
- function calculateTotal() {}
334
- function generateUserData() {}
335
- function initializeSystem() {}
336
- function executeCommand() {}
337
- function processData() {}
338
-
339
- // ✅ 推荐词(较短名称)
340
- function calcTotal() {}
341
- function genUserData() {}
342
- function initSystem() {}
343
- function execCommand() {}
344
- function runData() {}
345
- ```
346
-
347
- ### 带推荐的错误消息
348
-
349
- 启用推荐功能后,ESLint将建议替代名称:
350
-
351
- ```bash
352
- # ESLint输出示例
353
- function calculateTotal() {}
354
- # ^ 建议使用'calc'替代'calculate'以获得更短的命名
355
- ```
356
-
357
- ### 优势
358
-
359
- 1. **提高可读性**:更短的名称更容易阅读和理解
360
- 2. **一致的代码库**:项目中的标准化命名
361
- 3. **语义保持**:在减少冗长的同时保持含义
362
- 4. **编程最佳实践**:遵循简洁命名的行业标准
363
-
364
- ## 开发
365
-
366
- ### 项目结构
367
-
368
- ```
369
- mm_eslint/
370
- ├── index.js # 主插件文件
371
- ├── package.json # npm配置
372
- ├── eslint.config.js # ESLint配置
373
- ├── test.js # 单元测试
374
- ├── example.js # 使用示例
375
- └── README.md # 说明文档
376
- ```
377
-
378
- ### 运行测试
379
-
380
- ```bash
381
- # 运行单元测试
382
- npm test
383
-
384
- # 运行ESLint检查
385
- npm run lint
386
- ```
387
-
388
- ## 许可证
389
-
390
- ISC License
391
-
392
- ## 贡献
393
-
394
- 欢迎提交Issue和Pull Request来改进这个插件。
395
-
396
- ## 更新日志
397
-
398
- ### v1.1.0
399
-
400
- - 添加单词长度验证(每个单词最大8字符)
401
- - 添加入参名和属性名检测
402
- - 集成JSDoc文档要求
403
- - 增强配置,包含完整的ESLint规则
404
-
405
- ### v1.0.0
406
-
407
- - 初始版本发布
408
- - 支持类名、函数名、方法名、变量名、常量名、私有成员命名规范检测
409
- - 支持长度限制和单个单词优先规则
410
- - 支持禁止废话词检测