Skip to content

Commit 4e539b4

Browse files
authored
prefer-includes: Support Vue template (#2526)
1 parent e42118d commit 4e539b4

File tree

4 files changed

+259
-25
lines changed

4 files changed

+259
-25
lines changed

rules/prefer-includes.js

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
'use strict';
2+
const {checkVueTemplate} = require('./utils/rule.js');
23
const isMethodNamed = require('./utils/is-method-named.js');
34
const simpleArraySearchRule = require('./shared/simple-array-search-rule.js');
45
const {isLiteral, isNegativeOne} = require('./ast/index.js');
@@ -15,8 +16,10 @@ const isNegativeResult = node => ['===', '==', '<'].includes(node.operator);
1516

1617
const getProblem = (context, node, target, argumentsNodes) => {
1718
const {sourceCode} = context;
19+
const tokenStore = sourceCode.parserServices.getTemplateBodyTokenStore?.() ?? sourceCode;
20+
1821
const memberExpressionNode = target.parent;
19-
const dotToken = sourceCode.getTokenBefore(memberExpressionNode.property);
22+
const dotToken = tokenStore.getTokenBefore(memberExpressionNode.property);
2023
const targetSource = sourceCode.getText().slice(memberExpressionNode.range[0], dotToken.range[0]);
2124

2225
// Strip default `fromIndex`
@@ -84,7 +87,7 @@ const create = context => {
8487

8588
/** @type {import('eslint').Rule.RuleModule} */
8689
module.exports = {
87-
create,
90+
create: checkVueTemplate(create),
8891
meta: {
8992
type: 'suggestion',
9093
docs: {

test/prefer-includes.mjs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {getTester} from './utils/test.mjs';
1+
import {getTester, parsers} from './utils/test.mjs';
22
import tests from './shared/simple-array-search-rule-tests.mjs';
33

44
const {test} = getTester(import.meta);
@@ -16,7 +16,7 @@ test.snapshot({
1616
'_.indexOf(foo, bar) !== -1',
1717
'lodash.indexOf(foo, bar) !== -1',
1818
'underscore.indexOf(foo, bar) !== -1',
19-
].flatMap(code => [code, code.replace('.indexOf', '.lastIndexOf')]),
19+
].flatMap(code => [code, code.replace('.indexOf', '.lastIndexOf'), {code: `<template><div v-if="${code}"></div></template>`, languageOptions: {parser: parsers.vue}}]),
2020
'str.includes(\'foo\')',
2121
'\'foobar\'.includes(\'foo\')',
2222
'[1,2,3].includes(4)',
@@ -34,7 +34,7 @@ test.snapshot({
3434
'(a || b).indexOf(\'foo\') === -1',
3535
'foo.indexOf(bar, 0) !== -1',
3636
'foo.indexOf(bar, 1) !== -1',
37-
].flatMap(code => [code, code.replace('.indexOf', '.lastIndexOf')]),
37+
].flatMap(code => [code, code.replace('.indexOf', '.lastIndexOf'), {code: `<template><div v-if="${code}"></div></template>`, languageOptions: {parser: parsers.vue}}]),
3838
});
3939

4040
const {snapshot, typescript} = tests({

0 commit comments

Comments
 (0)