Merge pull request #9389 from backstage/rugvip/lint

cli: tweak lint rules and switch ESLint invocation method
This commit is contained in:
Ben Lambert
2022-02-07 15:09:28 +01:00
committed by GitHub
5 changed files with 41 additions and 39 deletions
+9
View File
@@ -0,0 +1,9 @@
---
'@backstage/cli': patch
---
Removed the `import/no-duplicates` lint rule from the frontend and backend ESLint configurations. This rule is quite expensive to execute and only provides a purely cosmetic benefit, so we opted to remove it from the set of default rules. If you would like to keep this rule you can add it back in your local ESLint configuration:
```js
'import/no-duplicates': 'warn'
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Switched the `lint` command to invoke ESLint directly through its Node.js API rather than spawning a new process.
+1 -12
View File
@@ -54,11 +54,10 @@ module.exports = {
'no-console': 0, // Permitted in console programs
'new-cap': ['error', { capIsNew: false }], // Because Express constructs things e.g. like 'const r = express.Router()'
'import/newline-after-import': 'error',
'import/no-duplicates': 'warn',
'import/no-extraneous-dependencies': [
'error',
{
devDependencies: false,
devDependencies: ['**/*.test.*', 'src/setupTests.*', 'dev/**'],
optionalDependencies: true,
peerDependencies: true,
bundledDependencies: true,
@@ -97,16 +96,6 @@ module.exports = {
{
files: ['*.test.*', 'src/setupTests.*', 'dev/**'],
rules: {
// Tests are allowed to import dev dependencies
'import/no-extraneous-dependencies': [
'error',
{
devDependencies: true,
optionalDependencies: true,
peerDependencies: true,
bundledDependencies: true,
},
],
'no-restricted-syntax': ['error', ...globalRestrictedSyntax],
},
},
+6 -17
View File
@@ -49,11 +49,15 @@ module.exports = {
'@typescript-eslint/no-redeclare': 'error',
'no-undef': 'off',
'import/newline-after-import': 'error',
'import/no-duplicates': 'warn',
'import/no-extraneous-dependencies': [
'error',
{
devDependencies: false,
devDependencies: [
'**/*.test.*',
'**/*.stories.*',
'src/setupTests.*',
'dev/**',
],
optionalDependencies: true,
peerDependencies: true,
bundledDependencies: true,
@@ -101,20 +105,5 @@ module.exports = {
'no-undef': 'off',
},
},
{
files: ['*.test.*', '*.stories.*', 'src/setupTests.*', 'dev/**'],
rules: {
// Tests are allowed to import dev dependencies
'import/no-extraneous-dependencies': [
'error',
{
devDependencies: true,
optionalDependencies: true,
peerDependencies: true,
bundledDependencies: true,
},
],
},
},
],
};
+20 -10
View File
@@ -15,19 +15,29 @@
*/
import { Command } from 'commander';
import { run } from '../lib/run';
import { paths } from '../lib/paths';
import { ESLint } from 'eslint';
export default async (cmd: Command) => {
const eslint = new ESLint({
cwd: paths.targetDir,
fix: cmd.fix,
extensions: ['js', 'jsx', 'ts', 'tsx', 'mjs', 'cjs'],
});
const results = await eslint.lintFiles(['.']);
export default async (cmd: Command, cmdArgs: string[]) => {
const args = [
'--ext=js,jsx,ts,tsx,mjs,cjs',
'--max-warnings=0',
`--format=${cmd.format}`,
...(cmdArgs ?? [paths.targetDir]),
];
if (cmd.fix) {
args.push('--fix');
await ESLint.outputFixes(results);
}
await run('eslint', args);
const formatter = await eslint.loadFormatter(cmd.format);
const resultText = formatter.format(results);
// If there is any feedback at all, we treat it as a lint failure. This should be
// consistent with our old behavior of passing `--max-warnings=0` when invoking eslint.
if (resultText) {
console.log(resultText);
process.exit(1);
}
};