UNPKG

eslint-plugin-mocha

Version:

Eslint rules for mocha.

72 lines 2.73 kB
import { createMochaVisitors } from "./ast/mocha-visitors.js"; import { isCallExpression } from "./ast/node-types.js"; import { getTitleDescription } from "./title-description.js"; import { getRuleOption } from "./rule-options.js"; const optionSchema = { type: 'object', properties: { pattern: { type: 'string' }, message: { type: 'string' } }, additionalProperties: false }; function normalizeOptions(options) { const { pattern: stringPattern, message } = options; const pattern = new RegExp(stringPattern, 'u'); return { pattern, message }; } function hasValidOrNoDescription(context, mochaCallExpression, pattern) { const description = getTitleDescription(context.sourceCode, mochaCallExpression); if (description.kind === 'missing' || description.kind === 'dynamic') { return true; } return pattern.test(description.value); } function createTitlePatternRule(definition, createVisitors) { const defaultOptions = [{ pattern: definition.defaultPattern }]; const messages = { [definition.messageId]: 'Invalid "{{name}}" description found.' }; return { meta: { type: 'suggestion', languages: ['js/js'], docs: { description: definition.description, url: `https://github.com/lo1tuma/eslint-plugin-mocha/blob/main/documentation/rules/${definition.documentationFile}.md` }, defaultOptions, messages, schema: [optionSchema] }, create(context) { const options = getRuleOption(context); const { pattern, message } = normalizeOptions(options); function checkTitle(visitorContext) { const { node, name } = visitorContext; if (!isCallExpression(node) || hasValidOrNoDescription(context, node, pattern)) { return; } context.report(message === undefined ? { node, messageId: definition.messageId, data: { name } } : { node, message }); } return createVisitors(context, checkTitle); } }; } export function createSuiteTitlePatternRule(definition) { return createTitlePatternRule(definition, function (context, checkTitle) { return createMochaVisitors(context, { suite: checkTitle }); }); } export function createTestCaseTitlePatternRule(definition) { return createTitlePatternRule(definition, function (context, checkTitle) { return createMochaVisitors(context, { testCase: checkTitle }); }); } //# sourceMappingURL=title-pattern-rule.js.map