diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 04ecf049ca9..f11f5928527 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,6 +1,14 @@ const DOMGlobals = ['window', 'document'] const NodeGlobals = ['module', 'require'] +const banConstEnum = { + selector: 'TSEnumDeclaration[const=true]', + message: 'Please use enums, instead', +} + +/** + * @type {import('eslint-define-config').ESLintConfig} + */ module.exports = { parser: '@typescript-eslint/parser', parserOptions: { @@ -20,6 +28,7 @@ module.exports = { 'no-restricted-syntax': [ 'error', + banConstEnum, // since we target ES2015 for baseline support, we need to forbid object // rest spread usage in destructure as it compiles into a verbose helper. 'ObjectPattern > RestElement', @@ -61,7 +70,10 @@ module.exports = { ], rules: { 'no-restricted-globals': ['error', ...DOMGlobals], - 'no-restricted-syntax': 'off' + 'no-restricted-syntax': [ + 'error', + banConstEnum, + ] } }, // Private package, browser only + no syntax restrictions @@ -69,7 +81,10 @@ module.exports = { files: ['packages/template-explorer/**', 'packages/sfc-playground/**'], rules: { 'no-restricted-globals': ['error', ...NodeGlobals], - 'no-restricted-syntax': 'off' + 'no-restricted-syntax': [ + 'error', + banConstEnum, + ] } }, // Node scripts @@ -77,7 +92,10 @@ module.exports = { files: ['scripts/**', '*.{js,ts}', 'packages/**/index.js'], rules: { 'no-restricted-globals': 'off', - 'no-restricted-syntax': 'off' + 'no-restricted-syntax': [ + 'error', + banConstEnum, + ] } } ] diff --git a/package.json b/package.json index 1b08c54e852..c28a7103850 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "esbuild": "^0.19.3", "esbuild-plugin-polyfill-node": "^0.3.0", "eslint": "^8.49.0", + "eslint-define-config": "^1.23.0", "eslint-plugin-jest": "^27.4.0", "estree-walker": "^2.0.2", "execa": "^4.1.0", diff --git a/packages/compiler-core/src/ast.ts b/packages/compiler-core/src/ast.ts index 515083c336a..a3c125bf60b 100644 --- a/packages/compiler-core/src/ast.ts +++ b/packages/compiler-core/src/ast.ts @@ -21,11 +21,11 @@ import { ImportItem, TransformContext } from './transform' // compilers. export type Namespace = number -export const enum Namespaces { +export enum Namespaces { HTML } -export const enum NodeTypes { +export enum NodeTypes { ROOT, ELEMENT, TEXT, @@ -59,7 +59,7 @@ export const enum NodeTypes { JS_RETURN_STATEMENT } -export const enum ElementTypes { +export enum ElementTypes { ELEMENT, COMPONENT, SLOT, @@ -202,7 +202,7 @@ export interface DirectiveNode extends Node { * Higher levels implies lower levels. e.g. a node that can be stringified * can always be hoisted and skipped for patch. */ -export const enum ConstantTypes { +export enum ConstantTypes { NOT_CONSTANT = 0, CAN_SKIP_PATCH, CAN_HOIST, diff --git a/packages/compiler-core/src/compat/compatConfig.ts b/packages/compiler-core/src/compat/compatConfig.ts index dcb304263b4..83f9d6ea3cf 100644 --- a/packages/compiler-core/src/compat/compatConfig.ts +++ b/packages/compiler-core/src/compat/compatConfig.ts @@ -13,7 +13,7 @@ export interface CompilerCompatOptions { compatConfig?: CompilerCompatConfig } -export const enum CompilerDeprecationTypes { +export enum CompilerDeprecationTypes { COMPILER_IS_ON_ELEMENT = 'COMPILER_IS_ON_ELEMENT', COMPILER_V_BIND_SYNC = 'COMPILER_V_BIND_SYNC', COMPILER_V_BIND_PROP = 'COMPILER_V_BIND_PROP', diff --git a/packages/compiler-core/src/errors.ts b/packages/compiler-core/src/errors.ts index 36ab783edbe..1fbd5fd5b49 100644 --- a/packages/compiler-core/src/errors.ts +++ b/packages/compiler-core/src/errors.ts @@ -37,7 +37,7 @@ export function createCompilerError( return error } -export const enum ErrorCodes { +export enum ErrorCodes { // parse errors ABRUPT_CLOSING_OF_EMPTY_COMMENT, CDATA_IN_HTML_CONTENT, diff --git a/packages/compiler-core/src/options.ts b/packages/compiler-core/src/options.ts index 65bbcb36dd6..069f2256b92 100644 --- a/packages/compiler-core/src/options.ts +++ b/packages/compiler-core/src/options.ts @@ -73,7 +73,7 @@ export type HoistTransform = ( parent: ParentNode ) => void -export const enum BindingTypes { +export enum BindingTypes { /** * returned from data() */ diff --git a/packages/compiler-core/src/parse.ts b/packages/compiler-core/src/parse.ts index b72ad028b4b..4c536c5c9cb 100644 --- a/packages/compiler-core/src/parse.ts +++ b/packages/compiler-core/src/parse.ts @@ -80,7 +80,7 @@ export const defaultParserOptions: MergedParserOptions = { comments: __DEV__ } -export const enum TextModes { +export enum TextModes { // | Elements | Entities | End sign | Inside of DATA, // | ✔ | ✔ | End tags of ancestors | RCDATA, // | ✘ | ✔ | End tag of the parent |