extensions.ts (1187B)
1 /** 2 * @license 3 * Copyright 2023 Google Inc. 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 import {ESLintUtils} from '@typescript-eslint/utils'; 8 9 const createRule = ESLintUtils.RuleCreator<{ 10 requiresTypeChecking: boolean; 11 }>(name => { 12 return `https://github.com/puppeteer/puppeteer/tree/main/tools/eslint/${name}.js`; 13 }); 14 15 const enforceExtensionRule = createRule<[], 'extensionsRule'>({ 16 name: 'extensions', 17 meta: { 18 docs: { 19 description: 'Requires `.js` for imports', 20 requiresTypeChecking: false, 21 }, 22 messages: { 23 extensionsRule: 'Add `.js` to import.', 24 }, 25 schema: [], 26 fixable: 'code', 27 type: 'problem', 28 }, 29 defaultOptions: [], 30 create(context) { 31 return { 32 ImportDeclaration(node): void { 33 const file = node.source.value.split('/').pop(); 34 35 if (!node.source.value.startsWith('.') || file?.includes('.')) { 36 return; 37 } 38 context.report({ 39 node: node.source, 40 messageId: 'extensionsRule', 41 fix(fixer) { 42 return fixer.replaceText(node.source, `'${node.source.value}.js'`); 43 }, 44 }); 45 }, 46 }; 47 }, 48 }); 49 50 export = enforceExtensionRule;