mmdfmt 0.1.0 → 0.2.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.
- package/README.ja.md +395 -40
- package/README.md +322 -40
- package/lib/cli.d.mts +1 -0
- package/lib/cli.mjs +127 -488
- package/lib/format-file-DSbEElSV.mjs +545 -0
- package/lib/index.d.mts +72 -0
- package/lib/index.mjs +22 -0
- package/package.json +7 -4
package/README.ja.md
CHANGED
|
@@ -12,7 +12,7 @@ Markdown ファイルのほかの部分は、1 バイトも変えません。
|
|
|
12
12
|
Prettier の Mermaid プラグインである
|
|
13
13
|
[`prettier-plugin-mmd`](../prettier-plugin-mmd) を使って
|
|
14
14
|
[Prettier](https://prettier.io/) で整形するため、
|
|
15
|
-
[Prettier を知っている方へ](#prettier-を知っている方へ)
|
|
15
|
+
[Prettier を知っている方へ](#prettier-を知っている方へ)の場合を除き、
|
|
16
16
|
プラグインと同じ結果になります。
|
|
17
17
|
|
|
18
18
|
[mermaid-js](https://mermaid.js.org/) とは関係のない第三者のプロジェクトです。
|
|
@@ -113,33 +113,46 @@ npm install --global mmdfmt
|
|
|
113
113
|
## 使い方
|
|
114
114
|
|
|
115
115
|
```sh
|
|
116
|
-
mmdfmt --write <pattern>...
|
|
116
|
+
mmdfmt --write [--check | --list-different] <pattern>...
|
|
117
117
|
mmdfmt --check <pattern>...
|
|
118
|
+
mmdfmt --list-different <pattern>...
|
|
118
119
|
mmdfmt --stdin-filepath <path>
|
|
119
120
|
```
|
|
120
121
|
|
|
121
|
-
| オプション | 動作
|
|
122
|
-
| ------------------------- |
|
|
123
|
-
| `--write`
|
|
124
|
-
| `--check`
|
|
125
|
-
| `--
|
|
126
|
-
|
|
|
127
|
-
| `-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
`--
|
|
122
|
+
| オプション | 動作 |
|
|
123
|
+
| ------------------------- | ------------------------------------------------------------------------------ |
|
|
124
|
+
| `-w`, `--write` | ファイルを直接整形し、整形した各ファイルを所要時間とともに標準出力に挙げます。 |
|
|
125
|
+
| `-c`, `--check` | 整形済みか確認し、要約と整形されていないファイルを報告します。 |
|
|
126
|
+
| `-l`, `--list-different` | 何も変えず、`--write` が変えるファイルを標準出力に挙げます。 |
|
|
127
|
+
| `--stdin-filepath <path>` | 標準入力を `<path>` のファイルとして整形し、標準出力に書きます。 |
|
|
128
|
+
| `-h`, `--help` | 使い方を標準出力に書きます。 |
|
|
129
|
+
| `-v`, `--version` | バージョンを標準出力に書きます。 |
|
|
130
|
+
|
|
131
|
+
`--write`、`--check`、`--list-different` の少なくとも 1 つにパターンを付けます。
|
|
132
|
+
`--write` は `--check` か `--list-different` のどちらかと組み合わせられます。
|
|
133
|
+
`--write --check` はファイルを書き換え、チェックの要約と警告を出力します。
|
|
134
|
+
`--write --list-different` はファイルを書き換えて、変わったものだけを挙げます。
|
|
135
|
+
`--check` と `--list-different` は組み合わせられません。
|
|
136
|
+
`--no-write`、`--no-check`、`--no-list-different` は、そのオプションを外します。
|
|
137
|
+
`--stdin-filepath` はパターンを取らず、
|
|
138
|
+
一緒に使うと `--write` はファイルを書きません。
|
|
131
139
|
`--help` と `--version` は、
|
|
132
140
|
表のほかのオプションを一緒に付けても出力するだけです。
|
|
133
|
-
ほかの組み合わせはエラーです。
|
|
134
141
|
引数がまったくないときは、`mmdfmt` は使い方を標準エラー出力に書き、
|
|
135
142
|
`2` で終了します。
|
|
136
143
|
|
|
144
|
+
`--write` 単独では Prettier と同じく、整形したファイルごとに 1 行出力します。
|
|
145
|
+
その名前と整形にかかった時間を、`docs/flow.mmd 12ms` のように書き、
|
|
146
|
+
変わらなかったファイルには、その後ろに `(unchanged)` を付けます。
|
|
147
|
+
色を出せる端末では、変わらなかったファイルの名前は灰色です。
|
|
148
|
+
変わったファイルだけを挙げるには、`--write --list-different` を付けます。
|
|
149
|
+
`mmdfmt` が出力するファイルの名前は、実行するディレクトリからの相対パスで、
|
|
150
|
+
Windows でも Prettier と同じく、区切りは `/` です。
|
|
151
|
+
|
|
137
152
|
ほかのオプションはありません。
|
|
138
153
|
整形オプションも、独自の設定ファイルも、
|
|
139
154
|
無視ファイルを指定するオプションもありません。
|
|
140
|
-
|
|
141
|
-
引数のライブラリ [gunshi](https://gunshi.dev) の読み方に従い、
|
|
142
|
-
`=` の後ろの値を無視します。
|
|
155
|
+
値を取らないオプションは、`=` の後ろの値を無視します。
|
|
143
156
|
`--write=false` は `--write` と同じに読みます。
|
|
144
157
|
|
|
145
158
|
`head` が必要な行数を読み終えたときのように、標準出力の読み手がいなくなると、
|
|
@@ -165,7 +178,7 @@ mmdfmt --stdin-filepath <path>
|
|
|
165
178
|
`.mermaid` で終わるものを、いくつのパターンが選んでも 1 回ずつ整形します。
|
|
166
179
|
そのどれも選ばないパターンはエラーです。
|
|
167
180
|
そのようなファイルのないプロジェクトでは `mmdfmt --check .` は失敗し、
|
|
168
|
-
|
|
181
|
+
ほかの拡張子のファイルを名前で指定しても同じです。
|
|
169
182
|
Prettier の CLI と同じく、
|
|
170
183
|
`!` のパターンによって選んだファイルがすべて取り除かれるパターンもエラーです。
|
|
171
184
|
`.gitignore` が挙げるファイルだけを選ぶパターンはエラーではありません。
|
|
@@ -213,11 +226,32 @@ CI で依存パッケージをインストールして(`npm ci`)、次を実
|
|
|
213
226
|
npx mmdfmt --check .
|
|
214
227
|
```
|
|
215
228
|
|
|
216
|
-
整形されていないファイルがあると、`--check` は標準出力に挙げ、`1` で終了します。
|
|
217
|
-
すべて整形済みなら、何も出力せず `0` で終了します。
|
|
218
229
|
依存パッケージをインストールしていないと、
|
|
219
230
|
`npx` は固定したバージョンではなく最新版を実行してしまいます。
|
|
220
231
|
|
|
232
|
+
`--check` は、`Checking formatting...` を標準出力に書き、
|
|
233
|
+
変わるファイルごとに `[warn] <name>` を標準エラー出力に書き、
|
|
234
|
+
最後に要約を 1 つ書きます。
|
|
235
|
+
変わるファイルがあれば、要約は標準エラー出力に書き、終了コードは `1` です。
|
|
236
|
+
|
|
237
|
+
```txt
|
|
238
|
+
[warn] Code style issues found in the above file. Run mmdfmt with --write to fix.
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
該当するファイルが複数なら、`in the above file` は `in <n> files` になります。
|
|
242
|
+
色を出せる端末では、`warn` の語は黄色です。
|
|
243
|
+
変わるファイルがなければ、
|
|
244
|
+
要約は標準出力の `All diagrams in the matched files use Prettier code style!`
|
|
245
|
+
で、終了コードは `0` です。
|
|
246
|
+
`--list-different` は、変わるファイルの名前だけを標準出力に書き、
|
|
247
|
+
終了コードは同じです。
|
|
248
|
+
|
|
249
|
+
`--write --check` では、ファイルを書き換え、
|
|
250
|
+
要約は `[warn] Code style issues fixed in the above file.` で、
|
|
251
|
+
複数なら末尾が `in <n> files.` になり、終了コードは `0` です。
|
|
252
|
+
エラーがあれば、終了コードは `2` です。
|
|
253
|
+
そのときの要約は、[エラーと終了コード](#エラーと終了コード)に書いてあります。
|
|
254
|
+
|
|
221
255
|
mermaid.js が拒否する図のある `.mmd` や `.mermaid` ファイルは、
|
|
222
256
|
`2` でチェックに失敗します。
|
|
223
257
|
Markdown 内の図を mermaid.js が拒否しても、警告にとどまります。
|
|
@@ -244,9 +278,9 @@ husky や simple-git-hooks などの Git フックマネージャーがコミッ
|
|
|
244
278
|
}
|
|
245
279
|
```
|
|
246
280
|
|
|
247
|
-
glob はこの 4
|
|
281
|
+
glob はこの 4 つの拡張子に限ってください。
|
|
248
282
|
`mmdfmt` には Prettier の `--ignore-unknown` のようなオプションはなく、
|
|
249
|
-
|
|
283
|
+
ほかの拡張子のファイルはエラーです。
|
|
250
284
|
lint-staged が渡す絶対パスを、`mmdfmt` は受け付けます。
|
|
251
285
|
|
|
252
286
|
## エディターやほかのツールから使う
|
|
@@ -262,7 +296,7 @@ mmdfmt --stdin-filepath docs/guide.md
|
|
|
262
296
|
|
|
263
297
|
そのパスのファイルは、読み書きしません。
|
|
264
298
|
相対パスは `mmdfmt` を実行するディレクトリを基準に解決します。
|
|
265
|
-
|
|
299
|
+
パスの拡張子がテキストを図として読むか Markdown として読むかを決め、
|
|
266
300
|
ディレクトリがどの `.editorconfig` と Prettier の設定を適用するかを決めます。
|
|
267
301
|
|
|
268
302
|
- Markdown のテキストは、整形したか、すでに整形済みかにかかわらず全体を出力し、
|
|
@@ -273,28 +307,230 @@ mmdfmt --stdin-filepath docs/guide.md
|
|
|
273
307
|
- `node_modules` やバージョン管理のディレクトリの下にあるパス、
|
|
274
308
|
または `mmdfmt` を実行するディレクトリの `.gitignore` が挙げるパスでは、
|
|
275
309
|
テキストをそのまま返します。
|
|
276
|
-
-
|
|
310
|
+
- `--check` や `--list-different` では、テキストを出力しません。
|
|
311
|
+
変わるなら、`--write` も付けたときを除き、標準出力に `(stdin)` を書き、
|
|
312
|
+
終了コードは `1` です。
|
|
313
|
+
それ以外は何も書かず、終了コードは `0` です。
|
|
314
|
+
警告の位置は、読んだときのテキストの中の位置です。
|
|
315
|
+
- ほかの拡張子のパスはエラーです。
|
|
316
|
+
|
|
317
|
+
## スクリプトから使う
|
|
318
|
+
|
|
319
|
+
エディターの拡張機能や言語サーバーなど、Node.js 向けに書かれたツールは、
|
|
320
|
+
`mmdfmt` コマンドを実行しなくても、
|
|
321
|
+
コマンドと同じようにファイルの図を整形できます。
|
|
322
|
+
Node.js 向けに書かれていないツールは、
|
|
323
|
+
[`--stdin-filepath`](#エディターやほかのツールから使う)を付けて、
|
|
324
|
+
コマンドを実行できます。
|
|
325
|
+
新しいバージョンでは図の整形が少し変わることがあるため、
|
|
326
|
+
ツールの依存パッケージに `mmdfmt` を追加するときは、
|
|
327
|
+
[インストール](#インストール)と同じようにバージョンを固定します。
|
|
277
328
|
|
|
278
|
-
|
|
329
|
+
```sh
|
|
330
|
+
npm install --save-exact mmdfmt
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Node.js `^22.13.0 || >=24` が必要です。
|
|
334
|
+
`mmdfmt` から、関数 `resolveConfig`、`format`、
|
|
335
|
+
`clearConfigCache` をインポートして使います。
|
|
336
|
+
引数と戻り値は Prettier の同じ名前の関数にそろえてあり、
|
|
337
|
+
違う点は関数ごとの節で説明します。
|
|
338
|
+
次の例は、`docs/notes.md` の図を整形します。
|
|
339
|
+
|
|
340
|
+
```js
|
|
341
|
+
import { readFile } from "node:fs/promises"
|
|
342
|
+
import { format, resolveConfig } from "mmdfmt"
|
|
343
|
+
|
|
344
|
+
const filepath = "docs/notes.md"
|
|
345
|
+
const source = await readFile(filepath, "utf8")
|
|
346
|
+
const config = await resolveConfig(filepath)
|
|
347
|
+
const formatted = await format(source, { ...config, filepath })
|
|
348
|
+
```
|
|
279
349
|
|
|
280
|
-
|
|
350
|
+
`formatted` には、
|
|
351
|
+
コマンドが `docs/notes.md` を整形して書き出すのと同じテキストが入ります。
|
|
352
|
+
図は整形され、ほかの部分は書かれたままです。
|
|
353
|
+
ファイルに書き込むかどうかは、ツールが決めます。
|
|
354
|
+
|
|
355
|
+
### `resolveConfig(fileUrlOrPath)`
|
|
356
|
+
|
|
357
|
+
`resolveConfig` は、
|
|
358
|
+
ファイルに適用される Prettier の設定ファイルと `.editorconfig` を、
|
|
359
|
+
コマンドと同じように `overrides` も含めて探します([設定](#設定)を参照)。
|
|
360
|
+
引数には、ファイルのパスかファイル URL を渡します。
|
|
361
|
+
相対パスは現在のディレクトリを基準に解決されるため、
|
|
362
|
+
言語サーバーでは絶対パスか URL を渡します。
|
|
363
|
+
ファイルそのものは読まないので、存在しないファイルのパスでもかまいません。
|
|
364
|
+
|
|
365
|
+
`resolveConfig` は Promise を返します。
|
|
366
|
+
ファイルに適用される設定があれば、
|
|
367
|
+
Promise は `format` に渡すオプションのオブジェクトで解決され、
|
|
368
|
+
なければ `null` で解決されます。
|
|
369
|
+
`null` を展開しても何も加わらないため、
|
|
370
|
+
`{ ...config, filepath }` はどちらの場合にも使えます。
|
|
371
|
+
オブジェクトが持つのは、`mmdfmt` が設定から読む 8 つのオプションのうち、
|
|
372
|
+
設定が指定しているものだけです。
|
|
373
|
+
8 つのオプションの一覧は、[設定](#設定)にあります。
|
|
374
|
+
たとえば、設定が `tabWidth` を指定していなければ、
|
|
375
|
+
`{ tabWidth: 4, ...config, filepath }` の `tabWidth` は 4 のままです。
|
|
376
|
+
TypeScript では、このオブジェクトの型は `ReadOptions` です。
|
|
377
|
+
設定ファイルを読めないときは、Promise は拒否されます。
|
|
378
|
+
|
|
379
|
+
`resolveConfig` は、コマンドと同じく `.editorconfig` も読みます。
|
|
380
|
+
Prettier の CLI も既定では読みますが、Prettier の `resolveConfig` が読むのは、
|
|
381
|
+
`editorconfig: true` を渡したときだけです。
|
|
382
|
+
|
|
383
|
+
### `clearConfigCache()`
|
|
384
|
+
|
|
385
|
+
`resolveConfig` は、Prettier の `resolveConfig` と同じく、
|
|
386
|
+
一度読んだ設定ファイルの内容をプロセスが終わるまで覚えています。
|
|
387
|
+
そのため、後で設定ファイルが変わっても、`resolveConfig` の結果は変わりません。
|
|
388
|
+
エディターのファイル監視などで、
|
|
389
|
+
Prettier の設定ファイルや `.editorconfig` が変わったことをツールが知ったときは、
|
|
390
|
+
`clearConfigCache` を呼び出します。
|
|
391
|
+
すると、次に `resolveConfig` を呼び出したときに、設定ファイルを読み直します。
|
|
392
|
+
`clearConfigCache` は、
|
|
393
|
+
覚えていた内容を消し終えたときに解決される Promise を返します。
|
|
394
|
+
|
|
395
|
+
### `format(source, options)`
|
|
396
|
+
|
|
397
|
+
`format` は、Prettier の `format` と同じようにテキストを整形します。
|
|
398
|
+
ただし Markdown では、Mermaid のコードブロックだけを整形し、
|
|
399
|
+
ほかは書かれたまま残します。
|
|
400
|
+
ファイルも設定も読みません。
|
|
401
|
+
|
|
402
|
+
- `source`: ファイルのテキスト。
|
|
403
|
+
- `options.filepath`: ファイルのパスで、必須です。
|
|
404
|
+
パスのうち使うのは拡張子だけで、
|
|
405
|
+
拡張子が `.mmd` か `.mermaid` ならテキストを 1 つの図として、
|
|
406
|
+
`.md` か `.markdown` なら Markdown として読みます。
|
|
407
|
+
ファイルは存在しなくてもかまいません。
|
|
408
|
+
- ほかのオプション: 同じパスについて `resolveConfig` が返したものを渡します。
|
|
409
|
+
設定の `overrides` は、パスによって適用されるかどうかが変わるためです。
|
|
410
|
+
使えるのは、[設定](#設定)に挙げた 8 つのオプションです。
|
|
411
|
+
Markdown では、`printWidth` はファイル全体の行の幅です。
|
|
412
|
+
リスト項目や引用の中の図は、その幅から、
|
|
413
|
+
図の各行の前にあるものの幅を引いた幅で整形します。
|
|
414
|
+
詳しくは、[コードブロックの詳細](#コードブロックの詳細)を参照してください。
|
|
415
|
+
- `filepath` とこの 8 つ以外のオプション(`parser`、`endOfLine`、
|
|
416
|
+
`semi` など)は、TypeScript では型エラーになり、JavaScript では無視されます。
|
|
417
|
+
TypeScript では、`format` のオプションの型は `FormatOptions` です。
|
|
418
|
+
|
|
419
|
+
`format` は、整形したテキストで解決される Promise を返します。
|
|
420
|
+
改行コードとバイトオーダーマークは、テキストに書かれたまま残ります。
|
|
421
|
+
詳しくは、[コードブロックの詳細](#コードブロックの詳細)を参照してください。
|
|
422
|
+
|
|
423
|
+
Markdown では、`format` は次の 3 種類のブロックを書かれたまま残し、
|
|
424
|
+
どれも報告しません。
|
|
425
|
+
|
|
426
|
+
- mermaid.js が拒否する図。
|
|
427
|
+
- インデントにあるタブの一部がインデント、残りが図と読まれるブロック。
|
|
428
|
+
- 開きフェンスが脚注のラベルの行にあるブロック。
|
|
429
|
+
|
|
430
|
+
後の 2 種類は、[コードブロックの詳細](#コードブロックの詳細)で説明しています。
|
|
431
|
+
Prettier も、整形できない埋め込みのコードブロックを同じように残します。
|
|
432
|
+
mermaid.js が拒否する図を見つけるには、
|
|
433
|
+
[`@mmd-toolkit/parser`](../parser) で解析するか、
|
|
434
|
+
[`@mmd-toolkit/eslint-plugin`](../eslint-plugin) でファイルを lint します。
|
|
435
|
+
|
|
436
|
+
Promise は、次のときに拒否されます。
|
|
437
|
+
|
|
438
|
+
- `.mmd` か `.mermaid` のテキストを mermaid.js が拒否するときは、
|
|
439
|
+
`SyntaxError` で拒否されます。
|
|
440
|
+
このエラーは、
|
|
441
|
+
Prettier が `prettier-plugin-mmd` でテキストを整形するときに投げるものです。
|
|
442
|
+
エラーの `loc.start` と `loc.end` は、
|
|
443
|
+
エラーの範囲の始まりと終わりを `line` と `column` で示します。
|
|
444
|
+
`line` と `column` は、どちらも 1 から数えます。
|
|
445
|
+
改行の位置のエラーのように、エラーの範囲が後の行の始まりまで続くときは、
|
|
446
|
+
`loc.end` はありません。
|
|
447
|
+
- オプションに Prettier が受け付けない値があるときは、
|
|
448
|
+
Prettier のエラーで拒否されます。
|
|
449
|
+
たとえば `printWidth: "wide"` なら、
|
|
450
|
+
エラーは `Invalid printWidth value. …` です。
|
|
451
|
+
`.mmd` か `.mermaid` のテキストでは、
|
|
452
|
+
mermaid.js が図を拒否するかどうかにかかわらず、そうなります。
|
|
453
|
+
Markdown のテキストでも、
|
|
454
|
+
`mmdfmt` が図を整形するコードブロックを 1 つでも持てば、
|
|
455
|
+
その図を mermaid.js が拒否するかどうかにかかわらず、そうなります。
|
|
456
|
+
どのブロックの図を整形するかは、
|
|
457
|
+
[コードブロックの詳細](#コードブロックの詳細) にあります。
|
|
458
|
+
そのようなブロックのない Markdown のテキストは、そのまま返します。
|
|
459
|
+
`mermaid` や `mmd` のコードブロックがないものと、
|
|
460
|
+
そのようなブロックがどれも書かれたまま残されるものです。
|
|
461
|
+
書かれたまま残されるのは、次のブロックです。
|
|
462
|
+
- `<!-- prettier-ignore -->` の後のブロック。
|
|
463
|
+
- `<!-- prettier-ignore-start -->` と、
|
|
464
|
+
`<!-- prettier-ignore-end -->` の間のブロック。
|
|
465
|
+
- 開きフェンスが脚注のラベルの行にあるブロック。
|
|
466
|
+
- 字下げのタブの一部が図と読まれるブロック。
|
|
467
|
+
- `options.filepath` の拡張子が `.md`、`.markdown`、`.mmd`、
|
|
468
|
+
`.mermaid` のどれでもないときは、エラーで拒否されます。
|
|
469
|
+
|
|
470
|
+
### 整形するファイル
|
|
471
|
+
|
|
472
|
+
コマンドが整形するのは、拡張子が `.md`、`.markdown`、`.mmd`、
|
|
473
|
+
`.mermaid` のファイルだけです。
|
|
474
|
+
また、`node_modules` やバージョン管理のディレクトリの下にあるパスと、
|
|
475
|
+
実行するディレクトリの `.gitignore` が挙げるパスは飛ばします。
|
|
476
|
+
詳しくは、[ファイルの除外](#ファイルの除外)を参照してください。
|
|
477
|
+
`format` は、ほかの拡張子のパスを拒否しますが、それ以外は、
|
|
478
|
+
パスがどこにあっても整形します。
|
|
479
|
+
コマンドと同じファイルを飛ばしたいツールは、
|
|
480
|
+
`format` を呼び出す前にパスを調べます。
|
|
481
|
+
|
|
482
|
+
## 設定
|
|
483
|
+
|
|
484
|
+
図のインデントは空白 2 つで、行の幅は Prettier の 80 です。
|
|
281
485
|
ファイルに `.editorconfig` や Prettier の設定が適用されるときは、
|
|
282
|
-
|
|
283
|
-
`.editorconfig` の `indent_style`、`indent_size`、`tab_width`、
|
|
284
|
-
または [Prettier の設定ファイル](https://prettier.io/docs/configuration)の
|
|
285
|
-
`useTabs` と `tabWidth` で、
|
|
486
|
+
`mmdfmt` はそのうち 8 つのオプションを読みます。
|
|
286
487
|
`overrides` も含めて Prettier の CLI と同じように探します。
|
|
488
|
+
`.editorconfig` の `indent_style`、`indent_size`、`tab_width`、
|
|
489
|
+
`max_line_length` と、Prettier の設定ファイルのオプションです。
|
|
490
|
+
設定ファイルについては、
|
|
491
|
+
[Prettier の文書](https://prettier.io/docs/configuration) を参照してください。
|
|
287
492
|
コードブロックでは、そのファイルは Markdown ファイルです。
|
|
288
493
|
読めない設定ファイルはエラーです。
|
|
289
|
-
たとえば、この `.editorconfig` は図に空白 4
|
|
494
|
+
たとえば、この `.editorconfig` は図に空白 4 つのインデントを付け、
|
|
495
|
+
行を 100 桁まで許します。
|
|
290
496
|
|
|
291
497
|
```ini
|
|
292
498
|
[*.{md,mmd,mermaid}]
|
|
293
499
|
indent_style = space
|
|
294
500
|
indent_size = 4
|
|
501
|
+
max_line_length = 100
|
|
295
502
|
```
|
|
296
503
|
|
|
297
|
-
|
|
504
|
+
読む 8 つのオプションは次のとおりです。
|
|
505
|
+
|
|
506
|
+
- `printWidth` は行の幅です。
|
|
507
|
+
行の幅が図の中で決めるのは、2 つです。
|
|
508
|
+
1 行に書いたデータブロック `@{ … }` を複数行で印字するかどうかと、
|
|
509
|
+
Gantt のセクションのタスクの `:` をそろえるかどうかです。
|
|
510
|
+
詳しくは、
|
|
511
|
+
[フォーマッターのオプション](https://mmd-toolkit.github.io/mmd-toolkit/ja/formatter/options.html#行の長さ)
|
|
512
|
+
を参照してください。
|
|
513
|
+
`max_line_length = off` は制限なしです。
|
|
514
|
+
リスト項目や引用の中のコードブロックでは、`printWidth` は、
|
|
515
|
+
各行の前に `mmdfmt` が書くものの幅を引いた幅です。
|
|
516
|
+
詳しくは、[コードブロックの詳細](#コードブロックの詳細)を参照してください。
|
|
517
|
+
- `tabWidth` と `useTabs` は、図のインデントを決めます。
|
|
518
|
+
- `embeddedLanguageFormatting`、`singleQuote`、`bracketSpacing`、`proseWrap`、
|
|
519
|
+
`trailingComma` は、図の YAML frontmatter に効きます。
|
|
520
|
+
Prettier が `prettier-plugin-mmd` で整形する場合と同じです。
|
|
521
|
+
`embeddedLanguageFormatting: "off"` は frontmatter を書かれたまま残します。
|
|
522
|
+
|
|
523
|
+
`mmdfmt` はこれ以外のオプションを読みません。
|
|
524
|
+
後の版の Prettier が足すオプションも読みません。
|
|
525
|
+
範囲(`rangeStart` と `rangeEnd`)、`cursorOffset`、
|
|
526
|
+
プラグマのオプション(`requirePragma`、`insertPragma`、`checkIgnorePragma`)、
|
|
527
|
+
`filepath`、ほかの言語のオプションは使いません。
|
|
528
|
+
`plugins` と `parser` も使いません。
|
|
529
|
+
`mmdfmt` は常に `prettier-plugin-mmd` で整形するので、
|
|
530
|
+
設定が挙げるプラグインは読み込みません。
|
|
531
|
+
`endOfLine` は使いません。
|
|
532
|
+
ファイルの改行コードを残すからです。
|
|
533
|
+
詳しくは、[コードブロックの詳細](#コードブロックの詳細)を参照してください。
|
|
298
534
|
|
|
299
535
|
## エラーと終了コード
|
|
300
536
|
|
|
@@ -311,29 +547,42 @@ notes.md:6:1: warning: Unexpected end of text
|
|
|
311
547
|
Markdown のコードブロックでは警告です。
|
|
312
548
|
`--write` と `--stdin-filepath` では、警告の位置は整形後のテキストの位置です。
|
|
313
549
|
それより前の図の行が増減していても、実行後に開くテキストのブロックを指します。
|
|
314
|
-
|
|
550
|
+
`--write` のない `--check` と `--list-different` では、
|
|
551
|
+
整形前のファイル内の位置です。
|
|
315
552
|
行と桁は 1 から数え、
|
|
316
553
|
桁は多くのエディターと同じく UTF-16 のコード単位で数えます。
|
|
317
554
|
どの図が拒否されるかは、
|
|
318
555
|
[フォーマッターの互換性](https://mmd-toolkit.github.io/mmd-toolkit/ja/formatter/compatibility.html)
|
|
319
556
|
で説明しています。
|
|
320
557
|
|
|
321
|
-
| コード | 意味
|
|
322
|
-
| ------ |
|
|
323
|
-
| `0` | エラーがなく、`--check`
|
|
324
|
-
| `1` | `--check` で、変わるファイルがあり、エラーはありません。
|
|
325
|
-
| `2` | エラーです。
|
|
558
|
+
| コード | 意味 |
|
|
559
|
+
| ------ | ---------------------------------------------------------------------------------------------------- |
|
|
560
|
+
| `0` | エラーがなく、`--check` と `--list-different` では変わるファイルがないか、`--write` が付いています。 |
|
|
561
|
+
| `1` | `--write` のない `--check` か `--list-different` で、変わるファイルがあり、エラーはありません。 |
|
|
562
|
+
| `2` | エラーです。 |
|
|
326
563
|
|
|
327
564
|
エラーとは、`.mmd` や `.mermaid` ファイル内の拒否された図、
|
|
328
565
|
読めないか書けないファイル、ファイルを選ばないパターン、読めない設定、
|
|
329
566
|
オプションの誤った使い方です。
|
|
330
567
|
エラーがあれば、変わるファイルがあっても終了コードは `2` です。
|
|
331
568
|
|
|
569
|
+
`.mmd` や `.mermaid` ファイルの図を mermaid.js が拒否するときのように、
|
|
570
|
+
ファイルを整形できないとき、`--check` の要約は、
|
|
571
|
+
標準出力の `Error occurred when checking code style in the above file.` で、
|
|
572
|
+
複数なら末尾が `in <n> files.` になります。
|
|
573
|
+
Prettier の `--check` と同じく、要約は整形できないファイルだけを数えます。
|
|
574
|
+
読めないファイルと、ファイルを選ばないパターンは、エラーとして報告しますが、
|
|
575
|
+
要約はそれらがないときと同じです。
|
|
576
|
+
パターンがファイルを 1 つも選ばないときもそうです。
|
|
577
|
+
書けないファイルは、問題を修正したファイルとして数え、
|
|
578
|
+
`--write` と `--write --list-different` でも名前を挙げます。
|
|
579
|
+
|
|
332
580
|
## Prettier を知っている方へ
|
|
333
581
|
|
|
334
582
|
図は Prettier と `prettier-plugin-mmd` で整形するので、
|
|
335
583
|
プラグインの規則が適用されます。
|
|
336
|
-
Markdown
|
|
584
|
+
Markdown と `.mmd` ファイルに Prettier とプラグインを使う場合とは、
|
|
585
|
+
結果が 5 点で異なります。
|
|
337
586
|
|
|
338
587
|
- Prettier は、コードブロックの最後の行の末尾の空白を、
|
|
339
588
|
mermaid.js が図の一部として読む場合も、
|
|
@@ -343,10 +592,99 @@ Markdown に Prettier とプラグインを使う場合とは、結果が 2 点
|
|
|
343
592
|
Markdown のコードブロックを Markdown 文書として整形し、
|
|
344
593
|
その中のコードブロックの図も整形します。
|
|
345
594
|
`mmdfmt` はほかのコードブロックをすべてそのまま残します。
|
|
595
|
+
- Prettier はリスト項目や引用で行の前にあるものを自分で印字しますが、
|
|
596
|
+
`mmdfmt` は書かれたまま残します。
|
|
597
|
+
詳しくは[コードブロックの詳細](#コードブロックの詳細)を参照してください。
|
|
598
|
+
リスト項目では、Prettier はマーカーを印字して内容を `tabWidth` にそろえます。
|
|
599
|
+
引用では、`> ` を印字し、`>` とフェンスの間の空白とタブを取り除きます。
|
|
600
|
+
内容の桁が違うと、項目や引用の中の図に残る行の幅がその差だけ違い、
|
|
601
|
+
幅の近くにある 1 行のブロックを、一方は分け、他方は分けないことがあります。
|
|
602
|
+
- リスト項目や引用の中では、Prettier は Gantt のセクションのコロンを、
|
|
603
|
+
行の前にあるものを数えずにそろえるので、
|
|
604
|
+
そろえた行が行の幅を超えることがあります。
|
|
605
|
+
`mmdfmt` はそれを数えるので、幅の近くでは、Prettier はセクションをそろえ、
|
|
606
|
+
`mmdfmt` はそろえないことがあります。
|
|
607
|
+
そのとき `mmdfmt` はコロンをそろえるために名前を空白で埋めず、
|
|
608
|
+
各コロンの前の空白は書かれたままです。
|
|
609
|
+
行の幅より広く書かれた行も、そのままです。
|
|
610
|
+
タスクは、どの Gantt の図でも同じ字下げに直すので、書かれた字下げが違うと、
|
|
611
|
+
コロンは行といっしょに動きます。
|
|
612
|
+
- Prettier は、次の 4 つの設定のもとで、図を書かれたまま残します。
|
|
613
|
+
`requirePragma: true` は、ファイルの先頭に、
|
|
614
|
+
`<!-- @format -->` か `<!-- @prettier -->` のコメントがない Markdown
|
|
615
|
+
ファイルを残します。
|
|
616
|
+
frontmatter があるときは、その後ろが先頭です。
|
|
617
|
+
`checkIgnorePragma: true` は、そこに、
|
|
618
|
+
`<!-- @noformat -->` か `<!-- @noprettier -->` のコメントがある Markdown
|
|
619
|
+
ファイルを残します。
|
|
620
|
+
ファイル全体を覆わない範囲は、Markdown ファイルも `.mmd` ファイルも残します。
|
|
621
|
+
`embeddedLanguageFormatting: "off"` は、
|
|
622
|
+
Markdown ファイルのすべてのコードブロックを残します。
|
|
623
|
+
`mmdfmt` は、この 4 つのどれのもとでも図を整形します。
|
|
624
|
+
最初の 3 つは読みません。
|
|
625
|
+
どのファイルを整形するかは自分で決め(パターンと `.gitignore`)、
|
|
626
|
+
図全体を整形するからです。
|
|
627
|
+
`embeddedLanguageFormatting` は図の frontmatter にだけ読み、
|
|
628
|
+
そのときは frontmatter を書かれたまま残します。
|
|
346
629
|
|
|
347
630
|
コマンドも Prettier の CLI とは異なります。
|
|
348
631
|
`.prettierignore` は読まず、`--ignore-path`、`--ignore-unknown`、
|
|
349
|
-
|
|
632
|
+
独自の整形オプションはなく、設定は図のためだけに読みます。
|
|
633
|
+
`mmdfmt` が読まないオプションに、Prettier が拒む値を書いても、
|
|
634
|
+
ここではエラーになりません。
|
|
635
|
+
Prettier の CLI はそれをエラーにします。
|
|
636
|
+
たとえば、`semi: "yes"` です。
|
|
637
|
+
|
|
638
|
+
チェックの成功時には、
|
|
639
|
+
Prettier の `All matched files use Prettier code style!` の代わりに、
|
|
640
|
+
`All diagrams in the matched files use Prettier code style!` と書きます。
|
|
641
|
+
`mmdfmt` は図のほかを整形しないので、
|
|
642
|
+
Markdown ファイルの残りの部分はその形式とは限らないためです。
|
|
643
|
+
警告は `mmdfmt --write` の実行を案内します。
|
|
644
|
+
`prettier --write` では Markdown ファイル全体が整形され、
|
|
645
|
+
プラグインが設定されていないと図は整形されないためです。
|
|
646
|
+
|
|
647
|
+
Prettier は `--write=false` を false と読みます。
|
|
648
|
+
`mmdfmt` は、値を取らないオプションでは `=` の後ろの値を無視し、
|
|
649
|
+
`--write` と読みます。
|
|
650
|
+
`--check=false` と `--list-different=false` も同じです。
|
|
651
|
+
また、
|
|
652
|
+
Prettier は `--write` の後ろに書いた `true` や `false` をその値と読みますが、
|
|
653
|
+
`mmdfmt` はパターンと読みます。
|
|
654
|
+
そのため、`mmdfmt --write false notes.md` は `notes.md` を整形し、
|
|
655
|
+
`false` に合うファイルがないと報告します。
|
|
656
|
+
|
|
657
|
+
`--check --list-different` はどちらでもエラーです。
|
|
658
|
+
`mmdfmt` は、ほかのオプションの誤った使い方と同じく `2` で終了し、
|
|
659
|
+
書く誤りの文は、
|
|
660
|
+
`mmdfmt: error: Optional argument '--check' conflicts with '--list-different'`。
|
|
661
|
+
Prettier は `[error] Cannot use --check and --list-different together.` を書き、
|
|
662
|
+
`1` で終了します。
|
|
663
|
+
`mmdfmt` は、一緒に使えるオプションかを確かめるとき、
|
|
664
|
+
`--no-` の形もそのオプションを付けたと数えます。
|
|
665
|
+
そのため、`--check --list-different` と同じく、
|
|
666
|
+
`--no-check --list-different` もエラーになります。
|
|
667
|
+
Prettier は `--no-check --list-different` を受け付けます。
|
|
668
|
+
|
|
669
|
+
標準入力で `--check` や `--list-different` を使うとき、
|
|
670
|
+
Prettier は読めないテキストでも `0` で終了しますが、`mmdfmt` は、
|
|
671
|
+
ほかの場合と同じく、
|
|
672
|
+
拒否された図では `2` で終了します([エラーと終了コード](#エラーと終了コード))。
|
|
673
|
+
`.mmd` や `.mermaid` のファイルの拒否された図を、`mmdfmt` は、
|
|
674
|
+
`docs/flow.mmd:3:1: error: Unexpected end of text` のように、
|
|
675
|
+
位置を付けた 1 行で報告します。
|
|
676
|
+
Prettier は `[error] docs/flow.mmd: SyntaxError: Unexpected end of text`
|
|
677
|
+
を書き、続けてその場所の前後の行を、それぞれ `[error]` の後に書きます。
|
|
678
|
+
Markdown のファイルの中の拒否された図では、
|
|
679
|
+
`mmdfmt` は `notes.md:6:1: warning: Unexpected end of text` のような警告を 1
|
|
680
|
+
行書き、Prettier は何も書きません。
|
|
681
|
+
どちらも、これをエラーとはしません。
|
|
682
|
+
|
|
683
|
+
Prettier は、`CI` の環境変数があるときや Windows では、
|
|
684
|
+
出力先が端末でなくても `warn` の語を黄色にし、
|
|
685
|
+
変わらなかったファイルの名前を灰色にします。
|
|
686
|
+
`mmdfmt` がそれらに色を付けるのは、色を出せる端末か、
|
|
687
|
+
`FORCE_COLOR` があるときだけで、`--color` や `--no-color` はありません。
|
|
350
688
|
|
|
351
689
|
## コードブロックの詳細
|
|
352
690
|
|
|
@@ -389,6 +727,23 @@ Markdown に Prettier とプラグインを使う場合とは、結果が 2 点
|
|
|
389
727
|
引用は `>` の後ろの空白 1 つをマーカーの一部として読むので、そうしないと、
|
|
390
728
|
空白で始まる図の行がその空白を失います。
|
|
391
729
|
|
|
730
|
+
リスト項目や引用の中の図の行の幅は、ファイルの行の幅から、
|
|
731
|
+
`mmdfmt` が各行の前に書くものの幅を引いた幅で、幅は 1 以上です。
|
|
732
|
+
前に書くものは、1 文字を 1 桁と数えます。
|
|
733
|
+
タブだけは次の `tabWidth` の倍数の桁まで進み、
|
|
734
|
+
`tabWidth` が 0 のときは幅を持ちません。
|
|
735
|
+
たとえば、行の幅が 40 のとき、行が空白 2 つで始まるリスト項目の中の図は、
|
|
736
|
+
38 桁として整形します。
|
|
737
|
+
`tabWidth` が 4 のとき、行が `>` とタブで始まる引用の中の図は、
|
|
738
|
+
タブが 4 桁目まで進むので、36 桁として整形します。
|
|
739
|
+
Prettier は、コンテナの中のデータブロックから、
|
|
740
|
+
自分が行の前に印字するものの幅を同じように引きますが、
|
|
741
|
+
印字するものが `mmdfmt` の書くものと違うことがあります。
|
|
742
|
+
詳しくは、
|
|
743
|
+
[Prettier を知っている方へ](#prettier-を知っている方へ)を参照してください。
|
|
744
|
+
Gantt のセクションのコロンは例外で、Prettier はそろえるとき、
|
|
745
|
+
行の前にあるものを数えません。
|
|
746
|
+
|
|
392
747
|
閉じていないブロックは、リスト項目、引用、またはファイルの終わりまで続き、
|
|
393
748
|
ほかと同じく整形します。
|
|
394
749
|
改行なしでファイルを終えるときは、最後の行も改行なしのままです。
|
|
@@ -422,7 +777,7 @@ Markdown ファイルでは、変わる図の行だけを書きます。
|
|
|
422
777
|
## 文書
|
|
423
778
|
|
|
424
779
|
- [フォーマッターのオプション](https://mmd-toolkit.github.io/mmd-toolkit/ja/formatter/options.html):
|
|
425
|
-
|
|
780
|
+
図にインデントと行の幅をどう適用するか。
|
|
426
781
|
- [フォーマッターの互換性](https://mmd-toolkit.github.io/mmd-toolkit/ja/formatter/compatibility.html):
|
|
427
782
|
拒否される図、mermaid.js との違い、整形が保証すること。
|
|
428
783
|
|