frontend-guardian-core 2.6.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.
Files changed (152) hide show
  1. package/LICENSE +21 -0
  2. package/bin/fg-core.js +1238 -0
  3. package/bin/watch-mode.js +123 -0
  4. package/dist/engine/cache.d.ts +68 -0
  5. package/dist/engine/cache.d.ts.map +1 -0
  6. package/dist/engine/cache.js +164 -0
  7. package/dist/engine/cache.js.map +1 -0
  8. package/dist/engine/rule-engine.d.ts +135 -0
  9. package/dist/engine/rule-engine.d.ts.map +1 -0
  10. package/dist/engine/rule-engine.js +716 -0
  11. package/dist/engine/rule-engine.js.map +1 -0
  12. package/dist/formatters/github-annotation.d.ts +36 -0
  13. package/dist/formatters/github-annotation.d.ts.map +1 -0
  14. package/dist/formatters/github-annotation.js +122 -0
  15. package/dist/formatters/github-annotation.js.map +1 -0
  16. package/dist/formatters/pr-comment.d.ts +43 -0
  17. package/dist/formatters/pr-comment.d.ts.map +1 -0
  18. package/dist/formatters/pr-comment.js +171 -0
  19. package/dist/formatters/pr-comment.js.map +1 -0
  20. package/dist/formatters/sarif.d.ts +104 -0
  21. package/dist/formatters/sarif.d.ts.map +1 -0
  22. package/dist/formatters/sarif.js +130 -0
  23. package/dist/formatters/sarif.js.map +1 -0
  24. package/dist/index.d.ts +46 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +108 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/integrations/base.d.ts +44 -0
  29. package/dist/integrations/base.d.ts.map +1 -0
  30. package/dist/integrations/base.js +104 -0
  31. package/dist/integrations/base.js.map +1 -0
  32. package/dist/integrations/eslint.d.ts +8 -0
  33. package/dist/integrations/eslint.d.ts.map +1 -0
  34. package/dist/integrations/eslint.js +67 -0
  35. package/dist/integrations/eslint.js.map +1 -0
  36. package/dist/integrations/formatter.d.ts +35 -0
  37. package/dist/integrations/formatter.d.ts.map +1 -0
  38. package/dist/integrations/formatter.js +182 -0
  39. package/dist/integrations/formatter.js.map +1 -0
  40. package/dist/integrations/index.d.ts +17 -0
  41. package/dist/integrations/index.d.ts.map +1 -0
  42. package/dist/integrations/index.js +25 -0
  43. package/dist/integrations/index.js.map +1 -0
  44. package/dist/integrations/stylelint.d.ts +8 -0
  45. package/dist/integrations/stylelint.d.ts.map +1 -0
  46. package/dist/integrations/stylelint.js +59 -0
  47. package/dist/integrations/stylelint.js.map +1 -0
  48. package/dist/integrations/typescript.d.ts +8 -0
  49. package/dist/integrations/typescript.d.ts.map +1 -0
  50. package/dist/integrations/typescript.js +92 -0
  51. package/dist/integrations/typescript.js.map +1 -0
  52. package/dist/rules/registry.d.ts +83 -0
  53. package/dist/rules/registry.d.ts.map +1 -0
  54. package/dist/rules/registry.js +205 -0
  55. package/dist/rules/registry.js.map +1 -0
  56. package/dist/scanners/a11y-scanner.d.ts +14 -0
  57. package/dist/scanners/a11y-scanner.d.ts.map +1 -0
  58. package/dist/scanners/a11y-scanner.js +781 -0
  59. package/dist/scanners/a11y-scanner.js.map +1 -0
  60. package/dist/scanners/component-scanner.d.ts +12 -0
  61. package/dist/scanners/component-scanner.d.ts.map +1 -0
  62. package/dist/scanners/component-scanner.js +304 -0
  63. package/dist/scanners/component-scanner.js.map +1 -0
  64. package/dist/scanners/cross-file-scanner.d.ts +18 -0
  65. package/dist/scanners/cross-file-scanner.d.ts.map +1 -0
  66. package/dist/scanners/cross-file-scanner.js +684 -0
  67. package/dist/scanners/cross-file-scanner.js.map +1 -0
  68. package/dist/scanners/hooks-scanner.d.ts +15 -0
  69. package/dist/scanners/hooks-scanner.d.ts.map +1 -0
  70. package/dist/scanners/hooks-scanner.js +670 -0
  71. package/dist/scanners/hooks-scanner.js.map +1 -0
  72. package/dist/scanners/i18n-scanner.d.ts +13 -0
  73. package/dist/scanners/i18n-scanner.d.ts.map +1 -0
  74. package/dist/scanners/i18n-scanner.js +535 -0
  75. package/dist/scanners/i18n-scanner.js.map +1 -0
  76. package/dist/scanners/naming-scanner.d.ts +19 -0
  77. package/dist/scanners/naming-scanner.d.ts.map +1 -0
  78. package/dist/scanners/naming-scanner.js +746 -0
  79. package/dist/scanners/naming-scanner.js.map +1 -0
  80. package/dist/scanners/performance-scanner.d.ts +7 -0
  81. package/dist/scanners/performance-scanner.d.ts.map +1 -0
  82. package/dist/scanners/performance-scanner.js +402 -0
  83. package/dist/scanners/performance-scanner.js.map +1 -0
  84. package/dist/scanners/platform-scanner.d.ts +15 -0
  85. package/dist/scanners/platform-scanner.d.ts.map +1 -0
  86. package/dist/scanners/platform-scanner.js +320 -0
  87. package/dist/scanners/platform-scanner.js.map +1 -0
  88. package/dist/scanners/security-scanner.d.ts +7 -0
  89. package/dist/scanners/security-scanner.d.ts.map +1 -0
  90. package/dist/scanners/security-scanner.js +349 -0
  91. package/dist/scanners/security-scanner.js.map +1 -0
  92. package/dist/scanners/svelte-scanner.d.ts +14 -0
  93. package/dist/scanners/svelte-scanner.d.ts.map +1 -0
  94. package/dist/scanners/svelte-scanner.js +228 -0
  95. package/dist/scanners/svelte-scanner.js.map +1 -0
  96. package/dist/types.d.ts +343 -0
  97. package/dist/types.d.ts.map +1 -0
  98. package/dist/types.js +6 -0
  99. package/dist/types.js.map +1 -0
  100. package/dist/utils/ast-parser.d.ts +21 -0
  101. package/dist/utils/ast-parser.d.ts.map +1 -0
  102. package/dist/utils/ast-parser.js +119 -0
  103. package/dist/utils/ast-parser.js.map +1 -0
  104. package/dist/utils/baseline.d.ts +89 -0
  105. package/dist/utils/baseline.d.ts.map +1 -0
  106. package/dist/utils/baseline.js +156 -0
  107. package/dist/utils/baseline.js.map +1 -0
  108. package/dist/utils/ci-generator.d.ts +34 -0
  109. package/dist/utils/ci-generator.d.ts.map +1 -0
  110. package/dist/utils/ci-generator.js +194 -0
  111. package/dist/utils/ci-generator.js.map +1 -0
  112. package/dist/utils/common.d.ts +8 -0
  113. package/dist/utils/common.d.ts.map +1 -0
  114. package/dist/utils/common.js +38 -0
  115. package/dist/utils/common.js.map +1 -0
  116. package/dist/utils/concurrent.d.ts +16 -0
  117. package/dist/utils/concurrent.d.ts.map +1 -0
  118. package/dist/utils/concurrent.js +49 -0
  119. package/dist/utils/concurrent.js.map +1 -0
  120. package/dist/utils/config-loader.d.ts +8 -0
  121. package/dist/utils/config-loader.d.ts.map +1 -0
  122. package/dist/utils/config-loader.js +154 -0
  123. package/dist/utils/config-loader.js.map +1 -0
  124. package/dist/utils/fix-bot.d.ts +36 -0
  125. package/dist/utils/fix-bot.d.ts.map +1 -0
  126. package/dist/utils/fix-bot.js +274 -0
  127. package/dist/utils/fix-bot.js.map +1 -0
  128. package/dist/utils/git-hooks.d.ts +55 -0
  129. package/dist/utils/git-hooks.d.ts.map +1 -0
  130. package/dist/utils/git-hooks.js +318 -0
  131. package/dist/utils/git-hooks.js.map +1 -0
  132. package/dist/utils/history-report.d.ts +72 -0
  133. package/dist/utils/history-report.d.ts.map +1 -0
  134. package/dist/utils/history-report.js +144 -0
  135. package/dist/utils/history-report.js.map +1 -0
  136. package/dist/utils/init-config.d.ts +23 -0
  137. package/dist/utils/init-config.d.ts.map +1 -0
  138. package/dist/utils/init-config.js +146 -0
  139. package/dist/utils/init-config.js.map +1 -0
  140. package/dist/utils/pr-publisher.d.ts +64 -0
  141. package/dist/utils/pr-publisher.d.ts.map +1 -0
  142. package/dist/utils/pr-publisher.js +265 -0
  143. package/dist/utils/pr-publisher.js.map +1 -0
  144. package/dist/utils/project-detector.d.ts +20 -0
  145. package/dist/utils/project-detector.d.ts.map +1 -0
  146. package/dist/utils/project-detector.js +342 -0
  147. package/dist/utils/project-detector.js.map +1 -0
  148. package/dist/utils/report-uploader.d.ts +35 -0
  149. package/dist/utils/report-uploader.d.ts.map +1 -0
  150. package/dist/utils/report-uploader.js +106 -0
  151. package/dist/utils/report-uploader.js.map +1 -0
  152. package/package.json +78 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-scanner.js","sourceRoot":"","sources":["../../src/scanners/hooks-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * i18n 硬编码检测 Scanner(AST 级别)
