8000
We read every piece of feedback, and take your input very seriously.
1 parent ced6591 commit 00ac9c3Copy full SHA for 00ac9c3
packages/eslint-plugin/src/rules/prefer-literal-enum-member.ts
@@ -1,7 +1,7 @@
1
import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils';
2
import { createRule } from '../util';
3
4
-export default createRule<[], 'notLiteral'>({
+export default createRule({
5
name: 'prefer-literal-enum-member',
6
meta: {
7
type: 'suggestion',
@@ -22,15 +22,26 @@ export default createRule<[], 'notLiteral'>({
22
return {
23
TSEnumMember(node): void {
24
// If there is no initializer, then this node is just the name of the member, so ignore.
25
+ if (node.initializer == null) {
26
+ return;
27
+ }
28
+ // any old literal
29
+ if (node.initializer.type === AST_NODE_TYPES.Literal) {
30
31
32
+ // -1 and +1
33
if (
- node.initializer != null &&
- node.initializer.type !== AST_NODE_TYPES.Literal
34
+ node.initializer.type === AST_NODE_TYPES.UnaryExpression &&
35
+ ['+', '-'].includes(node.initializer.operator) &&
36
+ node.initializer.argument.type === AST_NODE_TYPES.Literal
37
) {
- context.report({
- node: node.id,
- messageId: 'notLiteral',
- });
38
39
}
40
+
41
+ context.report({
42
+ node: node.id,
43
+ messageId: 'notLiteral',
44
+ });
45
},
46
};
47
packages/eslint-plugin/tests/rules/prefer-literal-enum-member.test.ts
@@ -23,6 +23,16 @@ enum ValidNumber {
`,
`
+enum ValidNumber {
+ A = -42,
+}
+ `,
+ `
+ A = +42,
enum ValidNull {
A = null,
@@ -121,6 +131,44 @@ enum InvalidExpression {
121
131
122
132
{
123
133
code: `
134
+enum InvalidExpression {
135
+ A = delete 2,
136
+ B = -a,
137
+ C = void 2,
138
+ D = ~2,
139
+ E = !0,
140
141
142
+ errors: [
143
+ {
144
145
+ line: 3,
146
+ column: 3,
147
+ },
148
149
150
+ line: 4,
151
152
153
154
155
+ line: 5,
156
157
158
159
160
+ line: 6,
161
162
163
164
165
+ line: 7,
166
167
168
+ ],
169
170
171
+ code: `
124
172
const variable = 'Test';
125
173
enum InvalidVariable {
126
174
A = 'TestStr',