summaryrefslogtreecommitdiffstats
path: root/remote/test/puppeteer/tools/eslint/src/extensions.ts
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--remote/test/puppeteer/tools/eslint/src/extensions.ts48
1 files changed, 48 insertions, 0 deletions
diff --git a/remote/test/puppeteer/tools/eslint/src/extensions.ts b/remote/test/puppeteer/tools/eslint/src/extensions.ts
new file mode 100644
index 0000000000..89b9279625
--- /dev/null
+++ b/remote/test/puppeteer/tools/eslint/src/extensions.ts
@@ -0,0 +1,48 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import {ESLintUtils} from '@typescript-eslint/utils';
+
+const createRule = ESLintUtils.RuleCreator(name => {
+ return `https://github.com/puppeteer/puppeteer/tree/main/tools/eslint/${name}.js`;
+});
+
+const enforceExtensionRule = createRule<[], 'extensionsRule'>({
+ name: 'extensions',
+ meta: {
+ docs: {
+ description: 'Requires `.js` for imports',
+ requiresTypeChecking: false,
+ },
+ messages: {
+ extensionsRule: 'Add `.js` to import.',
+ },
+ schema: [],
+ fixable: 'code',
+ type: 'problem',
+ },
+ defaultOptions: [],
+ create(context) {
+ return {
+ ImportDeclaration(node): void {
+ const file = node.source.value.split('/').pop();
+
+ if (!node.source.value.startsWith('.') || file?.includes('.')) {
+ return;
+ }
+ context.report({
+ node: node.source,
+ messageId: 'extensionsRule',
+ fix(fixer) {
+ return fixer.replaceText(node.source, `'${node.source.value}.js'`);
+ },
+ });
+ },
+ };
+ },
+});
+
+export = enforceExtensionRule;