@termdock/twlint 1.0.2 → 1.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.
Files changed (41) hide show
  1. package/README.md +104 -17
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +18 -15
  4. package/dist/cli.js.map +1 -1
  5. package/dist/core/config-loader.d.ts +2 -2
  6. package/dist/core/config-loader.d.ts.map +1 -1
  7. package/dist/core/config-loader.js +1 -1
  8. package/dist/core/config-matcher.d.ts +58 -0
  9. package/dist/core/config-matcher.d.ts.map +1 -0
  10. package/dist/core/config-matcher.js +236 -0
  11. package/dist/core/config-matcher.js.map +1 -0
  12. package/dist/core/config-schema.d.ts +2 -1
  13. package/dist/core/config-schema.d.ts.map +1 -1
  14. package/dist/core/config-schema.js +30 -26
  15. package/dist/core/config-schema.js.map +1 -1
  16. package/dist/core/dictionary-loading-strategies.d.ts +1 -1
  17. package/dist/core/dictionary-loading-strategies.js +1 -1
  18. package/dist/core/ignore-file-loader.d.ts +29 -0
  19. package/dist/core/ignore-file-loader.d.ts.map +1 -0
  20. package/dist/core/ignore-file-loader.js +74 -0
  21. package/dist/core/ignore-file-loader.js.map +1 -0
  22. package/dist/core/linter.d.ts +42 -5
  23. package/dist/core/linter.d.ts.map +1 -1
  24. package/dist/core/linter.js +129 -38
  25. package/dist/core/linter.js.map +1 -1
  26. package/dist/core/rules/mainland-terms.d.ts.map +1 -1
  27. package/dist/core/rules/mainland-terms.js +6 -2
  28. package/dist/core/rules/mainland-terms.js.map +1 -1
  29. package/dist/dictionaries/ai-emerging-tech.json +1 -33
  30. package/dist/dictionaries/business-finance.json +1 -193
  31. package/dist/dictionaries/core.json +29 -157
  32. package/dist/dictionaries/hardware-3c.json +1 -33
  33. package/dist/dictionaries/index.json +10 -10
  34. package/dist/dictionaries/network-cloud.json +1 -33
  35. package/dist/dictionaries/operating-system.json +1 -65
  36. package/dist/dictionaries/social-media.json +1 -137
  37. package/dist/dictionaries/software-development.json +1 -353
  38. package/dist/dictionaries/user-interface.json +1 -209
  39. package/dist/types.d.ts +2 -0
  40. package/dist/types.d.ts.map +1 -1
  41. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-matcher.js","sourceRoot":"","sources":["../../src/core/config-matcher.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  export interface TWLintConfigRule {
2
2
  files?: string[];
3
+ ignores?: string[];
3
4
  dictionaries?: string[];
4
5
  domains?: string[];
5
6
  rules?: Record<string, 'error' | 'warning' | 'info' | 'off'>;
@@ -8,6 +9,6 @@ export type TWLintConfigArray = TWLintConfigRule[];
8
9
  export type TWLintConfigSingle = TWLintConfigRule;
9
10
  export type TWLintUserConfig = TWLintConfigSingle | TWLintConfigArray;
10
11
  export declare const DEFAULT_CONFIG: TWLintConfigSingle;
11
- export declare function validateConfig(config: unknown): TWLintConfigSingle;
12
+ export declare function validateConfig(config: unknown): TWLintUserConfig;
12
13
  export declare function createSampleConfig(): string;
13
14
  //# sourceMappingURL=config-schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../src/core/config-schema.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC,CAAA;CAC7D;AAED,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,EAAE,CAAA;AAClD,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAA;AAGjD,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,iBAAiB,CAAA;AAErE,eAAO,MAAM,cAAc,EAAE,kBAO5B,CAAA;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAYlE;AA6BD,wBAAgB,kBAAkB,IAAI,MAAM,CAgD3C"}
1
+ {"version":3,"file":"config-schema.d.ts","sourceRoot":"","sources":["../../src/core/config-schema.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,CAAC,CAAA;CAC7D;AAED,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,EAAE,CAAA;AAClD,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAA;AAGjD,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,iBAAiB,CAAA;AAErE,eAAO,MAAM,cAAc,EAAE,kBAO5B,CAAA;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAYhE;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAwE3C"}
@@ -1,4 +1,4 @@
1
- // TWLint 配置檔案結構定義和驗證
1
+ // TWLint 設定檔案結構定義和驗證
2
2
  export const DEFAULT_CONFIG = {
3
3
  files: ['**/*.md', '**/*.txt'],
4
4
  dictionaries: ['core'],
@@ -11,41 +11,37 @@ export function validateConfig(config) {
11
11
  if (!config || typeof config !== 'object') {
12
12
  return DEFAULT_CONFIG;
13
13
  }
14
- // 如果是陣列,合併所有配置
14
+ // 如果是陣列,保持陣列形式(ESLint flat config 風格)
15
15
  if (Array.isArray(config)) {
16
- return mergeConfigs(config);
16
+ return config;
17
17
  }
18
- // 單一配置物件
19
- return mergeConfig(DEFAULT_CONFIG, config);
20
- }
21
- function mergeConfigs(configs) {
22
- let merged = { ...DEFAULT_CONFIG };
23
- for (const config of configs) {
24
- if (config && typeof config === 'object') {
25
- merged = mergeConfig(merged, config);
26
- }
27
- }
28
- return merged;
29
- }
30
- function mergeConfig(defaultConfig, userConfig) {
31
- return {
32
- files: userConfig.files || defaultConfig.files,
33
- dictionaries: userConfig.dictionaries || defaultConfig.dictionaries,
34
- domains: userConfig.domains || defaultConfig.domains, // 保留 domains 配置
35
- rules: {
36
- ...defaultConfig.rules,
37
- ...userConfig.rules
38
- }
39
- };
18
+ // 單一設定物件
19
+ return config;
40
20
  }
41
21
  export function createSampleConfig() {
42
- return `// TWLint 配置檔案
22
+ return `// TWLint 設定檔案
43
23
  // 專注於核心功能:簡繁轉換 + 大陸用語檢測
44
24
 
45
25
  export default [
26
+ // Global ignores - 全域忽略模式(只有 ignores 屬性時視為全域)
27
+ //
28
+ // 注意:以下檔案已被系統鐵律保護,無需額外設定:
29
+ // - 設定檔案:.gitignore, .dockerignore, .env*, 等
30
+ // - 版本控制:.git/, .svn/, node_modules/
31
+ // - 建構輸出:dist/, build/, .next/
32
+ // - 日誌檔案:*.log, *.tmp
33
+ {
34
+ ignores: [
35
+ // 專案特定的忽略模式
36
+ "**/test-*.md",
37
+ "**/draft-*.md"
38
+ ]
39
+ },
40
+
46
41
  {
47
42
  // 文件檔案:完整檢查
48
43
  files: ["**/*.md", "**/*.txt"],
44
+ ignores: ["**/README.md"], // 排除 README
49
45
  domains: ["software-development", "user-interface"],
50
46
  rules: {
51
47
  "simplified-chars": "error", // 簡體字檢測(自動修復)
@@ -61,6 +57,14 @@ export default [
61
57
  "mainland-terms": "warning" // UI 文字中的大陸用語提醒
62
58
  }
63
59
  },
60
+ {
61
+ // 測試檔案:放寬規則
62
+ files: ["tests/**/*.{js,ts,md}"],
63
+ rules: {
64
+ "simplified-chars": "error",
65
+ "mainland-terms": "off" // 測試檔案允許大陸用語
66
+ }
67
+ },
64
68
  {
65
69
  // 商業文件:更嚴格的檢查
66
70
  files: ["docs/business/**/*.md"],
@@ -1 +1 @@
1
- {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/core/config-schema.ts"],"names":[],"mappings":"AAAA,qBAAqB;AAerB,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD,KAAK,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;IAC9B,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,KAAK,EAAE;QACL,kBAAkB,EAAE,OAAO;QAC3B,gBAAgB,EAAE,SAAS;KAC5B;CACF,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,eAAe;IACf,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,YAAY,CAAC,MAAM,CAAC,CAAA;IAC7B,CAAC;IAED,SAAS;IACT,OAAO,WAAW,CAAC,cAAc,EAAE,MAAqC,CAAC,CAAA;AAC3E,CAAC;AAED,SAAS,YAAY,CAAC,OAAkB;IACtC,IAAI,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,CAAA;IAElC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,MAAqC,CAAC,CAAA;QACrE,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,WAAW,CAClB,aAAiC,EACjC,UAAuC;IAEvC,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK;QAC9C,YAAY,EAAE,UAAU,CAAC,YAAY,IAAI,aAAa,CAAC,YAAY;QACnE,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,EAAG,gBAAgB;QACvE,KAAK,EAAE;YACL,GAAG,aAAa,CAAC,KAAK;YACtB,GAAG,UAAU,CAAC,KAAK;SACpB;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA8Ce,CAAA;AACxB,CAAC"}
1
+ {"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/core/config-schema.ts"],"names":[],"mappings":"AAAA,qBAAqB;AAgBrB,MAAM,CAAC,MAAM,cAAc,GAAuB;IAChD,KAAK,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;IAC9B,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,KAAK,EAAE;QACL,kBAAkB,EAAE,OAAO;QAC3B,gBAAgB,EAAE,SAAS;KAC5B;CACF,CAAA;AAED,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,OAAO,cAAc,CAAA;IACvB,CAAC;IAED,sCAAsC;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,MAA2B,CAAA;IACpC,CAAC;IAED,SAAS;IACT,OAAO,MAA4B,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAsEe,CAAA;AACxB,CAAC"}
@@ -37,7 +37,7 @@ export declare class DeepDictStrategy implements DictLoadStrategy {
37
37
  getDictionaries(config: TWLintConfig, manager: DictionaryManager): Promise<string[]>;
38
38
  }
39
39
  /**
40
- * 策略工廠:根據配置選擇適當的策略
40
+ * 策略工廠:根據設定選擇適當的策略
41
41
  */
42
42
  export declare class DictLoadStrategyFactory {
43
43
  static create(config: TWLintConfig, deep?: boolean): DictLoadStrategy;
@@ -52,7 +52,7 @@ export class DeepDictStrategy {
52
52
  }
53
53
  }
54
54
  /**
55
- * 策略工廠:根據配置選擇適當的策略
55
+ * 策略工廠:根據設定選擇適當的策略
56
56
  */
57
57
  export class DictLoadStrategyFactory {
58
58
  static create(config, deep) {
@@ -0,0 +1,29 @@
1
+ /**
2
+ * IgnoreFileLoader - 載入 .twlintignore 檔案
3
+ *
4
+ * 類似 ESLint 的 .eslintignore 功能
5
+ */
6
+ export declare class IgnoreFileLoader {
7
+ /**
8
+ * 嘗試載入 .twlintignore 檔案
9
+ *
10
+ * @param cwd 當前工作目錄
11
+ * @returns ignore patterns 陣列,找不到檔案時回傳空陣列
12
+ */
13
+ static load(cwd?: string): Promise<string[]>;
14
+ /**
15
+ * 解析 .twlintignore 檔案內容
16
+ *
17
+ * 格式規則:
18
+ * - 每行一個 glob pattern
19
+ * - # 開頭為註解
20
+ * - 空行會被忽略
21
+ * - 目錄結尾 / 會自動轉換為 /**
22
+ */
23
+ private static parseIgnoreFile;
24
+ /**
25
+ * 檢查 .twlintignore 檔案是否存在
26
+ */
27
+ static exists(cwd?: string): Promise<boolean>;
28
+ }
29
+ //# sourceMappingURL=ignore-file-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore-file-loader.d.ts","sourceRoot":"","sources":["../../src/core/ignore-file-loader.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B;;;;;OAKG;WACU,IAAI,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAajE;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAyB9B;;OAEG;WACU,MAAM,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,OAAO,CAAC;CASnE"}
@@ -0,0 +1,74 @@
1
+ import { readFile, access } from 'fs/promises';
2
+ import { resolve } from 'path';
3
+ /**
4
+ * IgnoreFileLoader - 載入 .twlintignore 檔案
5
+ *
6
+ * 類似 ESLint 的 .eslintignore 功能
7
+ */
8
+ export class IgnoreFileLoader {
9
+ /**
10
+ * 嘗試載入 .twlintignore 檔案
11
+ *
12
+ * @param cwd 當前工作目錄
13
+ * @returns ignore patterns 陣列,找不到檔案時回傳空陣列
14
+ */
15
+ static async load(cwd = process.cwd()) {
16
+ const ignoreFilePath = resolve(cwd, '.twlintignore');
17
+ try {
18
+ await access(ignoreFilePath);
19
+ const content = await readFile(ignoreFilePath, 'utf-8');
20
+ return this.parseIgnoreFile(content);
21
+ }
22
+ catch {
23
+ // 找不到 .twlintignore 檔案,回傳空陣列
24
+ return [];
25
+ }
26
+ }
27
+ /**
28
+ * 解析 .twlintignore 檔案內容
29
+ *
30
+ * 格式規則:
31
+ * - 每行一個 glob pattern
32
+ * - # 開頭為註解
33
+ * - 空行會被忽略
34
+ * - 目錄結尾 / 會自動轉換為 /**
35
+ */
36
+ static parseIgnoreFile(content) {
37
+ return content
38
+ .split('\n')
39
+ .map(line => line.trim())
40
+ .filter(line => {
41
+ // 過濾空行和註解
42
+ if (!line)
43
+ return false;
44
+ if (line.startsWith('#'))
45
+ return false;
46
+ return true;
47
+ })
48
+ .map(line => {
49
+ // 處理目錄模式(結尾 /)
50
+ if (line.endsWith('/')) {
51
+ return line + '**';
52
+ }
53
+ // 如果模式不包含 / 和 *,加上 **/ 前綴以匹配任何深度
54
+ if (!line.includes('/') && !line.includes('*')) {
55
+ return '**/' + line;
56
+ }
57
+ return line;
58
+ });
59
+ }
60
+ /**
61
+ * 檢查 .twlintignore 檔案是否存在
62
+ */
63
+ static async exists(cwd = process.cwd()) {
64
+ const ignoreFilePath = resolve(cwd, '.twlintignore');
65
+ try {
66
+ await access(ignoreFilePath);
67
+ return true;
68
+ }
69
+ catch {
70
+ return false;
71
+ }
72
+ }
73
+ }
74
+ //# sourceMappingURL=ignore-file-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore-file-loader.js","sourceRoot":"","sources":["../../src/core/ignore-file-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAE9B;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IAC3B;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;QAC3C,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;QAEpD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;YAC5B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;YACvD,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;YAC7B,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACK,MAAM,CAAC,eAAe,CAAC,OAAe;QAC5C,OAAO,OAAO;aACX,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aACxB,MAAM,CAAC,IAAI,CAAC,EAAE;YACb,UAAU;YACV,IAAI,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAA;YACvB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAA;YACtC,OAAO,IAAI,CAAA;QACb,CAAC,CAAC;aACD,GAAG,CAAC,IAAI,CAAC,EAAE;YACV,eAAe;YACf,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,IAAI,GAAG,IAAI,CAAA;YACpB,CAAC;YAED,iCAAiC;YACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,OAAO,KAAK,GAAG,IAAI,CAAA;YACrB,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;QAC7C,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;QACpD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;YAC5B,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF"}
@@ -1,19 +1,56 @@
1
- import type { LintResult, Issue, TWLintConfig } from '../types.js';
1
+ import type { LintResult, Issue, TWLintUserConfig } from '../types.js';
2
2
  export declare class TWLinter {
3
3
  private dictManager;
4
4
  private rules;
5
5
  private config;
6
6
  private deepMode;
7
- constructor(config: TWLintConfig, options?: {
7
+ private configMatcher;
8
+ private twlintignoreLoaded;
9
+ constructor(config: TWLintUserConfig, options?: {
8
10
  deep?: boolean;
9
11
  });
12
+ /**
13
+ * 載入 .twlintignore 檔案(如果存在)
14
+ *
15
+ * 這個方法會在第一次需要時自動呼叫
16
+ */
17
+ private loadTwlintignore;
10
18
  private initializeRules;
11
19
  lintFiles(patterns: string[]): Promise<LintResult[]>;
12
- lintText(text: string, _filePath?: string): Promise<Issue[]>;
13
- fixText(text: string): Promise<string>;
20
+ lintText(text: string, filePath?: string): Promise<Issue[]>;
21
+ fixText(text: string, filePath?: string): Promise<string>;
14
22
  private expandFilePatterns;
15
- private getIgnorePatterns;
23
+ /**
24
+ * 取得基礎忽略模式(僅用於 glob 擴展時的初步過濾)
25
+ *
26
+ * 注意:
27
+ * - 系統鐵律(SYSTEM_IGNORES)已在 ConfigMatcher 處理
28
+ * - 這裡只需要最基本的過濾,避免 glob 擴展時掃描過多檔案
29
+ */
30
+ private getBaseIgnorePatterns;
31
+ /**
32
+ * 根據檔案路徑載入對應的詞庫
33
+ */
34
+ private loadDictionariesForFile;
35
+ /**
36
+ * 取得預設詞庫列表
37
+ */
38
+ private getDefaultDictionaries;
39
+ /**
40
+ * 舊方法保留向後相容
41
+ */
16
42
  private loadDictionaries;
43
+ /**
44
+ * 根據檔案路徑獲取適用的規則
45
+ */
46
+ private getActiveRulesForFile;
47
+ /**
48
+ * 取得預設規則
49
+ */
50
+ private getDefaultRules;
51
+ /**
52
+ * 舊方法保留向後相容
53
+ */
17
54
  private getActiveRules;
18
55
  /**
19
56
  * 檢查規則是否啟用
@@ -1 +1 @@
1
- {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../src/core/linter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAQ,MAAM,aAAa,CAAA;AAIxE,qBAAa,QAAQ;IACnB,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE;IAO9D,OAAO,CAAC,eAAe;IAQjB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA8BpD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IA8B5D,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAkB9B,kBAAkB;YAwBlB,iBAAiB;YA8CjB,gBAAgB;IAe9B,OAAO,CAAC,cAAc;IAoBtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACH,OAAO,CAAC,yBAAyB;CAUlC"}
1
+ {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../src/core/linter.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAQ,MAAM,aAAa,CAAA;AAI5E,qBAAa,QAAQ;IACnB,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,kBAAkB,CAAQ;gBAEtB,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE;IAQlE;;;;OAIG;YACW,gBAAgB;IAW9B,OAAO,CAAC,eAAe;IAQjB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAiCpD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IA+B3D,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAkBjD,kBAAkB;IA4BhC;;;;;;OAMG;YACW,qBAAqB;IAkCnC;;OAEG;YACW,uBAAuB;IAsCrC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAK9B;;OAEG;YACW,gBAAgB;IAgB9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoB7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAKtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,OAAO,CAAC,yBAAyB;CAUlC"}
@@ -3,6 +3,8 @@ import { readFile } from 'fs/promises';
3
3
  import { DictionaryManager } from './dictionary-manager.js';
4
4
  import { SimplifiedCharsRule } from './rules/simplified-chars.js';
5
5
  import { MainlandTermsRule } from './rules/mainland-terms.js';
6
+ import { ConfigMatcher } from './config-matcher.js';
7
+ import { IgnoreFileLoader } from './ignore-file-loader.js';
6
8
  import { formatError, ErrorHandler } from '../utils/error-utils.js';
7
9
  import { DictLoadStrategyFactory } from './dictionary-loading-strategies.js';
8
10
  export class TWLinter {
@@ -10,12 +12,29 @@ export class TWLinter {
10
12
  rules = new Map();
11
13
  config;
12
14
  deepMode = false;
15
+ configMatcher;
16
+ twlintignoreLoaded = false;
13
17
  constructor(config, options) {
14
18
  this.config = config;
15
19
  this.deepMode = options?.deep || false;
16
20
  this.dictManager = new DictionaryManager();
21
+ this.configMatcher = new ConfigMatcher(config);
17
22
  this.initializeRules();
18
23
  }
24
+ /**
25
+ * 載入 .twlintignore 檔案(如果存在)
26
+ *
27
+ * 這個方法會在第一次需要時自動呼叫
28
+ */
29
+ async loadTwlintignore() {
30
+ if (this.twlintignoreLoaded)
31
+ return;
32
+ const patterns = await IgnoreFileLoader.load();
33
+ if (patterns.length > 0) {
34
+ this.configMatcher.setTwlintignorePatterns(patterns);
35
+ }
36
+ this.twlintignoreLoaded = true;
37
+ }
19
38
  initializeRules() {
20
39
  // 註冊簡體字檢測規則
21
40
  this.rules.set('simplified-chars', new SimplifiedCharsRule());
@@ -23,6 +42,8 @@ export class TWLinter {
23
42
  this.rules.set('mainland-terms', new MainlandTermsRule(this.dictManager));
24
43
  }
25
44
  async lintFiles(patterns) {
45
+ // 載入 .twlintignore(如果存在)
46
+ await this.loadTwlintignore();
26
47
  const files = await this.expandFilePatterns(patterns);
27
48
  const results = [];
28
49
  for (const filePath of files) {
@@ -50,10 +71,11 @@ export class TWLinter {
50
71
  }
51
72
  return results;
52
73
  }
53
- async lintText(text, _filePath) {
54
- await this.loadDictionaries(this.deepMode);
74
+ async lintText(text, filePath) {
75
+ // 根據檔案路徑載入對應的詞庫
76
+ await this.loadDictionariesForFile(filePath);
55
77
  const issues = [];
56
- const activeRules = this.getActiveRules();
78
+ const activeRules = this.getActiveRulesForFile(filePath);
57
79
  // Process all active rules with unified preprocessing
58
80
  for (const rule of activeRules) {
59
81
  try {
@@ -74,9 +96,9 @@ export class TWLinter {
74
96
  }
75
97
  return issues;
76
98
  }
77
- async fixText(text) {
78
- await this.loadDictionaries(this.deepMode);
79
- const activeRules = this.getActiveRules().filter(rule => rule.fix);
99
+ async fixText(text, filePath) {
100
+ await this.loadDictionariesForFile(filePath);
101
+ const activeRules = this.getActiveRulesForFile(filePath).filter(rule => rule.fix);
80
102
  let result = text;
81
103
  // 按規則順序依次應用修復
82
104
  for (const rule of activeRules) {
@@ -91,42 +113,41 @@ export class TWLinter {
91
113
  }
92
114
  async expandFilePatterns(patterns) {
93
115
  const files = [];
94
- const ignorePatterns = await this.getIgnorePatterns();
116
+ const baseIgnorePatterns = await this.getBaseIgnorePatterns();
95
117
  for (const pattern of patterns) {
96
118
  // 檢查是否為明確的檔案路徑(沒有萬用字元)
97
119
  const hasWildcards = pattern.includes('*') || pattern.includes('?') || pattern.includes('[');
98
120
  if (!hasWildcards) {
99
- // 明確的檔案路徑:直接加入,讓後續的檔案讀取來處理錯誤
100
- files.push(pattern);
121
+ // 明確的檔案路徑:直接加入,但要檢查設定的 ignores
122
+ if (!this.configMatcher.isIgnored(pattern)) {
123
+ files.push(pattern);
124
+ }
101
125
  }
102
126
  else {
103
- // 萬用字元模式:使用 glob 擴展,遵循 .gitignore 規則
127
+ // 萬用字元模式:使用 glob 擴展
104
128
  const matches = await glob(pattern, {
105
- ignore: ignorePatterns,
129
+ ignore: baseIgnorePatterns,
106
130
  dot: false // 預設不包含隱藏檔案
107
131
  });
108
- files.push(...matches);
132
+ // 過濾掉設定中 ignores 的檔案
133
+ const filtered = matches.filter(file => !this.configMatcher.isIgnored(file));
134
+ files.push(...filtered);
109
135
  }
110
136
  }
111
137
  return [...new Set(files)]; // Remove duplicates
112
138
  }
113
- async getIgnorePatterns() {
114
- const defaultIgnores = [
139
+ /**
140
+ * 取得基礎忽略模式(僅用於 glob 擴展時的初步過濾)
141
+ *
142
+ * 注意:
143
+ * - 系統鐵律(SYSTEM_IGNORES)已在 ConfigMatcher 處理
144
+ * - 這裡只需要最基本的過濾,避免 glob 擴展時掃描過多檔案
145
+ */
146
+ async getBaseIgnorePatterns() {
147
+ // 只保留最基本的過濾,其餘交給 ConfigMatcher
148
+ const baseIgnores = [
115
149
  'node_modules/**',
116
- '.git/**',
117
- '.next/**',
118
- '.nuxt/**',
119
- 'dist/**',
120
- 'build/**',
121
- 'coverage/**',
122
- 'logs/**',
123
- '*.log',
124
- '.env*',
125
- '.DS_Store',
126
- '.vscode/**',
127
- '.idea/**',
128
- 'test-temp/**',
129
- '*.tmp'
150
+ '.git/**'
130
151
  ];
131
152
  try {
132
153
  const { readFile } = await import('fs/promises');
@@ -146,16 +167,66 @@ export class TWLinter {
146
167
  }
147
168
  return line;
148
169
  });
149
- return [...defaultIgnores, ...gitignorePatterns];
170
+ return [...baseIgnores, ...gitignorePatterns];
150
171
  }
151
172
  catch {
152
173
  // 沒有 .gitignore 或讀取失敗,使用預設規則
153
- return defaultIgnores;
174
+ return baseIgnores;
154
175
  }
155
176
  }
177
+ /**
178
+ * 根據檔案路徑載入對應的詞庫
179
+ */
180
+ async loadDictionariesForFile(filePath) {
181
+ if (this.deepMode) {
182
+ // Deep mode: 載入所有可用詞庫
183
+ const strategy = DictLoadStrategyFactory.create(Array.isArray(this.config) ? this.config[0] : this.config, true);
184
+ const dictNames = await strategy.getDictionaries(Array.isArray(this.config) ? this.config[0] : this.config, this.dictManager);
185
+ for (const name of dictNames) {
186
+ try {
187
+ await this.dictManager.loadDictionary(name);
188
+ }
189
+ catch (error) {
190
+ ErrorHandler.handle(error, `Failed to load dictionary "${name}"`);
191
+ }
192
+ }
193
+ return;
194
+ }
195
+ // 根據檔案獲取對應的 domains
196
+ const domains = filePath ? this.configMatcher.getDomainsForFile(filePath) : [];
197
+ // 組合要載入的詞庫:core (永遠載入) + domains
198
+ const dictNames = ['core']; // 永遠包含 core
199
+ if (domains.length > 0) {
200
+ dictNames.push(...domains);
201
+ }
202
+ else {
203
+ // 如果沒有指定 domains,使用設定中的 dictionaries
204
+ const defaultDicts = this.getDefaultDictionaries().filter(d => d !== 'core');
205
+ dictNames.push(...defaultDicts);
206
+ }
207
+ for (const name of dictNames) {
208
+ try {
209
+ await this.dictManager.loadDictionary(name);
210
+ }
211
+ catch (error) {
212
+ ErrorHandler.handle(error, `Failed to load dictionary "${name}"`);
213
+ }
214
+ }
215
+ }
216
+ /**
217
+ * 取得預設詞庫列表
218
+ */
219
+ getDefaultDictionaries() {
220
+ const config = Array.isArray(this.config) ? this.config[0] : this.config;
221
+ return config.dictionaries || ['core'];
222
+ }
223
+ /**
224
+ * 舊方法保留向後相容
225
+ */
156
226
  async loadDictionaries(deep) {
157
- const strategy = DictLoadStrategyFactory.create(this.config, deep);
158
- const dictNames = await strategy.getDictionaries(this.config, this.dictManager);
227
+ const config = Array.isArray(this.config) ? this.config[0] : this.config;
228
+ const strategy = DictLoadStrategyFactory.create(config, deep);
229
+ const dictNames = await strategy.getDictionaries(config, this.dictManager);
159
230
  for (const name of dictNames) {
160
231
  try {
161
232
  await this.dictManager.loadDictionary(name);
@@ -166,12 +237,15 @@ export class TWLinter {
166
237
  }
167
238
  }
168
239
  }
169
- getActiveRules() {
240
+ /**
241
+ * 根據檔案路徑獲取適用的規則
242
+ */
243
+ getActiveRulesForFile(filePath) {
170
244
  const activeRules = [];
171
- const rules = this.config.rules || {
172
- 'simplified-chars': 'error',
173
- 'mainland-terms': 'warning'
174
- };
245
+ // 如果有檔案路徑,使用 ConfigMatcher 獲取檔案特定的規則
246
+ const rules = filePath
247
+ ? this.configMatcher.getRulesForFile(filePath)
248
+ : this.getDefaultRules();
175
249
  for (const [ruleName, severity] of Object.entries(rules)) {
176
250
  if (severity !== 'off') {
177
251
  const rule = this.rules.get(ruleName);
@@ -182,11 +256,28 @@ export class TWLinter {
182
256
  }
183
257
  return activeRules;
184
258
  }
259
+ /**
260
+ * 取得預設規則
261
+ */
262
+ getDefaultRules() {
263
+ const config = Array.isArray(this.config) ? this.config[0] : this.config;
264
+ return config.rules || {
265
+ 'simplified-chars': 'error',
266
+ 'mainland-terms': 'warning'
267
+ };
268
+ }
269
+ /**
270
+ * 舊方法保留向後相容
271
+ */
272
+ getActiveRules() {
273
+ return this.getActiveRulesForFile(undefined);
274
+ }
185
275
  /**
186
276
  * 檢查規則是否啟用
187
277
  */
188
278
  isRuleActive(ruleName) {
189
- const rules = this.config.rules || {};
279
+ const config = Array.isArray(this.config) ? this.config[0] : this.config;
280
+ const rules = config.rules || {};
190
281
  return rules[ruleName] !== 'off';
191
282
  }
192
283
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"linter.js","sourceRoot":"","sources":["../../src/core/linter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"linter.js","sourceRoot":"","sources":["../../src/core/linter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mainland-terms.d.ts","sourceRoot":"","sources":["../../../src/core/rules/mainland-terms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAIjE,qBAAa,iBAAkB,YAAW,IAAI;IAC5C,QAAQ,CAAC,IAAI,oBAAmB;IAChC,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,SAAS,CAA8B;gBAEnC,WAAW,EAAE,iBAAiB;IAKpC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAYxD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IA2BrC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBxC,OAAO,CAAC,WAAW;CAOpB"}
1
+ {"version":3,"file":"mainland-terms.d.ts","sourceRoot":"","sources":["../../../src/core/rules/mainland-terms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAIjE,qBAAa,iBAAkB,YAAW,IAAI;IAC5C,QAAQ,CAAC,IAAI,oBAAmB;IAChC,OAAO,CAAC,WAAW,CAAmB;IACtC,OAAO,CAAC,SAAS,CAA8B;gBAEnC,WAAW,EAAE,iBAAiB;IAKpC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAYxD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAgCrC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBxC,OAAO,CAAC,WAAW;CAOpB"}