ESLint Plugin for Vue Composables

1.0.0 · active · verified Sun Apr 19

This ESLint plugin provides a set of rules specifically designed to enforce best practices and prevent common pitfalls when working with Vue 3 composables and lifecycle hooks. It ensures that composable functions (prefixed with `use`) and lifecycle hook calls (like `onMounted`, `onBeforeUnmount`, etc.) are correctly placed within `setup()` functions, other composables, or Vue's `<script setup>` block. The plugin, currently at version 1.0.0, aims to help developers maintain proper reactivity contexts and avoid issues like calling hooks or composables after `await` expressions in incorrect scopes. It supports both modern ESLint flat configurations (`eslint.config.js`) and legacy `.eslintrc` formats, providing flexibility for different project setups. Its release cadence is likely tied to the evolving best practices for Vue composables, offering focused linting compared to general Vue ESLint plugins.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates how to configure `eslint-plugin-vue-composable` using the modern ESLint flat configuration (`eslint.config.js`), including how to apply recommended rules and override specific rule severities.

import vueComposable from 'eslint-plugin-vue-composable'

export default [
  // Ensure ESLint is configured for Vue and TypeScript if applicable
  // For example: 
  // ...require('@eslint/js').configs.recommended, 
  // ...pluginVue.configs['flat/recommended'],
  // ...parserTs.configs.recommended,
  
  // Add the vue-composable recommended rules
  ...vueComposable.configs['flat/recommended'],

  // You can override specific rules or add custom configurations
  {
    rules: {
      'vue-composable/lifecycle-placement': 'warn', // Change severity of a specific rule
      'vue-composable/composable-placement': 'error' // Enforce composable placement strictly
    }
  },
  // Define files to lint
  {
    files: ['**/*.vue', '**/*.ts', '**/*.js'],
    languageOptions: {
      parserOptions: {
        ecmaVersion: 'latest',
        sourceType: 'module'
      }
    }
  }
]

view raw JSON →