Skip to content

Commit

Permalink
feat(eslint-plugin): [sort-ngmodule-metadata-arrays] add fixer (#493)
Browse files Browse the repository at this point in the history
  • Loading branch information
timdeschryver committed May 22, 2021
1 parent 70b01bd commit 32fae47
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 7 deletions.
23 changes: 16 additions & 7 deletions packages/eslint-plugin/src/rules/sort-ngmodule-metadata-arrays.ts
Expand Up @@ -32,6 +32,7 @@ export default createESLintRule<Options, MessageIds>({
category: 'Best Practices',
recommended: false,
},
fixable: 'code',
schema: [],
messages: {
sortNgmoduleMetadataArrays:
Expand All @@ -51,18 +52,26 @@ export default createESLintRule<Options, MessageIds>({
) {
return;
}
const unorderedNode = initializer.elements
const unorderedNodes = initializer.elements
.filter(isIdentifier)
.find(({ name }, index, list) => {
const nextElementName = list[index + 1]?.name;
return (
nextElementName && name.localeCompare(nextElementName) === 1
);
.map((current, index, list) => {
return [current, list[index + 1]];
})
.find(([current, next]) => {
return next && current.name.localeCompare(next.name) === 1;
});
if (!unorderedNode) return;
if (!unorderedNodes) return;

const [unorderedNode, nextNode] = unorderedNodes;
context.report({
messageId: 'sortNgmoduleMetadataArrays',
node: unorderedNode,
fix: (fixer) => {
return [
fixer.replaceText(unorderedNode, nextNode.name),
fixer.replaceText(nextNode, unorderedNode.name),
];
},
});
});
},
Expand Down
Expand Up @@ -67,6 +67,18 @@ ruleTester.run(RULE_NAME, rule, {
class Test {}
`,
messageId,
annotatedOutput: `
@NgModule({
imports: [
aModule,
bModule,
cModule,
~~~~~~~
DModule,
]
})
class Test {}
`,
}),
convertAnnotatedSourceToFailureCase({
description: 'it should fail if declarations array is not sorted ASC',
Expand All @@ -83,6 +95,18 @@ ruleTester.run(RULE_NAME, rule, {
class Test {}
`,
messageId,
annotatedOutput: `
@NgModule({
declarations: [
AComponent,
bDirective,
~~~~~
cPipe,
DComponent,
],
})
class Test {}
`,
}),
convertAnnotatedSourceToFailureCase({
description: 'it should fail if exports array is not sorted ASC',
Expand All @@ -99,6 +123,18 @@ ruleTester.run(RULE_NAME, rule, {
class Test {}
`,
messageId,
annotatedOutput: `
@NgModule({
exports: [
AComponent,
bDirective,
~~~~~
cPipe,
DComponent,
],
})
class Test {}
`,
}),
convertAnnotatedSourceToFailureCase({
description: 'it should fail if bootstrap array is not sorted ASC',
Expand All @@ -114,6 +150,17 @@ ruleTester.run(RULE_NAME, rule, {
class Test {}
`,
messageId,
annotatedOutput: `
@NgModule({
bootstrap: [
AppModule2,
AppModule1,
~~~~~~~~~~
AppModule3,
]
})
class Test {}
`,
}),
convertAnnotatedSourceToFailureCase({
description: 'it should fail if schemas array is not sorted ASC',
Expand All @@ -129,6 +176,17 @@ ruleTester.run(RULE_NAME, rule, {
class Test {}
`,
messageId,
annotatedOutput: `
@NgModule({
schemas: [
A_SCHEMA,
B_SCHEMA,
~~~~~~~~
C_SCHEMA,
]
})
class Test {}
`,
}),
convertAnnotatedSourceToFailureCase({
description:
Expand All @@ -150,6 +208,22 @@ ruleTester.run(RULE_NAME, rule, {
class Test {}
`,
messageId,
annotatedOutput: `
@NgModule({
imports: [
AProvider,
{
provide: 'myprovider',
useClass: MyProvider,
},
bProvider,
~~~~~~~~~
cProvider,
DProvider,
]
})
class Test {}
`,
}),
],
});

0 comments on commit 32fae47

Please sign in to comment.