Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f592540

Browse files
Sergeybradzacher
Sergey
authored andcommitted
feat(eslint-plugin): [member-ordering] add support for getters and setters (typescript-eslint#3611)
* Getters/setters * Fix decorated ordering * Add test
1 parent 3bfb0a1 commit f592540

File tree

3 files changed

+412
-3
lines changed

3 files changed

+412
-3
lines changed

packages/eslint-plugin/docs/rules/member-ordering.md

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,64 @@ There are multiple ways to specify the member types. The most explicit and granu
7777
"protected-constructor",
7878
"private-constructor",
7979

80+
// Getters
81+
"public-static-get",
82+
"protected-static-get",
83+
"private-static-get",
84+
85+
"public-decorated-get",
86+
"protected-decorated-get",
87+
"private-decorated-get",
88+
89+
"public-instance-get",
90+
"protected-instance-get",
91+
"private-instance-get",
92+
93+
"public-abstract-get",
94+
"protected-abstract-get",
95+
"private-abstract-get",
96+
97+
"public-get",
98+
"protected-get",
99+
"private-get",
100+
101+
"static-get",
102+
"instance-get",
103+
"abstract-get",
104+
105+
"decorated-get",
106+
107+
"get",
108+
109+
// Setters
110+
"public-static-set",
111+
"protected-static-set",
112+
"private-static-set",
113+
114+
"public-decorated-set",
115+
"protected-decorated-set",
116+
"private-decorated-set",
117+
118+
"public-instance-set",
119+
"protected-instance-set",
120+
"private-instance-set",
121+
122+
"public-abstract-set",
123+
"protected-abstract-set",
124+
"private-abstract-set",
125+
126+
"public-set",
127+
"protected-set",
128+
"private-set",
129+
130+
"static-set",
131+
"instance-set",
132+
"abstract-set",
133+
134+
"decorated-set",
135+
136+
"set",
137+
80138
// Methods
81139
"public-static-method",
82140
"protected-static-method",
@@ -112,6 +170,16 @@ It is also possible to group member types by their accessibility (`static`, `ins
112170
// Constructors
113171
// Only the accessibility of constructors is configurable. See below.
114172

173+
// Getters
174+
"public-get", // = ["public-static-get", "public-instance-get"]
175+
"protected-get", // = ["protected-static-get", "protected-instance-get"]
176+
"private-get", // = ["private-static-get", "private-instance-get"]
177+
178+
// Setters
179+
"public-set", // = ["public-static-set", "public-instance-set"]
180+
"protected-set", // = ["protected-static-set", "protected-instance-set"]
181+
"private-set", // = ["private-static-set", "private-instance-set"]
182+
115183
// Methods
116184
"public-method", // = ["public-static-method", "public-instance-method"]
117185
"protected-method", // = ["protected-static-method", "protected-instance-method"]
@@ -139,6 +207,21 @@ their accessibility.
139207
// Constructors
140208
// There are no decorators for constructors.
141209

210+
// Getters
211+
"public-decorated-get",
212+
"protected-decorated-get",
213+
"private-decorated-get",
214+
215+
"decorated-get" // = ["public-decorated-get", "protected-decorated-get", "private-decorated-get"]
216+
217+
// Setters
218+
"public-decorated-set",
219+
"protected-decorated-set",
220+
"private-decorated-set",
221+
222+
"decorated-set" // = ["public-decorated-set", "protected-decorated-set", "private-decorated-set"]
223+
224+
// Methods
142225
"public-decorated-method",
143226
"protected-decorated-method",
144227
"private-decorated-method",
@@ -164,6 +247,16 @@ Another option is to group the member types by their scope (`public`, `protected
164247
// Constructors
165248
"constructor", // = ["public-constructor", "protected-constructor", "private-constructor"]
166249

250+
// Getters
251+
"static-get", // = ["public-static-get", "protected-static-get", "private-static-get"]
252+
"instance-get", // = ["public-instance-get", "protected-instance-get", "private-instance-get"]
253+
"abstract-get" // = ["public-abstract-get", "protected-abstract-get", "private-abstract-get"]
254+
255+
// Setters
256+
"static-set", // = ["public-static-set", "protected-static-set", "private-static-set"]
257+
"instance-set", // = ["public-instance-set", "protected-instance-set", "private-instance-set"]
258+
"abstract-set" // = ["public-abstract-set", "protected-abstract-set", "private-abstract-set"]
259+
167260
// Methods
168261
"static-method", // = ["public-static-method", "protected-static-method", "private-static-method"]
169262
"instance-method", // = ["public-instance-method", "protected-instance-method", "private-instance-method"]
@@ -187,6 +280,14 @@ The third grouping option is to ignore both scope and accessibility.
187280
// Constructors
188281
// Only the accessibility of constructors is configurable. See above.
189282

283+
// Getters
284+
"get" // = ["public-static-get", "protected-static-get", "private-static-get", "public-instance-get", "protected-instance-get", "private-instance-get",
285+
// "public-abstract-get", "protected-abstract-get", "private-abstract-get"]
286+
287+
// Setters
288+
"set" // = ["public-static-set", "protected-static-set", "private-static-set", "public-instance-set", "protected-instance-set", "private-instance-set",
289+
// "public-abstract-set", "protected-abstract-set", "private-abstract-set"]
290+
190291
// Methods
191292
"method" // = ["public-static-method", "protected-static-method", "private-static-method", "public-instance-method", "protected-instance-method", "private-instance-method",
192293
// "public-abstract-method", "protected-abstract-method", "private-abstract-method"]
@@ -239,6 +340,64 @@ The default configuration looks as follows:
239340

240341
"constructor",
241342

343+
// Getters
344+
"public-static-get",
345+
"protected-static-get",
346+
"private-static-get",
347+
348+
"public-decorated-get",
349+
"protected-decorated-get",
350+
"private-decorated-get",
351+
352+
"public-instance-get",
353+
"protected-instance-get",
354+
"private-instance-get",
355+
356+
"public-abstract-get",
357+
"protected-abstract-get",
358+
"private-abstract-get",
359+
360+
"public-get",
361+
"protected-get",
362+
"private-get",
363+
364+
"static-get",
365+
"instance-get",
366+
"abstract-get",
367+
368+
"decorated-get",
369+
370+
"get",
371+
372+
// Setters
373+
"public-static-set",
374+
"protected-static-set",
375+
"private-static-set",
376+
377+
"public-decorated-set",
378+
"protected-decorated-set",
379+
"private-decorated-set",
380+
381+
"public-instance-set",
382+
"protected-instance-set",
383+
"private-instance-set",
384+
385+
"public-abstract-set",
386+
"protected-abstract-set",
387+
"private-abstract-set",
388+
389+
"public-set",
390+
"protected-set",
391+
"private-set",
392+
393+
"static-set",
394+
"instance-set",
395+
"abstract-set",
396+
397+
"decorated-set",
398+
399+
"set",
400+
242401
// Methods
243402
"public-static-method",
244403
"protected-static-method",

packages/eslint-plugin/src/rules/member-ordering.ts

Lines changed: 74 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,64 @@ export const defaultOrder = [
9393

9494
'constructor',
9595

96+
// Getters
97+
'public-static-get',
98+
'protected-static-get',
99+
'private-static-get',
100+
101+
'public-decorated-get',
102+
'protected-decorated-get',
103+
'private-decorated-get',
104+
105+
'public-instance-get',
106+
'protected-instance-get',
107+
'private-instance-get',
108+
109+
'public-abstract-get',
110+
'protected-abstract-get',
111+
'private-abstract-get',
112+
113+
'public-get',
114+
'protected-get',
115+
'private-get',
116+
117+
'static-get',
118+
'instance-get',
119+
'abstract-get',
120+
121+
'decorated-get',
122+
123+
'get',
124+
125+
// Setters
126+
'public-static-set',
127+
'protected-static-set',
128+
'private-static-set',
129+
130+
'public-decorated-set',
131+
'protected-decorated-set',
132+
'private-decorated-set',
133+
134+
'public-instance-set',
135+
'protected-instance-set',
136+
'private-instance-set',
137+
138+
'public-abstract-set',
139+
'protected-abstract-set',
140+
'private-abstract-set',
141+
142+
'public-set',
143+
'protected-set',
144+
'private-set',
145+
146+
'static-set',
147+
'instance-set',
148+
'abstract-set',
149+
150+
'decorated-set',
151+
152+
'set',
153+
96154
// Methods
97155
'public-static-method',
98156
'protected-static-method',
@@ -129,6 +187,8 @@ const allMemberTypes = [
129187
'method',
130188
'call-signature',
131189
'constructor',
190+
'get',
191+
'set',
132192
].reduce<string[]>((all, type) => {
133193
all.push(type);
134194

@@ -137,8 +197,13 @@ const allMemberTypes = [
137197
all.push(`${accessibility}-${type}`); // e.g. `public-field`
138198
}
139199

140-
// Only class instance fields and methods can have decorators attached to them
141-
if (type === 'field' || type === 'method') {
200+
// Only class instance fields, methods, get and set can have decorators attached to them
201+
if (
202+
type === 'field' ||
203+
type === 'method' ||
204+
type === 'get' ||
205+
type === 'set'
206+
) {
142207
const decoratedMemberType = `${accessibility}-decorated-${type}`;
143208
const decoratedMemberTypeNoAccessibility = `decorated-${type}`;
144209
if (!all.includes(decoratedMemberType)) {
@@ -292,7 +357,13 @@ function getRank(
292357

293358
if (supportsModifiers) {
294359
const decorated = 'decorators' in node && node.decorators!.length > 0;
295-
if (decorated && (type === 'field' || type === 'method')) {
360+
if (
361+
decorated &&
362+
(type === 'field' ||
363+
type === 'method' ||
364+
type === 'get' ||
365+
type === 'set')
366+
) {
296367
memberGroups.push(`${accessibility}-decorated-${type}`);
297368
memberGroups.push(`decorated-${type}`);
298369
}

0 commit comments

Comments
 (0)