3
+ *
4
+ * 检测类型:
5
+ * 1. 字符串字面量中的中文:"你好"
6
+ * 2. 模板字符串中的中文:`你好 ${name}`
7
+ * 3. JSXText 中的中文:<div>你好</div>
8
+ * 4. 已 i18n 调用中的中文(漏翻)
9
+ * 5. console.log / 注释 / 测试文件中的中文(可配置忽略)
10
+ */
11
+ import type { Rule } from "../types.js";
12
+ export declare const i18nRules: Rule[];
13
+ //# sourceMappingURL=i18n-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-scanner.d.ts","sourceRoot":"","sources":["../../src/scanners/i18n-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAsB,MAAM,YAAY,CAAC;AAqB3D,eAAO,MAAM,SAAS,EAAE,IAAI,EAkO3B,CAAC"}
@@ -0,0 +1,535 @@
1
+ "use strict";
2
+ /**
3
+ * i18n 硬编码检测 Scanner(AST 级别)
4
+ *
5
+ * 检测类型:
6
+ * 1. 字符串字面量中的中文:"你好"
7
+ * 2. 模板字符串中的中文:`你好 ${name}`
8
+ * 3. JSXText 中的中文:<div>你好</div>
9
+ * 4. 已 i18n 调用中的中文(漏翻)
10
+ * 5. console.log / 注释 / 测试文件中的中文(可配置忽略)
11
+ */
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.i18nRules = void 0;
17
+ const traverse_1 = __importDefault(require("@babel/traverse"));
18
+ const ast_parser_js_1 = require("../utils/ast-parser.js");
19
+ const common_js_1 = require("../utils/common.js");
20
+ const node_fs_1 = require("node:fs");
21
+ const node_path_1 = require("node:path");
22
+ /** 中文字符正则(包含中文标点) */
23
+ const CHINESE_REGEX = /[一-龥 -〿＀-￯]/;
24
+ /** i18n 函数名列表 */
25
+ const I18N_FUNCTION_NAMES = [
26
+ "t",
27
+ "$t",
28
+ "i18n.t",
29
+ "translate",
30
+ "formatMessage",
31
+ "intl.formatMessage",
32
+ "i18next.t",
33
+ "$i18n.t",
34
+ ];
35
+ exports.i18nRules = [
36
+ {
37
+ id: "i18n-hardcoded-string",
38
+ name: "硬编码中文字符串",
39
+ description: "代码中存在未国际化的中文字符串字面量",
40
+ severity: "warning",
41
+ category: "i18n",
42
+ defaultEnabled: true,
43
+ docsUrl: "https://github.com/wzm111/frontend-guardian/blob/main/docs/rules/i18n-hardcoded-string.md",
44
+ execute(context) {
45
+ const issues = [];
46
+ const ast = context.utils.parseAST(context.source, {
47
+ ext: (0, common_js_1.getFileExt)(context.filePath),
48
+ });
49
+ if (!ast)
50
+ return issues;
51
+ (0, traverse_1.default)(ast, {
52
+ // 1. 字符串字面量中的中文
53
+ StringLiteral(path) {
54
+ const value = path.node.value;
55
+ if (!containsChinese(value))
56
+ return;
57
+ const { line, column } = path.node.loc?.start || { line: 0, column: 0 };
58
+ // 跳过特定场景
59
+ if (shouldIgnoreStringLiteral(path, value, context.source))
60
+ return;
61
+ issues.push({
62
+ ruleId: "i18n-hardcoded-string",
63
+ title: "发现硬编码中文字符串",
64
+ description: `文件中的字符串 "${truncate(value, 30)}" 未进行国际化处理`,
65
+ severity: "warning",
66
+ file: context.filePath,
67
+ line,
68
+ column,
69
+ source: value,
70
+ fix: {
71
+ text: generateI18nCall(value),
72
+ start: { line, column },
73
+ end: { line, column: column + value.length + 2 },
74
+ },
75
+ });
76
+ },
77
+ // 2. 模板字符串中的中文
78
+ TemplateLiteral(path) {
79
+ for (let i = 0; i < path.node.quasis.length; i++) {
80
+ const quasi = path.node.quasis[i];
81
+ const value = quasi.value.raw;
82
+ if (!containsChinese(value))
83
+ continue;
84
+ const { line, column } = quasi.loc?.start || { line: 0, column: 0 };
85
+ // 跳过特定场景
86
+ if (isInsideConsoleOrTest(path))
87
+ continue;
88
+ issues.push({
89
+ ruleId: "i18n-hardcoded-template",
90
+ title: "发现硬编码中文模板字符串",
91
+ description: `模板字符串中的 "${truncate(value, 30)}" 未进行国际化处理`,
92
+ severity: "warning",
93
+ file: context.filePath,
94
+ line,
95
+ column,
96
+ source: value,
97
+ });
98
+ }
99
+ },
100
+ // 3. JSXText 中的中文
101
+ JSXText(path) {
102
+ const value = path.node.value;
103
+ if (!containsChinese(value.trim()))
104
+ return;
105
+ const { line, column } = path.node.loc?.start || { line: 0, column: 0 };
106
+ issues.push({
107
+ ruleId: "i18n-hardcoded-jsx-text",
108
+ title: "发现硬编码中文 JSX 文本",
109
+ description: `JSX 中的文本 "${truncate(value.trim(), 30)}" 未进行国际化处理`,
110
+ severity: "critical",
111
+ file: context.filePath,
112
+ line,
113
+ column,
114
+ source: value.trim(),
115
+ fix: {
116
+ text: `{${generateI18nCall(value.trim())}}`,
117
+ start: { line, column },
118
+ end: { line, column: column + value.length },
119
+ },
120
+ });
121
+ },
122
+ // 4. 属性中的中文
123
+ JSXAttribute(path) {
124
+ const attrName = path.node.name.name;
125
+ const attrValue = path.node.value;
126
+ if (attrName === "title" ||
127
+ attrName === "placeholder" ||
128
+ attrName === "alt" ||
129
+ attrName === "label") {
130
+ if (attrValue?.type === "StringLiteral" && containsChinese(attrValue.value)) {
131
+ const { line, column } = attrValue.loc?.start || { line: 0, column: 0 };
132
+ issues.push({
133
+ ruleId: "i18n-hardcoded-attribute",
134
+ title: `发现硬编码中文 ${attrName} 属性`,
135
+ description: `属性 ${attrName}="${truncate(attrValue.value, 30)}" 未进行国际化处理`,
136
+ severity: "warning",
137
+ file: context.filePath,
138
+ line,
139
+ column,
140
+ source: attrValue.value,
141
+ });
142
+ }
143
+ }
144
+ },
145
+ });
146
+ return issues;
147
+ },
148
+ },
149
+ {
150
+ id: "i18n-missing-key",
151
+ name: "语言包缺失 Key",
152
+ description: "代码中引用了语言包中不存在的 key",
153
+ severity: "critical",
154
+ category: "i18n",
155
+ defaultEnabled: true,
156
+ docsUrl: "https://github.com/wzm111/frontend-guardian/blob/main/docs/rules/i18n-missing-key.md",
157
+ execute(context) {
158
+ const issues = [];
159
+ // 跳过非源码文件
160
+ const ext = (0, node_path_1.extname)(context.filePath).toLowerCase();
161
+ if (![".js", ".ts", ".jsx", ".tsx", ".vue"].includes(ext))
162
+ return issues;
163
+ // 收集语言包 key(模块级缓存)
164
+ const projectDir = context.filePath.split("/src/")[0] || (0, node_path_1.dirname)(context.filePath);
165
+ const localeKeys = collectLocaleKeys(projectDir, context.config);
166
+ if (localeKeys.size === 0)
167
+ return issues;
168
+ // 解析 AST
169
+ const ast = context.utils.parseAST(context.source, {
170
+ ext: (0, common_js_1.getFileExt)(context.filePath),
171
+ });
172
+ if (!ast)
173
+ return issues;
174
+ // 提取代码中引用的 key
175
+ const codeKeys = extractCodeKeys(ast);
176
+ for (const { key, line, column } of codeKeys) {
177
+ // 跳过动态 key(含变量)
178
+ if (!key || key.includes("${") || key.includes("{{"))
179
+ continue;
180
+ if (!localeKeys.has(key)) {
181
+ issues.push({
182
+ ruleId: "i18n-missing-key",
183
+ title: `语言包缺失 Key: ${key}`,
184
+ description: `代码引用的国际化 key "${key}" 在语言包中未找到`,
185
+ severity: "critical",
186
+ file: context.filePath,
187
+ line,
188
+ column,
189
+ source: key,
190
+ });
191
+ }
192
+ }
193
+ return issues;
194
+ },
195
+ },
196
+ {
197
+ id: "i18n-unused-key",
198
+ name: "语言包未使用 Key",
199
+ description: "语言包中存在但代码中未引用的 key",
200
+ severity: "suggestion",
201
+ category: "i18n",
202
+ defaultEnabled: true,
203
+ docsUrl: "https://github.com/wzm111/frontend-guardian/blob/main/docs/rules/i18n-unused-key.md",
204
+ execute(context) {
205
+ const issues = [];
206
+ // 跳过非源码文件
207
+ const ext = (0, node_path_1.extname)(context.filePath).toLowerCase();
208
+ if (![".js", ".ts", ".jsx", ".tsx", ".vue"].includes(ext))
209
+ return issues;
210
+ // 收集语言包 key(模块级缓存)
211
+ const projectDir = context.filePath.split("/src/")[0] || (0, node_path_1.dirname)(context.filePath);
212
+ const localeKeys = collectLocaleKeys(projectDir, context.config);
213
+ if (localeKeys.size === 0)
214
+ return issues;
215
+ // 收集代码中引用的所有 key(项目级缓存,只扫描一次)
216
+ const codeKeys = collectAllCodeKeys(projectDir, context);
217
+ if (codeKeys.size === 0)
218
+ return issues;
219
+ // 找出语言包中有但代码中未引用的 key
220
+ for (const key of localeKeys) {
221
+ if (!codeKeys.has(key)) {
222
+ // 只报告一次每个 key
223
+ issues.push({
224
+ ruleId: "i18n-unused-key",
225
+ title: `语言包未使用 Key: ${key}`,
226
+ description: `国际化 key "${key}" 在语言包中存在,但代码中未找到引用。如果已废弃,建议从语言包中删除`,
227
+ severity: "suggestion",
228
+ file: context.filePath,
229
+ line: 1,
230
+ column: 1,
231
+ source: key,
232
+ });
233
+ }
234
+ }
235
+ return issues;
236
+ },
237
+ },
238
+ ];
239
+ /** 判断是否包含中文 */
240
+ function containsChinese(str) {
241
+ return CHINESE_REGEX.test(str);
242
+ }
243
+ /** 截断字符串 */
244
+ function truncate(str, maxLen) {
245
+ if (str.length <= maxLen)
246
+ return str;
247
+ return str.slice(0, maxLen) + "...";
248
+ }
249
+ /** 生成 i18n 调用 */
250
+ function generateI18nCall(text) {
251
+ // 将中文转换为 key 格式
252
+ const key = textToKey(text);
253
+ return `t('${key}')`;
254
+ }
255
+ /** 中文文本转 key */
256
+ function textToKey(text) {
257
+ return text
258
+ .trim()
259
+ .slice(0, 20)
260
+ .replace(/[^一-龥a-zA-Z0-9]/g, "_")
261
+ .replace(/_+/g, "_")
262
+ .replace(/^_+|_+$/g, "");
263
+ }
264
+ /** 判断字符串字面量是否应被忽略 */
265
+ function shouldIgnoreStringLiteral(path, value, source) {
266
+ // 1. 在 import 语句中
267
+ if (path.parentPath?.isImportDeclaration())
268
+ return true;
269
+ if (path.parentPath?.isImportSpecifier())
270
+ return true;
271
+ // 2. 在 i18n 调用中
272
+ if (isInsideI18nCall(path))
273
+ return true;
274
+ // 3. 在 console 调用中
275
+ if (isInsideConsoleOrTest(path))
276
+ return true;
277
+ // 4. 在注释中
278
+ if (isInComment(path, source))
279
+ return true;
280
+ return false;
281
+ }
282
+ /** 是否在 i18n 函数调用中 */
283
+ function isInsideI18nCall(path) {
284
+ let current = path.parentPath;
285
+ while (current) {
286
+ if (current.isCallExpression()) {
287
+ const callee = current.node.callee;
288
+ const calleeName = getCalleeName(callee);
289
+ if (I18N_FUNCTION_NAMES.some((fn) => calleeName?.endsWith(fn))) {
290
+ return true;
291
+ }
292
+ }
293
+ current = current.parentPath;
294
+ }
295
+ return false;
296
+ }
297
+ /** 是否在 console 或测试代码中 */
298
+ function isInsideConsoleOrTest(path) {
299
+ let current = path.parentPath;
300
+ while (current) {
301
+ if (current.isCallExpression()) {
302
+ const calleeName = getCalleeName(current.node.callee);
303
+ if (calleeName?.startsWith("console."))
304
+ return true;
305
+ if (["describe", "it", "test", "beforeEach", "afterEach"].includes(calleeName || "")) {
306
+ return true;
307
+ }
308
+ }
309
+ current = current.parentPath;
310
+ }
311
+ return false;
312
+ }
313
+ /** 是否在注释中(简单判断) */
314
+ function isInComment(path, source) {
315
+ // 更精确的实现需要 source map,这里做简单判断
316
+ const { line } = path.node.loc?.start || { line: 0 };
317
+ const lines = source.split("\n");
318
+ if (line > 0 && line <= lines.length) {
319
+ const lineStr = lines[line - 1].trim();
320
+ if (lineStr.startsWith("//") || lineStr.startsWith("*") || lineStr.startsWith("/*")) {
321
+ return true;
322
+ }
323
+ }
324
+ return false;
325
+ }
326
+ // ============================================================================
327
+ // 语言包 Key 索引(v2.1.0: 使用 Map 替代模块级变量,支持多项目并发)
328
+ // ============================================================================
329
+ const localeKeyCacheMap = new Map();
330
+ /** 扫描语言包目录,收集所有 key */
331
+ function collectLocaleKeys(projectDir, config) {
332
+ const cached = localeKeyCacheMap.get(projectDir);
333
+ if (cached) {
334
+ return cached;
335
+ }
336
+ const keys = new Set();
337
+ // 预留:sourceLocale / format 可用于未来按语言筛选
338
+ void config?.i18n?.sourceLocale;
339
+ void config?.i18n?.format;
340
+ // 常见语言包目录
341
+ const localeDirs = [
342
+ (0, node_path_1.resolve)(projectDir, "locales"),
343
+ (0, node_path_1.resolve)(projectDir, "i18n"),
344
+ (0, node_path_1.resolve)(projectDir, "lang"),
345
+ (0, node_path_1.resolve)(projectDir, "messages"),
346
+ (0, node_path_1.resolve)(projectDir, "src/locales"),
347
+ (0, node_path_1.resolve)(projectDir, "src/i18n"),
348
+ (0, node_path_1.resolve)(projectDir, "src/lang"),
349
+ ];
350
+ for (const dir of localeDirs) {
351
+ if (!(0, node_fs_1.existsSync)(dir))
352
+ continue;
353
+ try {
354
+ const files = (0, node_fs_1.readdirSync)(dir, { recursive: true, encoding: "utf-8" });
355
+ for (const file of files) {
356
+ const fullPath = (0, node_path_1.resolve)(dir, file);
357
+ const ext = (0, node_path_1.extname)(file).toLowerCase();
358
+ if (ext === ".json") {
359
+ extractKeysFromJSON(fullPath, keys);
360
+ }
361
+ else if (ext === ".js" || ext === ".ts") {
362
+ extractKeysFromJS(fullPath, keys);
363
+ }
364
+ else if (ext === ".yaml" || ext === ".yml") {
365
+ // TODO: YAML 解析
366
+ }
367
+ }
368
+ }
369
+ catch {
370
+ // 目录读取失败,跳过
371
+ }
372
+ }
373
+ localeKeyCacheMap.set(projectDir, keys);
374
+ return keys;
375
+ }
376
+ /** 从 JSON 文件提取 key(递归) */
377
+ function extractKeysFromJSON(filePath, keys) {
378
+ try {
379
+ const content = (0, node_fs_1.readFileSync)(filePath, "utf-8");
380
+ const data = JSON.parse(content);
381
+ extractKeysRecursive(data, "", keys);
382
+ }
383
+ catch {
384
+ // 解析失败,跳过
385
+ }
386
+ }
387
+ /** 从 JS/TS 文件提取 key */
388
+ function extractKeysFromJS(filePath, keys) {
389
+ try {
390
+ const content = (0, node_fs_1.readFileSync)(filePath, "utf-8");
391
+ // 简单提取 export default { ... } 中的 key
392
+ const match = content.match(/export\s+default\s*\{([\s\S]*?)\}/);
393
+ if (match) {
394
+ const objContent = match[1];
395
+ const keyRegex = /['"]([^'"]+)['"]\s*:/g;
396
+ let m;
397
+ while ((m = keyRegex.exec(objContent)) !== null) {
398
+ keys.add(m[1]);
399
+ }
400
+ }
401
+ }
402
+ catch {
403
+ // 解析失败,跳过
404
+ }
405
+ }
406
+ /** 递归提取对象 key */
407
+ function extractKeysRecursive(obj, prefix, keys) {
408
+ if (typeof obj !== "object" || obj === null)
409
+ return;
410
+ for (const [key, value] of Object.entries(obj)) {
411
+ const fullKey = prefix ? `${prefix}.${key}` : key;
412
+ if (typeof value === "string") {
413
+ keys.add(fullKey);
414
+ }
415
+ else if (typeof value === "object" && value !== null) {
416
+ extractKeysRecursive(value, fullKey, keys);
417
+ }
418
+ }
419
+ }
420
+ // ============================================================================
421
+ // 代码中 i18n Key 提取
422
+ // ============================================================================
423
+ /** 从 AST 中提取代码中引用的 i18n key */
424
+ function extractCodeKeys(ast) {
425
+ const keys = [];
426
+ if (!ast)
427
+ return keys;
428
+ (0, traverse_1.default)(ast, {
429
+ // t('key') / $t('key') / formatMessage({ id: 'key' })
430
+ CallExpression(path) {
431
+ const callee = path.node.callee;
432
+ const calleeName = getCalleeName(callee);
433
+ if (!calleeName)
434
+ return;
435
+ // 匹配 t(), $t(), i18n.t(), translate()
436
+ if (I18N_FUNCTION_NAMES.some((fn) => calleeName.endsWith(fn) || calleeName === fn)) {
437
+ const firstArg = path.node.arguments[0];
438
+ if (firstArg?.type === "StringLiteral") {
439
+ const { line, column } = firstArg.loc?.start || { line: 0, column: 0 };
440
+ keys.push({ key: firstArg.value, line, column });
441
+ }
442
+ }
443
+ // 匹配 formatMessage({ id: 'key' })
444
+ if (calleeName === "formatMessage" || calleeName === "intl.formatMessage") {
445
+ const firstArg = path.node.arguments[0];
446
+ if (firstArg?.type === "ObjectExpression") {
447
+ for (const prop of firstArg.properties) {
448
+ if (prop.type === "ObjectProperty" &&
449
+ prop.key.type === "Identifier" &&
450
+ prop.key.name === "id" &&
451
+ prop.value.type === "StringLiteral") {
452
+ const { line, column } = prop.value.loc?.start || { line: 0, column: 0 };
453
+ keys.push({ key: prop.value.value, line, column });
454
+ }
455
+ }
456
+ }
457
+ }
458
+ },
459
+ // JSX: <FormattedMessage id="key" />
460
+ JSXOpeningElement(path) {
461
+ const name = path.node.name;
462
+ if (name.type === "JSXIdentifier" && name.name === "FormattedMessage") {
463
+ for (const attr of path.node.attributes) {
464
+ if (attr.type === "JSXAttribute" &&
465
+ attr.name.type === "JSXIdentifier" &&
466
+ attr.name.name === "id" &&
467
+ attr.value?.type === "StringLiteral") {
468
+ const { line, column } = attr.value.loc?.start || { line: 0, column: 0 };
469
+ keys.push({ key: attr.value.value, line, column });
470
+ }
471
+ }
472
+ }
473
+ },
474
+ });
475
+ return keys;
476
+ }
477
+ /** 项目中所有代码引用的 key(v2.1.0: 使用 Map 替代模块级变量) */
478
+ const allCodeKeysCacheMap = new Map();
479
+ /** 扫描项目中所有代码文件,收集引用的 i18n key */
480
+ function collectAllCodeKeys(projectDir, context) {
481
+ const cached = allCodeKeysCacheMap.get(projectDir);
482
+ if (cached) {
483
+ return cached;
484
+ }
485
+ const keys = new Set();
486
+ // 扫描 src 目录下的代码文件
487
+ const srcDir = (0, node_path_1.resolve)(projectDir, "src");
488
+ const codeDirs = [srcDir, projectDir];
489
+ for (const dir of codeDirs) {
490
+ if (!(0, node_fs_1.existsSync)(dir))
491
+ continue;
492
+ try {
493
+ const files = (0, node_fs_1.readdirSync)(dir, { recursive: true, encoding: "utf-8" });
494
+ for (const file of files) {
495
+ const fullPath = (0, node_path_1.resolve)(dir, file);
496
+ const ext = (0, node_path_1.extname)(file).toLowerCase();
497
+ if (![".js", ".ts", ".jsx", ".tsx", ".vue"].includes(ext))
498
+ continue;
499
+ try {
500
+ const source = (0, node_fs_1.readFileSync)(fullPath, "utf-8");
501
+ const ast = (0, ast_parser_js_1.parseAST)(source, { ext });
502
+ if (!ast)
503
+ continue;
504
+ const fileKeys = extractCodeKeys(ast);
505
+ for (const { key } of fileKeys) {
506
+ if (key && !key.includes("${") && !key.includes("{{")) {
507
+ keys.add(key);
508
+ }
509
+ }
510
+ }
511
+ catch {
512
+ // 单个文件解析失败,跳过
513
+ }
514
+ }
515
+ }
516
+ catch {
517
+ // 目录读取失败,跳过
518
+ }
519
+ }
520
+ allCodeKeysCacheMap.set(projectDir, keys);
521
+ return keys;
522
+ }
523
+ /** 获取 callee 名称 */
524
+ function getCalleeName(callee) {
525
+ if (callee.type === "Identifier") {
526
+ return callee.name;
527
+ }
528
+ if (callee.type === "MemberExpression") {
529
+ const obj = getCalleeName(callee.object);
530
+ const prop = callee.property.type === "Identifier" ? callee.property.name : "";
531
+ return obj ? `${obj}.${prop}` : prop;
532
+ }
533
+ return null;
534
+ }
535
+ //# sourceMappingURL=i18n-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n-scanner.js","sourceRoot":"","sources":["../../src/scanners/i18n-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 命名规范 Scanner
3
+ *
4
+ * 检测范围:
5
+ * 1. class 名 — PascalCase
6
+ * 2. interface 名 — PascalCase
7
+ * 3. type 别名 — PascalCase
8
+ * 4. enum 名 — PascalCase, enum 成员 — UPPER_SNAKE_CASE
9
+ * 5. function/method — camelCase(React 组件允许 PascalCase)
10
+ * 6. variable (let/var) — camelCase
11
+ * 7. constant (const + 字面量) — UPPER_SNAKE_CASE
12
+ * 8. 私有成员前缀 — _ (JS) 或 # (TS private)
13
+ * 9. 文件名 — kebab-case 推荐
14
+ * 10. 文件夹名 — kebab-case 推荐
15
+ */
16
+ import type { Rule } from "../types.js";
17
+ /** 命名规范规则 */
18
+ export declare const namingRules: Rule[];
19
+ //# sourceMappingURL=naming-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming-scanner.d.ts","sourceRoot":"","sources":["../../src/scanners/naming-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAoC,MAAM,YAAY,CAAC;AAqBzE,aAAa;AACb,eAAO,MAAM,WAAW,EAAE,IAAI,EAkjB7B,CAAC"}