@termdock/twlint 1.0.0 → 1.0.1
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/README.md +176 -63
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +49 -10
- package/dist/cli.js.map +1 -1
- package/dist/core/config-schema.d.ts +1 -0
- package/dist/core/config-schema.d.ts.map +1 -1
- package/dist/core/config-schema.js +33 -7
- package/dist/core/config-schema.js.map +1 -1
- package/dist/core/dictionary-loading-strategies.d.ts +45 -0
- package/dist/core/dictionary-loading-strategies.d.ts.map +1 -0
- package/dist/core/dictionary-loading-strategies.js +75 -0
- package/dist/core/dictionary-loading-strategies.js.map +1 -0
- package/dist/core/dictionary-manager.d.ts +2 -1
- package/dist/core/dictionary-manager.d.ts.map +1 -1
- package/dist/core/dictionary-manager.js +51 -16
- package/dist/core/dictionary-manager.js.map +1 -1
- package/dist/core/linter.d.ts +2 -6
- package/dist/core/linter.d.ts.map +1 -1
- package/dist/core/linter.js +82 -58
- package/dist/core/linter.js.map +1 -1
- package/dist/core/lru-cache.d.ts +18 -0
- package/dist/core/lru-cache.d.ts.map +1 -0
- package/dist/core/lru-cache.js +57 -0
- package/dist/core/lru-cache.js.map +1 -0
- package/dist/core/matching/match-strategies.d.ts +19 -11
- package/dist/core/matching/match-strategies.d.ts.map +1 -1
- package/dist/core/matching/match-strategies.js +44 -74
- package/dist/core/matching/match-strategies.js.map +1 -1
- package/dist/core/rules/mainland-terms.d.ts +3 -1
- package/dist/core/rules/mainland-terms.d.ts.map +1 -1
- package/dist/core/rules/mainland-terms.js +25 -4
- package/dist/core/rules/mainland-terms.js.map +1 -1
- package/dist/dictionaries/academic.json +242 -22
- package/dist/dictionaries/ai-emerging-tech.json +3209 -0
- package/dist/dictionaries/business-finance.json +3449 -0
- package/dist/dictionaries/core.json +2902 -248
- package/dist/dictionaries/hardware-3c.json +2649 -0
- package/dist/dictionaries/index.json +70 -8
- package/dist/dictionaries/network-cloud.json +2953 -0
- package/dist/dictionaries/operating-system.json +2889 -0
- package/dist/dictionaries/social-media.json +2833 -0
- package/dist/dictionaries/software-development.json +3809 -0
- package/dist/dictionaries/user-interface.json +3225 -0
- package/dist/formatters/stylish.d.ts.map +1 -1
- package/dist/formatters/stylish.js +5 -15
- package/dist/formatters/stylish.js.map +1 -1
- package/dist/types.d.ts +20 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/error-utils.d.ts +9 -0
- package/dist/utils/error-utils.d.ts.map +1 -0
- package/dist/utils/error-utils.js +15 -0
- package/dist/utils/error-utils.js.map +1 -0
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,81 +1,141 @@
|
|
|
1
1
|
# TWLint
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**關於 TWLint **
|
|
4
4
|
|
|
5
|
-
TWLint
|
|
5
|
+
目前各大 LLM 訓練語料裡面繁體中文資料的比例非常的少,透過 LLM 產生的各種內容會混雜不同版本的中文,TWLint 目的在幫助開發者統一專案中文件中文字,確保使用台灣繁體中文和用語。
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## ✨ 核心特色
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
- **靈活配置**:支援專案級配置檔案
|
|
9
|
+
### 統一中文用法
|
|
10
|
+
- **簡體字清除**:自動檢測並轉換所有簡體字為繁體字
|
|
11
|
+
- **大陸用語替換**:識別並建議台灣本土用語替代方案
|
|
12
|
+
- **技術詞彙本土化**:軟件→軟體、網絡→網路、用戶→使用者
|
|
14
13
|
|
|
15
|
-
|
|
14
|
+
### 檢索引擎
|
|
15
|
+
- **語境偵測**:根據上下文精確識別同形異義詞
|
|
16
|
+
- **領域專門詞庫**:1,062+ 詞目涵蓋 AI、軟體開發、商業金融等
|
|
17
|
+
- **程式碼檢查**:支援註解、字串、UI 文字等程式碼中的中文內容
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
### 🛠️ 開發者友善
|
|
20
|
+
- **ESLint 風格**:預設檢查,`--fix` 修復,完美整合開發流程
|
|
21
|
+
- **遵循 .gitignore**:智慧跳過不需要的檔案和目錄
|
|
22
|
+
- **多種輸出格式**:stylish、json 格式滿足不同需求
|
|
23
|
+
- **npm script 整合**:像使用 ESLint 一樣簡單
|
|
20
24
|
|
|
21
|
-
## 快速開始
|
|
25
|
+
## 🚀 快速開始
|
|
22
26
|
|
|
23
|
-
###
|
|
27
|
+
### 全域安裝
|
|
24
28
|
```bash
|
|
25
|
-
|
|
26
|
-
twlint check "src/**/*.md"
|
|
29
|
+
npm install -g @termdock/twlint
|
|
27
30
|
```
|
|
28
31
|
|
|
29
|
-
###
|
|
32
|
+
### 基本使用
|
|
30
33
|
```bash
|
|
34
|
+
# 檢查文件(ESLint 風格:預設只檢查不修復)
|
|
35
|
+
twlint check README.md
|
|
36
|
+
twlint check "docs/**/*.md"
|
|
37
|
+
|
|
38
|
+
# 自動修復(需要明確指定 --fix)
|
|
31
39
|
twlint check README.md --fix
|
|
40
|
+
|
|
41
|
+
# 檢查程式碼中的中文(註解、字串等)
|
|
42
|
+
twlint check "src/**/*.{js,ts,jsx,tsx,vue}"
|
|
43
|
+
|
|
44
|
+
# 初始化專案配置
|
|
45
|
+
twlint init
|
|
32
46
|
```
|
|
33
47
|
|
|
34
|
-
###
|
|
48
|
+
### 整合到專案(推薦)
|
|
35
49
|
```bash
|
|
50
|
+
# 1. 初始化配置檔案
|
|
36
51
|
twlint init
|
|
52
|
+
|
|
53
|
+
# 2. 按提示加入 package.json scripts
|
|
54
|
+
{
|
|
55
|
+
"scripts": {
|
|
56
|
+
"twlint": "twlint check **/*.md **/*.txt",
|
|
57
|
+
"twlint:fix": "twlint check **/*.md **/*.txt --fix",
|
|
58
|
+
"twlint:code": "twlint check 'src/**/*.{js,ts,jsx,tsx,vue}'",
|
|
59
|
+
"twlint:all": "twlint check **/*.md **/*.txt 'src/**/*.{js,ts,jsx,tsx,vue}'"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
# 3. 簡易的使用方式
|
|
64
|
+
npm run twlint # 檢查文件
|
|
65
|
+
npm run twlint:fix # 檢查並修復文件
|
|
66
|
+
npm run twlint:all # 檢查所有檔案
|
|
37
67
|
```
|
|
38
68
|
|
|
39
|
-
##
|
|
69
|
+
## Demo
|
|
40
70
|
|
|
41
|
-
|
|
71
|
+
### 文件檢查範例
|
|
72
|
+
假設有以下包含大陸用語的檔案:
|
|
42
73
|
```markdown
|
|
43
|
-
#
|
|
74
|
+
# 软件开发项目
|
|
44
75
|
这个软件的质量很好,我们使用了先进的算法。
|
|
45
76
|
```
|
|
46
77
|
|
|
47
|
-
|
|
78
|
+
**第一步:檢查問題(ESLint 風格:預設只檢查)**
|
|
48
79
|
```bash
|
|
49
80
|
$ twlint check example.md
|
|
50
81
|
|
|
51
82
|
example.md
|
|
52
|
-
1:3 error 簡體字 '
|
|
53
|
-
1:
|
|
54
|
-
1:
|
|
55
|
-
1
|
|
56
|
-
2:
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
2:
|
|
60
|
-
|
|
61
|
-
2:3 warning 大陸用語 '軟件' 建議使用臺灣用語 '軟體' mainland-terms
|
|
62
|
-
2:7 warning 大陸用語 '質量' 建議使用臺灣用語 '品質' mainland-terms
|
|
63
|
-
2:18 warning 大陸用語 '算法' 建議使用臺灣用語 '演算法' mainland-terms
|
|
83
|
+
1:3 ✖ error 簡體字 '软' 建議使用繁體字 '軟' simplified-chars
|
|
84
|
+
1:6 ✖ error 簡體字 '开' 建議使用繁體字 '開' simplified-chars
|
|
85
|
+
1:8 ✖ error 簡體字 '项' 建議使用繁體字 '項' simplified-chars
|
|
86
|
+
2:1 ✖ error 簡體字 '这' 建議使用繁體字 '這' simplified-chars
|
|
87
|
+
2:2 ✖ error 簡體字 '个' 建議使用繁體字 '個' simplified-chars
|
|
88
|
+
1:3 ⚠ warning 大陸用語 '軟件' 建議使用臺灣用語 '軟體' mainland-terms
|
|
89
|
+
1:8 ⚠ warning 大陸用語 '項目' 建議使用臺灣用語 '專案' mainland-terms
|
|
90
|
+
2:7 ⚠ warning 大陸用語 '質量' 建議使用臺灣用語 '品質' mainland-terms
|
|
91
|
+
2:18 ⚠ warning 大陸用語 '算法' 建議使用臺灣用語 '演算法' mainland-terms
|
|
64
92
|
|
|
65
93
|
✖ 12 problems (8 errors, 4 warnings)
|
|
94
|
+
|
|
66
95
|
12 problems potentially fixable with the `--fix` option.
|
|
67
96
|
```
|
|
68
97
|
|
|
69
|
-
|
|
98
|
+
**第二步:自動修復(明確使用 --fix)**
|
|
70
99
|
```bash
|
|
71
100
|
$ twlint check example.md --fix
|
|
72
101
|
|
|
73
|
-
|
|
102
|
+
🎉 Fixed 1 file(s)
|
|
103
|
+
|
|
104
|
+
--- Remaining issues after fix ---
|
|
105
|
+
✓ No problems found!
|
|
106
|
+
```
|
|
74
107
|
|
|
75
|
-
|
|
108
|
+
**修復結果:完全台灣本土化**
|
|
109
|
+
```markdown
|
|
110
|
+
# 軟體開發專案
|
|
76
111
|
這個軟體的品質很好,我們使用了先進的演算法。
|
|
77
112
|
```
|
|
78
113
|
|
|
114
|
+
### 💻 程式碼檢查範例
|
|
115
|
+
對於程式碼中的註解和字串:
|
|
116
|
+
```javascript
|
|
117
|
+
/**
|
|
118
|
+
* 这个软件用于处理用户数据
|
|
119
|
+
*/
|
|
120
|
+
function processData(data) {
|
|
121
|
+
console.log("网络连接失败");
|
|
122
|
+
throw new Error("文件读取失败");
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
$ twlint check src/utils.js --fix
|
|
128
|
+
|
|
129
|
+
# 自動修復為台灣用語
|
|
130
|
+
/**
|
|
131
|
+
* 這個軟體用於處理使用者資料
|
|
132
|
+
*/
|
|
133
|
+
function processData(data) {
|
|
134
|
+
console.log("網路連線失敗");
|
|
135
|
+
throw new Error("檔案讀取失敗");
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
79
139
|
## 配置
|
|
80
140
|
|
|
81
141
|
### 專案配置檔案
|
|
@@ -88,8 +148,11 @@ export default [
|
|
|
88
148
|
// 檢查的檔案類型
|
|
89
149
|
files: ["**/*.md", "**/*.txt"],
|
|
90
150
|
|
|
91
|
-
//
|
|
92
|
-
|
|
151
|
+
// 使用的領域詞庫(新架構)
|
|
152
|
+
domains: ["software-development", "user-interface"],
|
|
153
|
+
|
|
154
|
+
// 或使用舊的詞庫配置(向後相容)
|
|
155
|
+
// dictionaries: ["core", "academic"],
|
|
93
156
|
|
|
94
157
|
// 規則配置
|
|
95
158
|
rules: {
|
|
@@ -106,23 +169,59 @@ export default [
|
|
|
106
169
|
twlint check <files...> [options]
|
|
107
170
|
|
|
108
171
|
Options:
|
|
109
|
-
--fix
|
|
172
|
+
--fix 自動修復可修復的問題(僅安全修復)
|
|
110
173
|
--format <type> 輸出格式 (stylish, json)
|
|
111
|
-
--
|
|
174
|
+
--domains <names...> 指定使用的領域詞庫(推薦)
|
|
175
|
+
--dict <names...> 指定使用的詞庫(向後相容)
|
|
112
176
|
--config <path> 配置檔案路徑
|
|
113
177
|
--verbose 顯示詳細輸出
|
|
114
178
|
--deep 深度模式(載入所有詞庫)
|
|
115
179
|
```
|
|
116
180
|
|
|
117
|
-
##
|
|
181
|
+
## 詞庫架構
|
|
118
182
|
|
|
119
|
-
|
|
183
|
+
### 領域專門詞庫(新架構)
|
|
120
184
|
|
|
121
|
-
|
|
185
|
+
TWLint 採用領域導向的詞庫架構,提供更精確的用語檢測:
|
|
186
|
+
|
|
187
|
+
| 領域 | 描述 | 詞目數量 |
|
|
188
|
+
|------|------|----------|
|
|
189
|
+
| core | 核心詞庫(必載) | 150 |
|
|
190
|
+
| software-development | 軟體開發 | 139 |
|
|
191
|
+
| user-interface | 使用者介面 | 119 |
|
|
192
|
+
| network-cloud | 網路雲端 | 113 |
|
|
193
|
+
| social-media | 社群媒體 | 106 |
|
|
194
|
+
| operating-system | 作業系統 | 101 |
|
|
195
|
+
| hardware-3c | 硬體3C | 91 |
|
|
196
|
+
| business-finance | 商業金融 | 123 |
|
|
197
|
+
| ai-emerging-tech | AI新興技術 | 108 |
|
|
198
|
+
|
|
199
|
+
### 配置範例
|
|
200
|
+
|
|
201
|
+
**領域專門配置**(推薦):
|
|
202
|
+
```bash
|
|
203
|
+
# 軟體開發專案
|
|
204
|
+
twlint check src/ --domains software-development user-interface
|
|
205
|
+
|
|
206
|
+
# 商業文件
|
|
207
|
+
twlint check docs/ --domains business-finance
|
|
208
|
+
|
|
209
|
+
# AI 技術文檔
|
|
210
|
+
twlint check papers/ --domains ai-emerging-tech network-cloud
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**深度掃描**(載入所有詞庫):
|
|
214
|
+
```bash
|
|
215
|
+
twlint check README.md --deep
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### 傳統詞庫(向後相容)
|
|
219
|
+
|
|
220
|
+
仍支援舊的詞庫配置方式:
|
|
221
|
+
- **core**:核心技術用語
|
|
122
222
|
- **academic**:學術用語
|
|
123
223
|
- **extended**:擴充功能用語集
|
|
124
224
|
|
|
125
|
-
使用特定詞庫:
|
|
126
225
|
```bash
|
|
127
226
|
twlint check file.md --dict core academic
|
|
128
227
|
```
|
|
@@ -135,7 +234,7 @@ twlint check file.md --dict core academic
|
|
|
135
234
|
|
|
136
235
|
### 本機開發
|
|
137
236
|
```bash
|
|
138
|
-
git clone https://github.com/
|
|
237
|
+
git clone https://github.com/HCYT/twlint.git
|
|
139
238
|
cd twlint
|
|
140
239
|
npm install
|
|
141
240
|
npm run build
|
|
@@ -153,33 +252,47 @@ npm run dict:validate
|
|
|
153
252
|
### simplified-chars
|
|
154
253
|
檢測簡體字並自動轉換為繁體字。
|
|
155
254
|
- **嚴重度**:error
|
|
156
|
-
-
|
|
255
|
+
- **可修復**:是(完全自動)
|
|
157
256
|
|
|
158
257
|
### mainland-terms
|
|
159
258
|
檢測大陸特有用語並建議臺灣慣用詞彙。
|
|
160
|
-
- **嚴重度**:warning
|
|
161
|
-
-
|
|
259
|
+
- **嚴重度**:warning(安全修復)/ info(需人工判斷)
|
|
260
|
+
- **可修復**:智慧分級修復
|
|
162
261
|
|
|
163
|
-
##
|
|
262
|
+
## 進階功能
|
|
164
263
|
|
|
165
|
-
|
|
264
|
+
### 語境感知檢測
|
|
166
265
|
|
|
167
|
-
|
|
266
|
+
TWLint 支援根據上下文精確檢測同形異義詞:
|
|
168
267
|
|
|
169
|
-
|
|
268
|
+
```javascript
|
|
269
|
+
// 範例:「質量」的語境檢測
|
|
270
|
+
{
|
|
271
|
+
taiwan: "品質", // 商業語境下的建議
|
|
272
|
+
china_simplified: "质量",
|
|
273
|
+
match_type: "context_sensitive",
|
|
274
|
+
context: {
|
|
275
|
+
before: ["產品", "服務", "商品"],
|
|
276
|
+
after: ["控制", "管理", "標準"],
|
|
277
|
+
exclude: ["物理"] // 排除物理學語境
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
```
|
|
170
281
|
|
|
171
|
-
|
|
282
|
+
### 自動修復分級
|
|
172
283
|
|
|
173
|
-
|
|
284
|
+
- **安全修復**(`autofix_safe: true`):確定無誤的用詞替換
|
|
285
|
+
- 例:「軟件」→「軟體」、「網絡」→「網路」
|
|
286
|
+
- 自動執行 `--fix` 時會修復
|
|
174
287
|
|
|
175
|
-
|
|
288
|
+
- **建議修復**(`autofix_safe: false`):需人工確認的替換
|
|
289
|
+
- 例:語境敏感詞、專業術語
|
|
290
|
+
- 僅提供建議,不會自動修復
|
|
176
291
|
|
|
177
|
-
|
|
178
|
-
2. 建立功能分支 (`git checkout -b feature/amazing-feature`)
|
|
179
|
-
3. 提交變更 (`git commit -m 'Add amazing feature'`)
|
|
180
|
-
4. 推送到分支 (`git push origin feature/amazing-feature`)
|
|
181
|
-
5. 開啟 Pull Request
|
|
292
|
+
## 授權
|
|
182
293
|
|
|
183
|
-
|
|
294
|
+
Apache License 2.0
|
|
295
|
+
|
|
296
|
+
詳見 [LICENSE](LICENSE) 檔案。
|
|
184
297
|
|
|
185
|
-
|
|
298
|
+
**讓我們一起維護臺灣繁體中文的純正性!**
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAYA,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB"}
|
package/dist/cli.js
CHANGED
|
@@ -7,7 +7,13 @@ import { loadConfig } from './core/config-loader.js';
|
|
|
7
7
|
import { createSampleConfig } from './core/config-schema.js';
|
|
8
8
|
import { StylishFormatter } from './formatters/stylish.js';
|
|
9
9
|
import { JsonFormatter } from './formatters/json.js';
|
|
10
|
+
import { formatError } from './utils/error-utils.js';
|
|
10
11
|
async function performCheck(linter, files, options) {
|
|
12
|
+
// 檢查是否找到任何檔案
|
|
13
|
+
if (files.length === 0) {
|
|
14
|
+
console.error(chalk.red('✖ No files found matching the pattern.'));
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
11
17
|
const results = await linter.lintFiles(files);
|
|
12
18
|
const formatter = options.format === 'json'
|
|
13
19
|
? new JsonFormatter()
|
|
@@ -15,9 +21,22 @@ async function performCheck(linter, files, options) {
|
|
|
15
21
|
const output = formatter.format(results);
|
|
16
22
|
console.log(output);
|
|
17
23
|
const errorCount = results.reduce((sum, result) => sum + result.messages.filter(msg => msg.severity === 'error').length, 0);
|
|
18
|
-
|
|
24
|
+
const warningCount = results.reduce((sum, result) => sum + result.messages.filter(msg => msg.severity === 'warning').length, 0);
|
|
25
|
+
const fixableCount = results.reduce((sum, result) => sum + result.messages.filter(msg => msg.fixable !== false).length, 0);
|
|
26
|
+
// 檢查是否所有檔案都載入失敗
|
|
27
|
+
const fileReadErrors = results.filter(result => result.messages.some(msg => msg.rule === 'file-read-error'));
|
|
28
|
+
if (fileReadErrors.length === results.length && results.length > 0) {
|
|
29
|
+
// 在顯示詳細錯誤後,再顯示匯總錯誤訊息
|
|
30
|
+
console.error(chalk.red('✖ Failed to read any of the specified files.'));
|
|
19
31
|
process.exit(1);
|
|
20
32
|
}
|
|
33
|
+
// ESLint 風格的修復提示(僅在非 JSON 格式時顯示)
|
|
34
|
+
if (errorCount > 0 || warningCount > 0) {
|
|
35
|
+
if (fixableCount > 0 && options.format !== 'json') {
|
|
36
|
+
console.log(chalk.yellow(`\n ${fixableCount} problem${fixableCount === 1 ? '' : 's'} potentially fixable with the \`--fix\` option.`));
|
|
37
|
+
}
|
|
38
|
+
process.exit(errorCount > 0 ? 1 : 0);
|
|
39
|
+
}
|
|
21
40
|
}
|
|
22
41
|
async function performAutoFix(linter, files, options) {
|
|
23
42
|
const { readFile } = await import('fs/promises');
|
|
@@ -38,8 +57,7 @@ async function performAutoFix(linter, files, options) {
|
|
|
38
57
|
}
|
|
39
58
|
}
|
|
40
59
|
catch (error) {
|
|
41
|
-
|
|
42
|
-
console.error(chalk.red(`✗ Error fixing ${filePath}:`), message);
|
|
60
|
+
console.error(chalk.red(`✗ Error fixing ${filePath}:`), formatError(error));
|
|
43
61
|
}
|
|
44
62
|
}
|
|
45
63
|
console.log(chalk.green(`\n🎉 Fixed ${totalFixed} file(s)`));
|
|
@@ -67,7 +85,31 @@ async function performInit(force) {
|
|
|
67
85
|
const configContent = createSampleConfig();
|
|
68
86
|
await writeFile(configFile, configContent, 'utf-8');
|
|
69
87
|
console.log(chalk.green(`✅ Created ${configFile}`));
|
|
70
|
-
|
|
88
|
+
// 檢查是否有 package.json,提供 npm script 整合建議
|
|
89
|
+
try {
|
|
90
|
+
await access('package.json');
|
|
91
|
+
console.log(chalk.dim('\n📦 Detected package.json - Add these scripts for better integration:'));
|
|
92
|
+
console.log(chalk.cyan(`
|
|
93
|
+
{
|
|
94
|
+
"scripts": {
|
|
95
|
+
"twlint": "twlint check **/*.md **/*.txt",
|
|
96
|
+
"twlint:fix": "twlint check **/*.md **/*.txt --fix",
|
|
97
|
+
"twlint:code": "twlint check 'src/**/*.{js,ts,jsx,tsx,vue}'",
|
|
98
|
+
"twlint:all": "twlint check **/*.md **/*.txt 'src/**/*.{js,ts,jsx,tsx,vue}'",
|
|
99
|
+
"twlint:all:fix": "twlint check **/*.md **/*.txt 'src/**/*.{js,ts,jsx,tsx,vue}' --fix"
|
|
100
|
+
}
|
|
101
|
+
}`));
|
|
102
|
+
console.log(chalk.dim('Then run:'));
|
|
103
|
+
console.log(chalk.dim('• npm run twlint # 檢查文件'));
|
|
104
|
+
console.log(chalk.dim('• npm run twlint:fix # 檢查並修復文件'));
|
|
105
|
+
console.log(chalk.dim('• npm run twlint:code # 檢查程式碼中的中文'));
|
|
106
|
+
console.log(chalk.dim('• npm run twlint:all # 檢查所有檔案'));
|
|
107
|
+
console.log(chalk.dim('• npm run twlint:all:fix # 檢查並修復所有檔案'));
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// 沒有 package.json,顯示一般指引
|
|
111
|
+
}
|
|
112
|
+
console.log(chalk.dim('\n🚀 Next steps:'));
|
|
71
113
|
console.log(chalk.dim('1. Customize the configuration to fit your needs'));
|
|
72
114
|
console.log(chalk.dim('2. Run: twlint check **/*.md'));
|
|
73
115
|
console.log(chalk.dim('3. Use --fix to automatically fix issues'));
|
|
@@ -109,8 +151,7 @@ async function main() {
|
|
|
109
151
|
}
|
|
110
152
|
}
|
|
111
153
|
catch (error) {
|
|
112
|
-
|
|
113
|
-
console.error(chalk.red('Error:'), message);
|
|
154
|
+
console.error(chalk.red('Error:'), formatError(error));
|
|
114
155
|
process.exit(1);
|
|
115
156
|
}
|
|
116
157
|
});
|
|
@@ -123,8 +164,7 @@ async function main() {
|
|
|
123
164
|
await performInit(options.force);
|
|
124
165
|
}
|
|
125
166
|
catch (error) {
|
|
126
|
-
|
|
127
|
-
console.error(chalk.red('Error:'), message);
|
|
167
|
+
console.error(chalk.red('Error:'), formatError(error));
|
|
128
168
|
process.exit(1);
|
|
129
169
|
}
|
|
130
170
|
});
|
|
@@ -134,8 +174,7 @@ async function main() {
|
|
|
134
174
|
if (import.meta.url === `file://${process.argv[1]}` ||
|
|
135
175
|
process.argv[1]?.endsWith('cli.js')) {
|
|
136
176
|
main().catch(error => {
|
|
137
|
-
|
|
138
|
-
console.error(chalk.red('Fatal error:'), message);
|
|
177
|
+
console.error(chalk.red('Fatal error:'), formatError(error));
|
|
139
178
|
process.exit(1);
|
|
140
179
|
});
|
|
141
180
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAWpD,KAAK,UAAU,YAAY,CAAC,MAAgB,EAAE,KAAe,EAAE,OAAmB;IAChF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAE7C,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,KAAK,MAAM;QACzC,CAAC,CAAC,IAAI,aAAa,EAAE;QACrB,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAA;IAE1B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAEnB,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAChD,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,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;
|
|
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"}
|
|
@@ -31,6 +31,7 @@ function mergeConfig(defaultConfig, userConfig) {
|
|
|
31
31
|
return {
|
|
32
32
|
files: userConfig.files || defaultConfig.files,
|
|
33
33
|
dictionaries: userConfig.dictionaries || defaultConfig.dictionaries,
|
|
34
|
+
domains: userConfig.domains || defaultConfig.domains, // 保留 domains 配置
|
|
34
35
|
rules: {
|
|
35
36
|
...defaultConfig.rules,
|
|
36
37
|
...userConfig.rules
|
|
@@ -43,22 +44,47 @@ export function createSampleConfig() {
|
|
|
43
44
|
|
|
44
45
|
export default [
|
|
45
46
|
{
|
|
46
|
-
//
|
|
47
|
+
// 文件檔案:完整檢查
|
|
47
48
|
files: ["**/*.md", "**/*.txt"],
|
|
48
|
-
|
|
49
|
-
// 使用的詞庫
|
|
50
|
-
dictionaries: ["core"],
|
|
51
|
-
|
|
52
|
-
// 規則配置
|
|
49
|
+
domains: ["software-development", "user-interface"],
|
|
53
50
|
rules: {
|
|
54
51
|
"simplified-chars": "error", // 簡體字檢測(自動修復)
|
|
55
52
|
"mainland-terms": "warning" // 大陸用語檢測(提供建議)
|
|
56
53
|
}
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
// 程式碼檔案:檢查註解和字串內容
|
|
57
|
+
files: ["src/**/*.{js,ts,jsx,tsx,vue}"],
|
|
58
|
+
domains: ["software-development", "user-interface"],
|
|
59
|
+
rules: {
|
|
60
|
+
"simplified-chars": "error", // 註解中的簡體字必須修復
|
|
61
|
+
"mainland-terms": "warning" // UI 文字中的大陸用語提醒
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
// 商業文件:更嚴格的檢查
|
|
66
|
+
files: ["docs/business/**/*.md"],
|
|
67
|
+
domains: ["business-finance"],
|
|
68
|
+
rules: {
|
|
69
|
+
"simplified-chars": "error",
|
|
70
|
+
"mainland-terms": "error" // 商業文件更嚴格
|
|
71
|
+
}
|
|
57
72
|
}
|
|
58
73
|
]
|
|
59
74
|
|
|
60
75
|
// 使用方式:
|
|
61
76
|
// twlint check **/*.md // 檢查檔案
|
|
62
|
-
// twlint check **/*.md --fix //
|
|
77
|
+
// twlint check **/*.md --fix // 自動修復
|
|
78
|
+
// twlint check src/ --domains software-development // 指定領域
|
|
79
|
+
|
|
80
|
+
// 推薦 npm script 整合 (加入 package.json):
|
|
81
|
+
// {
|
|
82
|
+
// "scripts": {
|
|
83
|
+
// "twlint": "twlint check **/*.md",
|
|
84
|
+
// "twlint:fix": "twlint check **/*.md --fix",
|
|
85
|
+
// "twlint:docs": "twlint check docs/**/*.md --fix"
|
|
86
|
+
// }
|
|
87
|
+
// }
|
|
88
|
+
// 然後執行: npm run twlint`;
|
|
63
89
|
}
|
|
64
90
|
//# sourceMappingURL=config-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/core/config-schema.ts"],"names":[],"mappings":"AAAA,qBAAqB;
|
|
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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 詞庫載入策略 - 消除 linter.ts 中的特殊情況處理
|
|
3
|
+
*/
|
|
4
|
+
import type { TWLintConfig } from '../types.js';
|
|
5
|
+
import type { DictionaryManager } from './dictionary-manager.js';
|
|
6
|
+
export interface DictLoadStrategy {
|
|
7
|
+
getDictionaries(config: TWLintConfig, manager: DictionaryManager): Promise<string[]>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 基本策略:只載入核心詞庫
|
|
11
|
+
*/
|
|
12
|
+
export declare class CoreDictStrategy implements DictLoadStrategy {
|
|
13
|
+
getDictionaries(): Promise<string[]>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 自訂詞庫策略:載入用戶指定的詞庫
|
|
17
|
+
*/
|
|
18
|
+
export declare class CustomDictStrategy implements DictLoadStrategy {
|
|
19
|
+
private dictionaries;
|
|
20
|
+
constructor(dictionaries: string[]);
|
|
21
|
+
getDictionaries(): Promise<string[]>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 領域策略:載入指定領域的詞庫(包含核心詞庫)
|
|
25
|
+
*/
|
|
26
|
+
export declare class DomainDictStrategy implements DictLoadStrategy {
|
|
27
|
+
private domains;
|
|
28
|
+
constructor(domains: string[]);
|
|
29
|
+
getDictionaries(): Promise<string[]>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 深度策略:載入所有可用詞庫
|
|
33
|
+
*/
|
|
34
|
+
export declare class DeepDictStrategy implements DictLoadStrategy {
|
|
35
|
+
private baseStrategy;
|
|
36
|
+
constructor(baseStrategy: DictLoadStrategy);
|
|
37
|
+
getDictionaries(config: TWLintConfig, manager: DictionaryManager): Promise<string[]>;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 策略工廠:根據配置選擇適當的策略
|
|
41
|
+
*/
|
|
42
|
+
export declare class DictLoadStrategyFactory {
|
|
43
|
+
static create(config: TWLintConfig, deep?: boolean): DictLoadStrategy;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=dictionary-loading-strategies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dictionary-loading-strategies.d.ts","sourceRoot":"","sources":["../../src/core/dictionary-loading-strategies.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CACrF;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,gBAAgB;IACjD,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAG3C;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,gBAAgB;IAC7C,OAAO,CAAC,YAAY;gBAAZ,YAAY,EAAE,MAAM,EAAE;IAEpC,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAG3C;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,gBAAgB;IAC7C,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM,EAAE;IAE/B,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAO3C;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,gBAAgB;IAC3C,OAAO,CAAC,YAAY;gBAAZ,YAAY,EAAE,gBAAgB;IAE5C,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAK3F;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAClC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,gBAAgB;CAiBtE"}
|