eslint-plugin-vue icon indicating copy to clipboard operation
eslint-plugin-vue copied to clipboard

`"boundOnly"` option for `vue/v-on-function-call`

Open iliubinskii opened this issue 3 years ago • 4 comments

Please describe what the rule should do:

Same as: https://typescript-eslint.io/rules/unbound-method/

What category should the rule belong to? [ ] Enforces code style (layout) [+] Warns about a potential error (problem) [ ] Suggests an alternate way of doing something (suggestion) [ ] Other (please specify:)

Provide 2-3 code examples that this rule should warn about:

<script lang="ts">
import { defineComponent } from "vue";

class C {
  public f(): number {
    return this.x;
  }

  protected x = 1;
}

export default defineComponent({
  name: "page-settings",
  setup() {
    return {
      c: new C()
    };
  }
});
</script>

<template>
  <q-button @click="c.f" />
</template>

Additional context

New rule should report missing brakets for <q-button @click="c.f" />

Without brackets it throws run-time error: image

iliubinskii avatar Mar 02 '22 09:03 iliubinskii

This rule does already exist: https://eslint.vuejs.org/rules/v-on-function-call.html

FloEdelmann avatar Mar 02 '22 09:03 FloEdelmann

@FloEdelmann, thx for the response.

Is it possible to add an option to v-on-function-call that will disallow brackets for @click="fn", but will require brackets for @click="cls.method()"?

The point is that currently "v-on-function-call" does not do what "unbound-method" does. This is unbound method: "cls.method" (because it consists of two parts). It needs bracket. This is not unbound method: "fn" (because it has only one part). It can be left without bracket.

iliubinskii avatar Mar 02 '22 23:03 iliubinskii

A new option "boundOnly" (instead of "always" and "never") would be fine for me. Would you like to implement it?

If implemented, this option's docs should link to the explanation in typescript-eslint rule's documentation.

FloEdelmann avatar Mar 03 '22 08:03 FloEdelmann

Thx for accepting it as proposition. I am familiar with typescript/eslint plugin development, but eslint-plugin-vue is totaly new to me - so, I'll have to wait for somebody more familiar with it. If I have time, I will more likely try to write a wrapper rule that would allow to use any typescript/eslint rule inside SFC.

iliubinskii avatar Mar 04 '22 09:03 iliubinskii

Note that the vue/v-on-function-call rule was deprecated in favor of the new vue/v-on-handler-style rule in #2009. Is this request solved with the new rule? If it isn't, please open a new issue to keep the discussion clear.

FloEdelmann avatar May 16 '23 15:05 FloEdelmann