Skip to content

Commit 4d03118

Browse files
authored
test: migrate to ts-jest, enable more ts related rules (#53)
1 parent 0fc32b3 commit 4d03118

File tree

115 files changed

+609
-468
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

115 files changed

+609
-468
lines changed

.eslintrc.js

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,40 @@ module.exports = {
5050
'import-x/unambiguous': 'off',
5151
},
5252

53-
settings: {
54-
'import-x/resolver': {
55-
node: {
56-
paths: ['src'],
57-
},
58-
},
59-
},
60-
6153
overrides: [
6254
{
63-
files: ['*.js', '*.ts'],
55+
files: ['*.ts'],
6456
excludedFiles: ['test/fixtures'],
57+
rules: {
58+
'@typescript-eslint/array-type': [
59+
2,
60+
{
61+
default: 'array-simple',
62+
},
63+
],
64+
'@typescript-eslint/consistent-type-definitions': ['error', 'type'],
65+
'@typescript-eslint/consistent-type-imports': [
66+
'error',
67+
{
68+
fixStyle: 'inline-type-imports',
69+
},
70+
],
71+
'import-x/consistent-type-specifier-style': 'error',
72+
'import-x/order': [
73+
'error',
74+
{
75+
alphabetize: {
76+
order: 'asc',
77+
},
78+
'newlines-between': 'always',
79+
},
80+
],
81+
},
6582
settings: {
6683
'import-x/resolver': {
67-
typescript: true,
84+
typescript: {
85+
project: 'tsconfig.base.json',
86+
},
6887
},
6988
},
7089
},
@@ -73,9 +92,6 @@ module.exports = {
7392
env: {
7493
jest: true,
7594
},
76-
rules: {
77-
'import-x/default': 0,
78-
},
7995
},
8096
{
8197
files: 'global.d.ts',

jest.config.js

Lines changed: 0 additions & 23 deletions
This file was deleted.

jest.config.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import type { Config } from 'jest'
2+
3+
const testCompiled = process.env.TEST_COMPILED === '1'
4+
5+
const srcDir = testCompiled ? 'lib' : 'src'
6+
7+
export default {
8+
preset: 'ts-jest',
9+
collectCoverage: !testCompiled,
10+
modulePathIgnorePatterns: ['<rootDir>/test/fixtures/with-syntax-error'],
11+
moduleNameMapper: {
12+
'^eslint-plugin-import-x$': `<rootDir>/${srcDir}`,
13+
'^eslint-plugin-import-x/package.json$': `<rootDir>/package.json`,
14+
'^eslint-plugin-import-x/(.+)$': `<rootDir>/${srcDir}/$1`,
15+
},
16+
testMatch: ['<rootDir>/test/**/*.spec.ts'],
17+
transform: {
18+
'^.+\\.tsx?$': ['ts-jest', { tsconfig: 'tsconfig.base.json' }],
19+
},
20+
} satisfies Config

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@
105105
"redux": "^5.0.1",
106106
"rimraf": "^5.0.5",
107107
"svelte": "^4.2.12",
108+
"ts-jest": "^29.1.2",
109+
"ts-node": "^10.9.2",
108110
"type-fest": "^4.12.0",
109111
"typescript": "~5.1.0"
110112
}

src/import-declaration.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { TSESTree } from '@typescript-eslint/utils'
1+
import type { TSESTree } from '@typescript-eslint/utils'
22

3-
import { RuleContext } from './types'
3+
import type { RuleContext } from './types'
44

55
export const importDeclaration = (context: RuleContext) => {
66
const ancestors = context.getAncestors()

src/index.ts

Lines changed: 62 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,79 @@
11
import type { TSESLint } from '@typescript-eslint/utils'
22

3-
import type { PluginConfig } from './types'
4-
53
// rules
6-
import noUnresolved from './rules/no-unresolved'
7-
import named from './rules/named'
4+
import electron from './config/electron'
5+
import errors from './config/errors'
6+
import react from './config/react'
7+
import reactNative from './config/react-native'
8+
import recommended from './config/recommended'
9+
import stage0 from './config/stage-0'
10+
import typescript from './config/typescript'
11+
import warnings from './config/warnings'
12+
import consistentTypeSpecifierStyle from './rules/consistent-type-specifier-style'
813
import default_ from './rules/default'
9-
import namespace from './rules/namespace'
10-
import noNamespace from './rules/no-namespace'
14+
import dynamicImportChunkname from './rules/dynamic-import-chunkname'
1115
import export_ from './rules/export'
12-
import noMutableExports from './rules/no-mutable-exports'
16+
import exportsLast from './rules/exports-last'
1317
import extensions from './rules/extensions'
14-
import noRestrictedPaths from './rules/no-restricted-paths'
15-
import noInternalModules from './rules/no-internal-modules'
18+
import first from './rules/first'
1619
import groupExports from './rules/group-exports'
17-
import noRelativePackages from './rules/no-relative-packages'
18-
import noRelativeParentImports from './rules/no-relative-parent-imports'
19-
import consistentTypeSpecifierStyle from './rules/consistent-type-specifier-style'
20-
import noSelfImport from './rules/no-self-import'
21-
import noCycle from './rules/no-cycle'
22-
import noNamedDefault from './rules/no-named-default'
23-
import noNamedAsDefault from './rules/no-named-as-default'
24-
import noNamedAsDefaultMember from './rules/no-named-as-default-member'
20+
import importsFirst from './rules/imports-first'
21+
import maxDependencies from './rules/max-dependencies'
22+
import named from './rules/named'
23+
import namespace from './rules/namespace'
24+
import newlineAfterImport from './rules/newline-after-import'
25+
import noAbsolutePath from './rules/no-absolute-path'
26+
import noAmd from './rules/no-amd'
2527
import noAnonymousDefaultExport from './rules/no-anonymous-default-export'
26-
import noUnusedModules from './rules/no-unused-modules'
2728
import noCommonjs from './rules/no-commonjs'
28-
import noAmd from './rules/no-amd'
29+
import noCycle from './rules/no-cycle'
30+
import noDefaultExport from './rules/no-default-export'
31+
import noDeprecated from './rules/no-deprecated'
2932
import noDuplicates from './rules/no-duplicates'
30-
import first from './rules/first'
31-
import maxDependencies from './rules/max-dependencies'
33+
import noDynamicRequire from './rules/no-dynamic-require'
34+
import noEmptyNamedBlocks from './rules/no-empty-named-blocks'
3235
import noExtraneousDependencies from './rules/no-extraneous-dependencies'
33-
import noAbsolutePath from './rules/no-absolute-path'
36+
import noImportModuleExports from './rules/no-import-module-exports'
37+
import noInternalModules from './rules/no-internal-modules'
38+
import noMutableExports from './rules/no-mutable-exports'
39+
import noNamedAsDefault from './rules/no-named-as-default'
40+
import noNamedAsDefaultMember from './rules/no-named-as-default-member'
41+
import noNamedDefault from './rules/no-named-default'
42+
import noNamedExport from './rules/no-named-export'
43+
import noNamespace from './rules/no-namespace'
3444
import noNodejsModules from './rules/no-nodejs-modules'
45+
import noRelativePackages from './rules/no-relative-packages'
46+
import noRelativeParentImports from './rules/no-relative-parent-imports'
47+
import noRestrictedPaths from './rules/no-restricted-paths'
48+
import noSelfImport from './rules/no-self-import'
49+
import noUnassignedImport from './rules/no-unassigned-import'
50+
import noUnresolved from './rules/no-unresolved'
51+
import noUnusedModules from './rules/no-unused-modules'
52+
import noUselessPathSegments from './rules/no-useless-path-segments'
3553
import noWebpackLoaderSyntax from './rules/no-webpack-loader-syntax'
3654
import order from './rules/order'
37-
import newlineAfterImport from './rules/newline-after-import'
3855
import preferDefaultExport from './rules/prefer-default-export'
39-
import noDefaultExport from './rules/no-default-export'
40-
import noNamedExport from './rules/no-named-export'
41-
import noDynamicRequire from './rules/no-dynamic-require'
4256
import unambiguous from './rules/unambiguous'
43-
import noUnassignedImport from './rules/no-unassigned-import'
44-
import noUselessPathSegments from './rules/no-useless-path-segments'
45-
import dynamicImportChunkname from './rules/dynamic-import-chunkname'
46-
import noImportModuleExports from './rules/no-import-module-exports'
47-
import noEmptyNamedBlocks from './rules/no-empty-named-blocks'
48-
import exportsLast from './rules/exports-last'
49-
import noDeprecated from './rules/no-deprecated'
50-
import importsFirst from './rules/imports-first'
51-
5257
// configs
53-
import recommended from './config/recommended'
54-
import errors from './config/errors'
55-
import warnings from './config/warnings'
56-
import stage0 from './config/stage-0'
57-
import react from './config/react'
58-
import reactNative from './config/react-native'
59-
import electron from './config/electron'
60-
import typescript from './config/typescript'
58+
import type { PluginConfig } from './types'
59+
60+
const configs = {
61+
recommended,
62+
63+
errors,
64+
warnings,
65+
66+
// shhhh... work in progress "secret" rules
67+
'stage-0': stage0,
68+
69+
// useful stuff for folks using various environments
70+
react,
71+
'react-native': reactNative,
72+
electron,
73+
typescript,
74+
} satisfies Record<string, PluginConfig>
6175

62-
export const rules = {
76+
const rules = {
6377
'no-unresolved': noUnresolved,
6478
named,
6579
default: default_,
@@ -115,18 +129,7 @@ export const rules = {
115129
'imports-first': importsFirst,
116130
} satisfies Record<string, TSESLint.RuleModule<string, readonly unknown[]>>
117131

118-
export const configs = {
119-
recommended,
120-
121-
errors,
122-
warnings,
123-
124-
// shhhh... work in progress "secret" rules
125-
'stage-0': stage0,
126-
127-
// useful stuff for folks using various environments
128-
react,
129-
'react-native': reactNative,
130-
electron,
131-
typescript,
132-
} satisfies Record<string, PluginConfig>
132+
export = {
133+
configs,
134+
rules,
135+
}

src/rules/consistent-type-specifier-style.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { TSESLint, TSESTree } from '@typescript-eslint/utils'
1+
import type { TSESLint, TSESTree } from '@typescript-eslint/utils'
2+
23
import { createRule } from '../utils'
34

45
function isComma(token: TSESTree.Token): token is TSESTree.PunctuatorToken {

src/rules/default.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { TSESTree } from '@typescript-eslint/utils'
2-
import { ExportMap } from '../export-map'
3-
import { createRule } from '../utils'
1+
import type { TSESTree } from '@typescript-eslint/utils'
2+
3+
import { ExportMap, createRule } from '../utils'
44

55
type MessageId = 'noDefaultExport'
66

src/rules/dynamic-import-chunkname.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import vm from 'vm'
22

3+
import type { TSESTree } from '@typescript-eslint/utils'
4+
35
import { createRule } from '../utils'
4-
import { TSESTree } from '@typescript-eslint/utils'
56

67
type Options = {
78
allowEmpty?: boolean

src/rules/export.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { TSESTree } from '@typescript-eslint/utils'
2-
import { ExportMap, recursivePatternCapture } from '../export-map'
3-
import { createRule } from '../utils'
1+
import type { TSESTree } from '@typescript-eslint/utils'
2+
3+
import { ExportMap, recursivePatternCapture, createRule } from '../utils'
44

55
/*
66
Notes on TypeScript namespaces aka TSModuleDeclaration:

0 commit comments

Comments
 (0)