|
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { value: true }); |
|
const utils_1 = require("../utils"); |
|
const svelte_store_1 = require("./reference-helpers/svelte-store"); |
|
exports.default = (0, utils_1.createRule)('derived-has-same-inputs-outputs', { |
|
meta: { |
|
docs: { |
|
description: 'derived store should use same variable names between values and callback', |
|
category: 'Stylistic Issues', |
|
recommended: false, |
|
conflictWithPrettier: false |
|
}, |
|
schema: [], |
|
messages: { |
|
unexpected: "The argument name should be '{{name}}'." |
|
}, |
|
type: 'suggestion' |
|
}, |
|
create(context) { |
|
|
|
function isIdentifierOrArrayExpression(node) { |
|
return ['Identifier', 'ArrayExpression'].includes(node.type); |
|
} |
|
|
|
function isFunctionExpression(node) { |
|
return ['ArrowFunctionExpression', 'FunctionExpression'].includes(node.type); |
|
} |
|
|
|
|
|
|
|
|
|
function checkIdentifier(context, args, fn) { |
|
const fnParam = fn.params[0]; |
|
if (fnParam.type !== 'Identifier') |
|
return; |
|
const expectedName = `$${args.name}`; |
|
if (expectedName !== fnParam.name) { |
|
context.report({ |
|
node: fn, |
|
loc: fnParam.loc, |
|
messageId: 'unexpected', |
|
data: { name: expectedName } |
|
}); |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
function checkArrayExpression(context, args, fn) { |
|
const fnParam = fn.params[0]; |
|
if (fnParam.type !== 'ArrayPattern') |
|
return; |
|
const argNames = args.elements.map((element) => { |
|
return element && element.type === 'Identifier' ? element.name : null; |
|
}); |
|
fnParam.elements.forEach((element, index) => { |
|
const argName = argNames[index]; |
|
if (element && element.type === 'Identifier' && argName) { |
|
const expectedName = `$${argName}`; |
|
if (expectedName !== element.name) { |
|
context.report({ |
|
node: fn, |
|
loc: element.loc, |
|
messageId: 'unexpected', |
|
data: { name: expectedName } |
|
}); |
|
} |
|
} |
|
}); |
|
} |
|
return { |
|
Program() { |
|
for (const { node } of (0, svelte_store_1.extractStoreReferences)(context, ['derived'])) { |
|
const [args, fn] = node.arguments; |
|
if (!args || !isIdentifierOrArrayExpression(args)) |
|
continue; |
|
if (!fn || !isFunctionExpression(fn)) |
|
continue; |
|
if (!fn.params || fn.params.length === 0) |
|
continue; |
|
if (args.type === 'Identifier') |
|
checkIdentifier(context, args, fn); |
|
else |
|
checkArrayExpression(context, args, fn); |
|
} |
|
} |
|
}; |
|
} |
|
}); |
|
|