Skip to content

Commit cb80de0

Browse files
authored
TINY-11824: Upgrade plugin to support eslint V9 and flat config (#52)
* TINY-11824: Upgrade eslint-plugin to be compatible with eslint v9
1 parent 74f63de commit cb80de0

Some content is hidden

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

41 files changed

+1291
-1447
lines changed

.eslintrc.js

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

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
77

88
## Unreleased
99

10+
### Added
11+
- Support for eslint V9
12+
13+
### Removed
14+
- Support for eslint V8
15+
1016
## 2.4.0 - 2025-01-22
1117

1218
### Changed

eslint.config.mjs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import base from './dist/test/module/ESLintConfig.mjs';
2+
import tseslint from 'typescript-eslint';
3+
4+
const config = tseslint.config(
5+
base,
6+
{
7+
languageOptions: {
8+
parserOptions: {
9+
projectService: true,
10+
tsconfigRootDir: import.meta.dirname,
11+
}
12+
},
13+
}
14+
);
15+
16+
export default config;

package.json

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,33 @@
11
{
22
"name": "@tinymce/eslint-plugin",
3-
"version": "2.4.1-rc",
3+
"version": "3.0.0-rc",
44
"description": "Plugin for ESLint containing Tiny Technologies Inc. standard linting rules",
55
"author": "Tiny Technologies Inc.",
6-
"main": "dist/main/ts/api/Main.js",
6+
"main": "dist/main/ts/api/Main.mjs",
77
"repository": "git@github.com:tinymce/eslint-plugin.git",
88
"license": "Apache-2.0",
99
"dependencies": {
10-
"@stylistic/eslint-plugin": "^2.12.1",
11-
"@typescript-eslint/eslint-plugin": "^8.19.1",
12-
"@typescript-eslint/parser": "^8.19.1",
13-
"eslint": "^8.57.0",
14-
"eslint-plugin-import": "2.26.0",
10+
"@stylistic/eslint-plugin": "^4.2.0",
11+
"@typescript-eslint/eslint-plugin": "^8.26.1",
12+
"@typescript-eslint/parser": "^8.26.1",
13+
"@typescript-eslint/rule-tester": "^8.26.1",
14+
"@typescript-eslint/utils": "^8.26.1",
15+
"eslint": "^9.22.0",
16+
"eslint-plugin-import-x": "^4.8.0",
1517
"eslint-plugin-mocha": "^10.1.0",
1618
"eslint-plugin-prefer-arrow": "^1.2.3",
19+
"eslint-plugin-prefer-arrow-functions": "^3.6.2",
1720
"resolve": "^1.22.10",
18-
"typescript": "^5.7.2"
21+
"typescript": "^5.7.2",
22+
"typescript-eslint": "^8.26.1"
23+
},
24+
"peerDependencies": {
25+
"eslint": "^9.22.0"
1926
},
2027
"devDependencies": {
2128
"@tinymce/beehive-flow": "^0.19.0",
2229
"@types/eslint": "^8.56.0",
30+
"@types/eslint-plugin-mocha": "^10.4.0",
2331
"@types/estree": "^1.0.6",
2432
"@types/node": "^22.10.5",
2533
"@types/resolve": "^1.20.6",
@@ -39,6 +47,6 @@
3947
"prepublishOnly": "tsc"
4048
},
4149
"engines": {
42-
"node": ">=9.0.0"
50+
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
4351
}
4452
}

src/main/ts/api/Main.mts

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
import { FlatConfig } from '@typescript-eslint/utils/ts-eslint';
2+
import { base } from '../configs/Standard.mjs';
3+
import { noDirectEditorEvents } from '../rules/NoDirectEditorEvents.js';
4+
import { noDirectEditorOptions } from '../rules/NoDirectEditorOptions.js';
5+
import { noDirectImports } from '../rules/NoDirectImports.js';
6+
import { noEnumsInExportSpecifier } from '../rules/NoEnumsInExportSpecifier.js';
7+
import { noImplicitDomGlobals } from '../rules/NoImplicitDomGlobals.js';
8+
import { noMainModuleImports } from '../rules/NoMainModuleImports.js';
9+
import { noPathAliasImports } from '../rules/NoPathAliasImports.js';
10+
import { noPublicApiModuleImports } from '../rules/NoPublicApiModuleImports.js';
11+
import { preferFun } from '../rules/PreferFun.js';
12+
import { preferMcAgarTinyAssertions } from '../rules/PreferMcAgarTinyAssertions.js';
13+
import { preferMcAgarTinyDom } from '../rules/PreferMcAgarTinyDom.js';
14+
15+
import tseslint from 'typescript-eslint';
16+
17+
const rules = {
18+
'no-direct-editor-events': noDirectEditorEvents,
19+
'no-direct-editor-options': noDirectEditorOptions,
20+
'no-direct-imports': noDirectImports,
21+
'no-enums-in-export-specifier': noEnumsInExportSpecifier,
22+
'no-main-module-imports': noMainModuleImports,
23+
'no-path-alias-imports': noPathAliasImports,
24+
'no-publicapi-module-imports': noPublicApiModuleImports,
25+
'no-implicit-dom-globals': noImplicitDomGlobals,
26+
'prefer-fun': preferFun,
27+
'prefer-mcagar-tiny-assertions': preferMcAgarTinyAssertions,
28+
'prefer-mcagar-tiny-dom': preferMcAgarTinyDom
29+
};
30+
31+
const configs: FlatConfig.SharedConfigs = {
32+
get standard() {
33+
return standard;
34+
},
35+
get editor() {
36+
return editor;
37+
}
38+
};
39+
40+
const plugin: FlatConfig.Plugin = {
41+
rules,
42+
configs,
43+
meta: {
44+
name: '@tinymce/eslint-plugin',
45+
version: '2.4.1-rc'
46+
}
47+
};
48+
49+
const standard = tseslint.config(
50+
base,
51+
{
52+
plugins: {
53+
'@tinymce': plugin
54+
},
55+
rules: {
56+
'@tinymce/no-direct-editor-events': 'off',
57+
'@tinymce/no-direct-editor-options': 'off',
58+
'@tinymce/no-direct-imports': 'error',
59+
'@tinymce/no-enums-in-export-specifier': 'error',
60+
'@tinymce/no-main-module-imports': 'error',
61+
'@tinymce/no-path-alias-imports': 'error',
62+
'@tinymce/no-publicapi-module-imports': 'error',
63+
'@tinymce/no-unimported-promise': 'off',
64+
'@tinymce/no-implicit-dom-globals': 'error',
65+
'@tinymce/prefer-fun': 'error',
66+
'@tinymce/prefer-mcagar-tiny-assertions': 'off',
67+
'@tinymce/prefer-mcagar-tiny-dom': 'off',
68+
}
69+
});
70+
71+
const editor = tseslint.config(
72+
standard,
73+
{
74+
rules: {
75+
76+
'@tinymce/no-direct-editor-events': 'error',
77+
'@tinymce/no-direct-editor-options': 'error',
78+
'@tinymce/prefer-mcagar-tiny-assertions': 'error',
79+
'@tinymce/prefer-mcagar-tiny-dom': 'error',
80+
81+
'@typescript-eslint/explicit-module-boundary-types': [ 'error', { allowArgumentsExplicitlyTypedAsAny: true }],
82+
'@stylistic/comma-dangle': [ 'error', {
83+
arrays: 'only-multiline',
84+
objects: 'only-multiline',
85+
imports: 'never',
86+
exports: 'never',
87+
functions: 'never',
88+
enums: 'never',
89+
generics: 'never',
90+
tuples: 'never'
91+
}],
92+
'arrow-body-style': 'off', // Disabled as it causes readability issues in more complex cases
93+
'import-x/order': [ 'error', {
94+
'newlines-between': 'always',
95+
'groups': [
96+
[ 'builtin', 'external' ],
97+
'internal',
98+
'parent',
99+
'sibling',
100+
'index'
101+
],
102+
'alphabetize': {
103+
order: 'asc',
104+
caseInsensitive: true
105+
}
106+
}],
107+
108+
// Disabled since we're using the stylistic rule
109+
'comma-dangle': 'off',
110+
},
111+
settings: {
112+
'import-x/internal-regex': '^(ephox|tinymce|tiny-premium)/.*'
113+
}
114+
}
115+
);
116+
117+
export default plugin;

src/main/ts/api/Main.ts

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

src/main/ts/configs/Editor.ts

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

0 commit comments

Comments
 (0)