aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/content/docs/textlint-guide.mdx
blob: b33f5cbf5ccf619b98896c43eb2dd799192a7c30 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
---
title: textlintではじめる日本語文章校正 — Zedでも動くLSPサーバーを作りました
description: 日本語の文章をリアルタイムで校正するtextlintを、Zedエディタで使えるようにするLSPサーバーを自作しました。導入方法からルール設定、自動修正、無効化までを解説します。
draft: true
---

## 作った理由

日本語の文章を書くとき、表記ゆれや誤字脱字のチェックに [textlint](https://textlint.github.io/) が便利です。しかし、愛用している [Zed](https://zed.dev/) エディタに拡張機能がなかったので、LSPサーバーを自作しました。

## 2つのプログラム

| 名前 | 役割 | 公開予定 |
|---|---|---|
| `textlint-lsp` | LSPサーバー本体。Node.jsで動作。どのエディタでも使える | npm に公開予定 |
| `zed-textlint` | Zed拡張機能。`textlint-lsp` を起動する | [zed-industries/extensions](https://github.com/zed-industries/extensions) にPR予定 |

LSPサーバーは汎用なので、VSCodeやNeovimなどほかのエディタでも動きます。

## できること

- 文字入力のたびに自動校正(結果はキャッシュされるので高速)
- 波線で問題箇所を表示
- `Ctrl+.` で修正候補を表示・適用
- ルール単位の無効化(行単位/全ルール)
- `prh.yml` による独自の表記ルール定義

## 導入方法

### 1. textlint-lsp をインストール

```bash
npm install -g textlint-lsp
```

### 2. プロジェクトにtextlintをセットアップ

```bash
npm install --save-dev textlint @textlint/markdown
npm install --save-dev @textlint-ja/no-synonyms prh
```

`.textlintrc.json` を作成:

```json
{
  "plugins": { "@textlint/markdown": true },
  "rules": {
    "@textlint-ja/no-synonyms": true,
    "prh": { "rulePaths": ["prh.yml"] }
  }
}
```

### 3. Zed拡張機能をインストール

1. [zed-textlint.zip](/zed-textlint.zip) をダウンロードして展開
2. Zedで `Ctrl+Shift+P` → `zed: install dev extension` を実行
3. 展開した `zed-textlint` フォルダを指定

導入後、`.md` または `.mdx` ファイルを開くと自動的にlintが走ります。

## コードアクション(自動修正)

波線の上で `Ctrl+.` を押すと、次の操作が選べます。

| アクション | 内容 |
|---|---|
| 修正を適用 | textlintの自動修正候補を適用 |
| 無効化:(ルール名) | その行だけ指定ルールを無効化 |
| 無効化: すべてのルール | その行以降の全ルールを無効化 |

## 無効化コメント

`.md` ファイルではHTMLコメント形式で記述します。

- `<!-- textlint-disable prh -->` で無効化
- `<!-- textlint-enable prh -->` で再有効化

`.mdx` ファイル(Starlight / Astro)では、MDXの構文制約のため、`{/* */}` で囲みます。

- `{/* <!-- textlint-disable prh --> */}` で無効化
- `{/* <!-- textlint-enable prh --> */}` で再有効化

:::note
##### 📝 MDXでの注意点
Zedのコードアクションから自動挿入されるので、普段は手動で書く必要はありません。
:::

## 公開について

### `textlint-lsp`(LSPサーバー)

npmで公開済みです。`npm install -g textlint-lsp` でインストール可能です。

### `zed-textlint`(Zed拡張機能)

[zed-textlint.zip](/zed-textlint.zip) をダウンロードし、Zedの Dev Extension としてインストールしてください。

## トラブルシューティング

### MDXファイルで `{ }` がエラーになる

Mermaid図の `{{ }}` がMDXパーサにJSX式と誤認されることがあります。`{{` を `(` に置き換えてください。

### lintが遅い

初回のlintには数秒かかりますが、結果はキャッシュされるため2回目以降は高速です。