Skip to content

Commit

Permalink
feat!: support ESLint 9
Browse files Browse the repository at this point in the history
  • Loading branch information
ThisIsManta committed Jun 22, 2024
1 parent 7034a65 commit 6092f8f
Show file tree
Hide file tree
Showing 21 changed files with 1,110 additions and 968 deletions.
1,196 changes: 565 additions & 631 deletions package-lock.json

Large diffs are not rendered by default.

20 changes: 10 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"rules/*.js"
],
"engines": {
"node": ">=18.0.0"
"node": ">=20.0.0"
},
"scripts": {
"docs": "node ./generateREADME.js",
Expand All @@ -29,26 +29,26 @@
},
"homepage": "https://github.com/ThisIsManta/eslint-plugin-levitate#readme",
"peerDependencies": {
"@typescript-eslint/parser": "^6.0.0 || ^7.0.0",
"eslint": "^8.0.0"
"@typescript-eslint/parser": "^7.0.0",
"eslint": "^9.0.0"
},
"devDependencies": {
"@thisismanta/pessimist": "^1.2.0",
"@thisismanta/semantic-version": "^8.0.1",
"@types/eslint": "^8.56.5",
"@types/lodash": "^4.14.202",
"@types/react": "^18.2.61",
"@typescript-eslint/parser": "^7.1.0",
"@types/eslint": "^8.56.10",
"@types/lodash": "^4.17.5",
"@types/react": "^18.3.3",
"@typescript-eslint/parser": "^7.13.1",
"chalk": "^4.1.2",
"detect-indent": "^6.1.0",
"eslint": "^8.56.0",
"eslint-plugin-local": "^4.2.1",
"eslint": "^9.5.0",
"eslint-plugin-local": "^5.0.1",
"lefthook": "^1.6.4",
"moment": "^2.30.1"
},
"dependencies": {
"@types/node": "*",
"glob": "^10.3.10",
"glob": "^10.4.2",
"lodash": "^4.17.21",
"pluralize": "^8.0.0"
}
Expand Down
10 changes: 5 additions & 5 deletions rules/export-name-after-file-name.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,25 +54,25 @@ module.exports = {
valid: [
{
code: `export { default as MyComponent } from './MyComponent.react'`,
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `export { default as SomethingElse } from './My-Component.react'`,
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `export { SomethingElse } from './MyComponent.react'`,
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `export * from './MyComponent.react'`,
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
],
invalid: [
{
code: `export { default as Component } from './MyComponent.react'`,
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Expected the default export name "Component" to be after its file name "MyComponent"' }],
},
]
Expand Down
88 changes: 46 additions & 42 deletions rules/import-convention.js
Original file line number Diff line number Diff line change
Expand Up @@ -303,82 +303,82 @@ module.exports = {
{
code: `import XXX from 'xxx'`,
options: [{ path: 'aaa', default: false }, { path: 'bbb', default: false }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import AAA from 'aaa'`,
options: [{ path: 'aaa', default: true }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import AAA from 'aaa'`,
options: [{ path: 'aaa', default: 'AAA' }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import aaa from 'aaa'`,
options: [{ path: '(.*)', default: '$1' }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: ``,
options: [{ path: 'aaa', namespace: false }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import * as AAA from 'aaa'`,
options: [{ path: 'aaa', namespace: true }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import * as AAA from 'aaa'`,
options: [{ path: 'aaa', namespace: 'AAA' }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import * as aaa from 'aaa'`,
options: [{ path: '(.*)', namespace: '$1' }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import 'aaa'`,
options: [{ path: 'aaa', named: false }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import AAA from 'aaa'`,
options: [{ path: 'aaa', named: false }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import * as AAA from 'aaa'`,
options: [{ path: 'aaa', named: false }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import { XXX } from 'aaa'`,
options: [{ path: 'aaa', named: [{ name: 'XXX' }] }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import { aaa } from 'aaa'`,
options: [{ path: 'aaa', named: [{ name: 'aaa', rename: false }] }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import { aaa as AAA } from 'aaa'`,
options: [{ path: 'aaa', named: [{ name: 'aaa', rename: 'AAA' }] }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import { useState as makeState } from 'aaa'`,
options: [{ path: 'aaa', named: [{ name: '^use(\\w+)', rename: 'make$1' }] }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `import React, { useEffect } from 'react'`,
options: [{ path: 'react', default: 'React', named: [{ name: /^use\W+/ }] }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `
Expand All @@ -387,8 +387,11 @@ module.exports = {
`,
filename: fp.join(__dirname, 'import-convention.js'),
options: [{ path: '.*', default: true }],
parser: require.resolve('@typescript-eslint/parser'),
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: {
ecmaVersion: 6,
sourceType: 'module',
parser: require('@typescript-eslint/parser'),
},
},
{
code: `
Expand All @@ -400,7 +403,7 @@ module.exports = {
}
`,
options: [{ path: 'react', default: 'React', named: false }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `
Expand All @@ -412,7 +415,7 @@ module.exports = {
}
`,
options: [{ path: 'react', default: 'React', named: [{ name: '^use' }] }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
{
code: `
Expand All @@ -429,92 +432,92 @@ module.exports = {
const _ = require('lodash')
`,
options: [{ path: 'react', default: 'React', named: [{ name: '^use' }] }, { path: '^lodash$', default: true, namespace: true }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
},
],
invalid: [
{
code: `import XXX from 'aaa'`,
options: [{ path: 'aaa', default: false }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Unexpected the default import.' }],
},
{
code: `import 'aaa'`,
options: [{ path: 'aaa', default: true }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Expected the default import.' }],
},
{
code: `import XXX from 'aaa'`,
options: [{ path: 'aaa', default: 'AAA' }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Expected the default import to be "AAA".' }],
},
{
code: `import XXX from 'aaa'`,
options: [{ path: '(.*)', default: '$1' }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Expected the default import to be "aaa".' }],
},
{
code: `import * as XXX from 'aaa'`,
options: [{ path: 'aaa', namespace: false }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Unexpected the namespace import.' }],
},
{
code: `import 'aaa'`,
options: [{ path: 'aaa', namespace: true }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Expected the namespace import.' }],
},
{
code: `import * as XXX from 'aaa'`,
options: [{ path: 'aaa', namespace: 'AAA' }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Expected the namespace import to be "AAA".' }],
},
{
code: `import * as XXX from 'aaa'`,
options: [{ path: '(.*)', namespace: '$1' }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Expected the namespace import to be "aaa".' }],
},
{
code: `import { AAA } from 'aaa'`,
options: [{ path: 'aaa', named: false }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Unexpected any named imports.' }],
},
{
code: `import { aaa as XXX } from 'aaa'`,
options: [{ path: 'aaa', named: [{ name: 'aaa', rename: false }] }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Expected the named import to be "aaa".' }],
},
{
code: `import { aaa as XXX } from 'aaa'`,
options: [{ path: 'aaa', named: [{ name: 'aaa', rename: 'AAA' }] }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Expected the named import to be "AAA".' }],
},
{
code: `import { useState } from 'react'`,
options: [{ path: '^react$', named: [{ name: '^use(\\w+)$', rename: 'make$1' }] }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Expected the named import to be "makeState".' }],
},
{
code: `import { aaa } from 'aaa'`,
options: [{ path: 'aaa', named: [{ name: 'aaa', forbidden: true }] }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [{ message: 'Unexpected the named import "aaa".' }],
},
{
code: `import React, { memo } from 'react'`,
options: [{ path: 'react', default: 'X', named: [{ name: '^(?!use)', forbidden: true }] }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [
{ message: 'Expected the default import to be "X".' },
{ message: 'Unexpected the named import "memo".' },
Expand All @@ -523,15 +526,16 @@ module.exports = {
{
code: `
import react from 'react'
import Moment from 'moment'
`,
filename: fp.join(__dirname, 'import-convention.js'),
options: [{ path: '.*', default: true }],
parser: require.resolve('@typescript-eslint/parser'),
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
options: [{ path: '.*', default: 'React' }],
languageOptions: {
ecmaVersion: 6,
sourceType: 'module',
parser: require('@typescript-eslint/parser'),
},
errors: [
{ message: 'Expected the default import to be "React".' },
{ message: 'Expected the default import to be "moment".' },
],
},
{
Expand All @@ -544,7 +548,7 @@ module.exports = {
}
`,
options: [{ path: 'react', default: 'React', named: [{ name: '^use' }] }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [
{ message: 'Expected "useState" to be imported directly.' },
{ message: 'Expected "useMemo" to be imported directly.' },
Expand All @@ -563,7 +567,7 @@ module.exports = {
const { get } = require('lodash')
`,
options: [{ path: 'react', default: 'React', named: [{ name: '^use' }, { name: '.*', forbidden: true }] }, { path: '^lodash$', default: true, namespace: true }],
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
languageOptions: { ecmaVersion: 6, sourceType: 'module' },
errors: [
{ message: 'Unexpected the named import "memo".' },
{ message: 'Expected "useState" to be imported directly.' },
Expand Down
Loading

0 comments on commit 6092f8f

Please sign in to comment.