Vapor ルール
このページに、各ルールの目的・前提・設定と、省略のない悪い例・良い例をまとめています。変更箇所は行の色で示します。コードをコピーすると、ソースコード全体を取得できます。各例に現在の対応範囲も明記しています。
| ルール | 例 | 目的 |
|---|---|---|
script/no-get-current-instance |
悪い · 良い | Vapor で null を返す getCurrentInstance() を検出します。 |
script/no-next-tick |
悪い · 良い | Vapor 向けコンポーネントの nextTick() 使用を検出します。 |
script/no-options-api |
悪い · 良い | Vapor で Options API を使用する箇所を検出します。 |
vapor/no-inline-template |
悪い · 良い | Vapor で削除済みの inline-template 属性を検出します。 |
vapor/no-vue-lifecycle-events |
悪い · 良い | Vapor では未対応の、要素ごとに指定する @vue:* ライフサイクルイベントを検出します。 |
vapor/prefer-static-class |
悪い · 良い | 文字列リテラルの :class を静的 class に置き換えます。 |
vapor/require-vapor-attribute |
悪い · 良い | Vapor 向けの script setup に vapor 属性を付ける規約を示します。 |
全ルール · ルールのオプション · ESLint 移行対応表 · プロジェクトの検査 · 子への属性の継承
script/no-get-current-instance
Vapor で null を返す getCurrentInstance() を検出します。
既定の重大度: error
プリセット: opinionated
自動修正: なし。修正内容を確認してください
適用範囲: Vapor を想定した script 検査。明示的に有効にすると通常の script でも同じ禁止を適用します。
オプション: ルール固有のオプションはありません。重大度とプリセットは設定できます。
設定(Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"script/no-get-current-instance": "error"
}
},
},
});
vp run lint
悪い
Vapor を指定した setup が getCurrentInstance をインポートして呼び出し、Vapor 向けコンポーネントでこのルールが禁止するインスタンス API に依存しています。
<script setup lang="ts" vapor>
import { getCurrentInstance } from "vue";
const instance = getCurrentInstance();
</script>
良い
inject("app-config") で明示的に提供された設定を受け取り、getCurrentInstance のインポートも呼び出しも使いません。
<script setup lang="ts" vapor>
import { inject } from "vue";
const appConfig = inject("app-config");
</script>
良い例は上記の設定でこのルールの診断が出ない例です。他のルールの診断は出る場合があります。
script/no-next-tick
Vapor 向けコンポーネントの nextTick() 使用を検出します。
既定の重大度: error
プリセット: none
自動修正: なし。修正内容を確認してください
適用範囲: Vapor を想定した script 検査。明示的に有効にすると通常の script でも同じ禁止を適用します。
オプション: ルール固有のオプションはありません。重大度とプリセットは設定できます。
設定(Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"script/no-next-tick": "error"
}
},
},
});
vp run lint
悪い
Vapor 向けコンポーネントが nextTick をインポートして await し、この移行ルールが拒否する DOM 更新待ちの依存を作っています。
<script setup lang="ts" vapor>
import { nextTick } from "vue";
await nextTick();
</script>
良い
useTemplateRef で input を取得し、onMounted でフォーカスします。例の nextTick への依存を、明示的なマウント時の処理に置き換えます。
<script setup lang="ts" vapor>
import { onMounted, useTemplateRef } from "vue";
const input = useTemplateRef<HTMLInputElement>("input");
onMounted(() => { input.value?.focus(); });
</script>
<template><input ref="input"></template>
良い例は上記の設定でこのルールの診断が出ない例です。他のルールの診断は出る場合があります。
script/no-options-api
Vapor で Options API を使用する箇所を検出します。
既定の重大度: error
プリセット: opinionated
自動修正: なし。修正内容を確認してください
適用範囲: Vapor を想定した script 検査。明示的に有効にすると通常の script でも同じ禁止を適用します。
オプション: ルール固有のオプションはありません。重大度とプリセットは設定できます。
設定(Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"script/no-options-api": "error"
}
},
},
});
vp run lint
悪い
default export のオブジェクトに Options API の data() を宣言しており、このルールが禁止するコンポーネントオプションの形式です。
<script lang="ts">
export default {
data() {
return { count: 0 };
},
};
</script>
良い
状態を Vapor の <script setup> 内の Composition API ref に移し、Options API のオブジェクトと data オプションを取り除きます。
<script setup lang="ts" vapor>
const count = ref(0);
</script>
良い例は上記の設定でこのルールの診断が出ない例です。他のルールの診断は出る場合があります。
vapor/no-inline-template
Vapor で削除済みの inline-template 属性を検出します。
既定の重大度: error
プリセット: nuxt, opinionated
自動修正: なし。修正内容を確認してください
適用範囲: Vue SFC のテンプレートと各ブロック。ルールに必要な script の文脈も例に含めています。
オプション: ルール固有のオプションはありません。重大度とプリセットは設定できます。
設定(Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"vapor/no-inline-template": "error"
}
},
},
});
vp run lint
悪い
LegacyCard の内部のマークアップに inline-template を使っています。
<template>
<LegacyCard inline-template>
<p>Profile</p>
</LegacyCard>
</template>
良い
同じマークアップを default slot として渡します。
<template>
<LegacyCard>
<template #default>
<p>Profile</p>
</template>
</LegacyCard>
</template>
良い例は上記の設定でこのルールの診断が出ない例です。他のルールの診断は出る場合があります。
vapor/no-vue-lifecycle-events
Vapor では未対応の、要素ごとに指定する @vue:* ライフサイクルイベントを検出します。
既定の重大度: error
プリセット: happy-path, nuxt, ecosystem, opinionated
自動修正: なし。修正内容を確認してください
適用範囲: Vue SFC のテンプレートと各ブロック。ルールに必要な script の文脈も例に含めています。
オプション: ルール固有のオプションはありません。重大度とプリセットは設定できます。
設定(Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"vapor/no-vue-lifecycle-events": "error"
}
},
},
});
vp run lint
悪い
input にテンプレートの @vue:mounted を指定しています。
<template>
<input @vue:mounted="focusInput" />
</template>
良い
script の onMounted からテンプレートの ref を参照し、input にフォーカスします。
<script setup lang="ts" vapor>
const input = useTemplateRef<HTMLInputElement>("input");
onMounted(() => {
input.value?.focus();
});
</script>
<template>
<input ref="input" />
</template>
良い例は上記の設定でこのルールの診断が出ない例です。他のルールの診断は出る場合があります。
vapor/prefer-static-class
文字列リテラルの :class を静的 class に置き換えます。
既定の重大度: warning
プリセット: nuxt, opinionated
自動修正: 対応している診断で利用できます
適用範囲: Vue SFC のテンプレートと各ブロック。ルールに必要な script の文脈も例に含めています。
オプション: ルール固有のオプションはありません。重大度とプリセットは設定できます。
設定(Vite+)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"vapor/prefer-static-class": "warn"
}
},
},
});
vp run lint
悪い
変化しないクラスの文字列をバインディングで評価しています。
<template>
<section :class="'panel panel-primary'">Profile</section>
</template>
良い
同じ panel のクラスを静的な class 属性に指定します。
<template>
<section class="panel panel-primary">Profile</section>
</template>
良い例は上記の設定でこのルールの診断が出ない例です。他のルールの診断は出る場合があります。
vapor/require-vapor-attribute
Vapor 向けの script setup に vapor 属性を付ける規約を示します。
既定の重大度: warning
プリセット: nuxt, opinionated
自動修正: SFC lint では未対応
適用範囲: Vue SFC のテンプレートと各ブロック。ルールに必要な script の文脈も例に含めています。
オプション: ルール固有のオプションはありません。重大度とプリセットは設定できます。
現在の対応: no-sfc-finding
このルールは、検査用のコールバックが空の仮実装です。vapor 属性は Vapor でのコンパイルを選択するものですが、現在の linter は属性がないことをこの ID では検出しません。
設定できる ID(現在の SFC lint では診断されません)
import { defineConfig } from "@vizejs/vite-plugin/vite-plus";
export default defineConfig({
vue: {
linter: {
"preset": "incremental",
"rules": {
"vapor/require-vapor-attribute": "warn"
}
},
},
});
vp run lint
悪い
script setup に Vapor の指定がありません。これは規約を示す例で、現在の空のコールバックは診断を生成しません。
<script setup>
const count = 0;
</script>
<template><p>{{ count }}</p></template>
良い
vapor を追加して Vapor のコンパイルを選択します。修正方針を示す例であり、現在のリンターがこのルールの違反を検出するという意味ではありません。
<script setup vapor>
const count = 0;
</script>
<template><p>{{ count }}</p></template>
良い例は意図する規約を示します。現在の SFC lint では、悪い例・良い例のどちらからもこのルール固有の診断は出ません。