Просмотр исходного кода

add custom rule module and test

Yuki Takei 2 лет назад
Родитель
Сommit
56d38e65cc

+ 24 - 0
apps/app/src/server/models/eslint/rules/no-hello.spec.ts

@@ -0,0 +1,24 @@
+import { RuleTester } from 'eslint';
+import { test } from 'vitest';
+
+import noHello from './no-hello';
+
+const ruleTester = new RuleTester({
+  parserOptions: {
+    ecmaVersion: 2015,
+  },
+});
+
+test('test no-hello', () => {
+  ruleTester.run('no-hello', noHello, {
+    valid: [
+      { code: 'const x = "goodbye"' },
+      { code: 'const x = `goodbye`' },
+    ],
+    invalid: [
+      { code: 'const x = "hello"', errors: [{ message: '"hello" is not allowed' }] },
+      // eslint-disable-next-line no-template-curly-in-string
+      { code: 'const x = `hello${process.env.MESSAGE}`', errors: [{ message: '"hello" is not allowed' }] },
+    ],
+  });
+});

+ 24 - 0
apps/app/src/server/models/eslint/rules/no-hello.ts

@@ -0,0 +1,24 @@
+import { Rule } from 'eslint';
+import { Literal, TemplateElement } from 'estree';
+
+const rule: Rule.RuleModule = {
+  meta: {
+    type: 'problem',
+  },
+  create: (context: Rule.RuleContext): Rule.RuleListener => {
+    return {
+      Literal(node: Literal & Rule.NodeParentExtension) {
+        if (node.value === 'hello') {
+          context.report({ node, message: '"hello" is not allowed' });
+        }
+      },
+      TemplateElement(node: TemplateElement & Rule.NodeParentExtension) {
+        if (node.value.cooked === 'hello') {
+          context.report({ node, message: '"hello" is not allowed' });
+        }
+      },
+    };
+  },
+};
+
+export default rule;