diff --git a/src/rules/document-todos.ts b/src/rules/document-todos.ts new file mode 100644 index 0000000..5b8b67c --- /dev/null +++ b/src/rules/document-todos.ts @@ -0,0 +1,48 @@ +import { TSESTree } from '@typescript-eslint/types' + +import { createRule } from '../utils' + +const NAME = 'import-declaration-newline' + +// TODO: make schema +const value = createRule({ + create(context) { + return { + Program() { + const sourceCode = context.getSourceCode() + const comments = sourceCode.getAllComments() + + comments.forEach((comment) => { + if (comment.value.includes(context.settings.url as string)) { + return + } + + context.report({ + messageId: 'default', + loc: comment.loc, + }) + }) + }, + } + }, + defaultOptions: [], + meta: { + docs: { + description: 'Ensure all TODOs and FIXMEs have an issue link attached to them', + recommended: false, + requiresTypeChecking: false, + }, + messages: { + default: 'All TODOs and FIXMEs have an issue link attached to them', + }, + schema: [], + type: 'problem', + }, + name: NAME, +}) + +export default { + name: NAME, + value, +} + diff --git a/src/tests-jsx/fixtures/file.tsx b/src/tests-jsx/fixtures/file.tsx new file mode 100644 index 0000000..e69de29 diff --git a/src/tests-jsx/rules/document-todos.test.ts b/src/tests-jsx/rules/document-todos.test.ts new file mode 100644 index 0000000..c3a4cc7 --- /dev/null +++ b/src/tests-jsx/rules/document-todos.test.ts @@ -0,0 +1,48 @@ +/* eslint-disable sort-keys-fix/sort-keys-fix */ + +import rule from '../../rules/document-todos' +import { + ruleTester, + TSX_FILE_PATH, +} from '../utils' + +ruleTester.run(rule.name, rule.value, { + invalid: [ + { + code: ` +// TODO: comment above the function https://rimac-automobili.atlassian.net/jira/software/c/projects/QIA/boards/34/backlog?view=detail&selectedIssue=QIA-965&epics=visible&issueLimit=100 +const Component = () => { + /** + * This is a comment block + * TODO: and this is his todo https://rimac-automobili.atlassian.net/jira/software/c/projects/QIA/boards/34/backlog?view=detail&selectedIssue=QIA-965&epics=visible&issueLimit=100 + */ + const router = useRouter() + + // FIXME: comment above the return + return ( +
+ {/* TODO: this is a different jsx comment */} +

Hello

+
+ ) +} + `, + filename: TSX_FILE_PATH, + settings: { + url: 'https://rimac-automobili.atlassian.net/jira/software/c/projects/' + }, + errors: [ + { + column: 1, + line: 2, + messageId: 'default', + }, + ], + } + ], + valid: [], +}) diff --git a/src/tests-jsx/tsconfig.json b/src/tests-jsx/tsconfig.json new file mode 100644 index 0000000..eeb47d0 --- /dev/null +++ b/src/tests-jsx/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "jsx": "preserve", + "target": "es5", + "module": "commonjs", + "strict": true, + "esModuleInterop": true, + "types": [], + "lib": [ + "es2015", + "es2017", + "esnext" + ], + "experimentalDecorators": true + }, + "include": [ + "./fixtures/file.tsx" + ] +} diff --git a/src/tests-jsx/utils/constants.ts b/src/tests-jsx/utils/constants.ts new file mode 100644 index 0000000..194b6a4 --- /dev/null +++ b/src/tests-jsx/utils/constants.ts @@ -0,0 +1 @@ +export const TSX_FILE_PATH = './fixtures/file.tsx' diff --git a/src/tests-jsx/utils/index.ts b/src/tests-jsx/utils/index.ts new file mode 100644 index 0000000..90c9633 --- /dev/null +++ b/src/tests-jsx/utils/index.ts @@ -0,0 +1,2 @@ +export * from './constants' +export * from './ruleTester' diff --git a/src/tests-jsx/utils/ruleTester.ts b/src/tests-jsx/utils/ruleTester.ts new file mode 100644 index 0000000..150c20b --- /dev/null +++ b/src/tests-jsx/utils/ruleTester.ts @@ -0,0 +1,15 @@ +import * as path from 'path' + +import { ESLintUtils } from '@typescript-eslint/utils' + +export const ruleTester = new ESLintUtils.RuleTester({ + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaVersion: 2015, + ecmaFeatures: { + jsx: true, + }, + project: './tsconfig.json', + tsconfigRootDir: path.resolve(__dirname, '..'), + }, +}) diff --git a/src/tests/tsconfig.json b/src/tests/tsconfig.json index e27ac81..126ad2a 100644 --- a/src/tests/tsconfig.json +++ b/src/tests/tsconfig.json @@ -14,6 +14,6 @@ "experimentalDecorators": true }, "include": [ - "fixtures" + "fixtures/file.ts" ] }