slidev-md-lint
slidev-md-lint
Slidev のスライド(.md)に書いた Vue / HTML 部分 を、.vue ファイルと同じように ESLint でチェック・自動整形するための共有設定です。Markdown 部分は prettier-plugin-slidev で整えます。
何が直るか
eslint --fix(または VS Code の保存時の自動修正)で、たとえば次のように整います。
<!-- 修正前 -->
<div>
<div>これを <MathText>$(\bm{x}, \bm{A}\bm{x})$</MathText> に代入する</div>
<br/>
<ul><li>a <MathText>$x$</MathText> b</li></ul>
</div>
<!-- 修正後 -->
<div>
<div>
これを <MathText>$(\bm{x}, \bm{A}\bm{x})$</MathText> に代入する
</div>
<br />
<ul>
<li>
a <MathText>$x$</MathText> b
</li>
</ul>
</div>
| 直るもの | ルール |
|---|---|
| タグの字下げ(スライド直下を 0 として、2 スペース) | vue/html-indent |
| ブロック要素の開始タグ・中身・終了タグの改行 | vue/singleline-html-element-content-newline、vue/multiline-html-element-content-newline |
| 属性が多いときの改行(1 行 6 個まで) | vue/max-attributes-per-line |
<br />、<div></div> などの閉じ方 |
vue/html-self-closing |
| 末尾の空白、余分な空行(Prettier) | prettier-plugin-slidev |
触らないもの
- インライン要素の改行:
span、a、b、code、MathText、HighlightText、EqRef、Citationなどは、前後に改行を足しません。改行すると表示上の空白が増えて、日本語や数式の見た目が変わるためです。ほかのインラインコンポーネントを足すときは、index.jsのINLINEに追加してください。 - props の書き方:
:currentChapterのような camelCase をハイフンにしません(vue/attribute-hyphenationを無効)。 - 数式の
<>: パースエラーとして扱いません(vue/no-parsing-errorを無効)。 - frontmatter とコードフェンス: 検査の対象外です。
インストール
npm i -D slidev-md-lint eslint prettier
eslint と prettier は peerDependencies です(ESLint 9 の flat config が必要)。
設定
eslint.config.js
import base from 'slidev-md-lint/base' // .js / .ts / .vue の基本ルール
import slidevMd from 'slidev-md-lint' // .md の中の Vue
export default [
...base,
...slidevMd,
// プロジェクト固有のルールがあればここに追加
]
.md のうち、slides.md と pages/**/*.md が対象です。.vue / .ts の設定が別にある場合は slidev-md-lint(.md 用)だけを足してください。
prettier.config.js
import base from 'slidev-md-lint/prettier'
export default base
設定値は semi: false、singleQuote: true、printWidth: 80 などです。slides.md と pages/**/*.md は prettier-plugin-slidev のパーサーで整形します。
package.json
{
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"format": "prettier --write ."
}
}
VS Code(保存時に自動で直す)
必要な拡張機能は ESLint と Prettier です。
.vscode/settings.json
{
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"eslint.validate": ["javascript", "typescript", "vue", "markdown"]
}
設定を変えたあとは、コマンドパレットの ESLint: Restart ESLint Server を実行してください。拡張機能が古い設定を覚えたままになります。
仕組み
.md を --- 区切りでスライドに分け、スライド 1 枚ごとに <template>…</template> で包んで、eslint-plugin-vue に渡します(ESLint の processor)。自動修正は元の .md の位置に補正して書き戻します。
注意
- 自動修正はファイルを書き換えます。初めて使うときは、先に
git commitしておくと安心です。 - 空要素の
<div />は<div></div>に直します(Markdown 中の HTML として安全なため)。 - Slidev の記法のうち、frontmatter 以外の
---の使い方(コードフェンスの外で---だけの行)はスライドの区切りとして扱います。
ライセンス
MIT
Related Packages
DevilTea's opinionated ESLint flat config for JavaScript, TypeScript, and Vue.
Shared ESLint (flat config) and Prettier configs for TypeScript, React, Vue and...
Shared ESLint flat configs (Node.js / Vue + TypeScript) with a set of custom rul...
ESLint standard config for Vue.js version 3 projects with Typescript support
Version History
| Version | Released | License |
|---|---|---|
| 0.1.1 | MIT | |
| 0.1.0 | MIT |
Pre-releases (1)
| Version | Released | License |
|---|---|---|
| 0.0.0-stage |