mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-17 02:54:21 +08:00
51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google Inc. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.io/license
|
|
*/
|
|
import {
|
|
DirEntry,
|
|
Rule,
|
|
SchematicContext,
|
|
SchematicsException,
|
|
Tree,
|
|
} from '@angular-devkit/schematics';
|
|
import { TslintFixTask } from '@angular-devkit/schematics/tasks';
|
|
|
|
export function applyLintFix(path = '/'): Rule {
|
|
return (tree: Tree, context: SchematicContext) => {
|
|
// Find the closest tsling.json
|
|
let dir: DirEntry | null = tree.getDir(path.substr(0, path.lastIndexOf('/')));
|
|
|
|
do {
|
|
if ((dir.subfiles as string[]).includes('tslint.json')) {
|
|
break;
|
|
}
|
|
|
|
dir = dir.parent;
|
|
} while (dir !== null);
|
|
|
|
if (dir === null) {
|
|
throw new SchematicsException('Asked to run lint fixes, but could not find a tslint.json.');
|
|
}
|
|
|
|
// Only include files that have been touched.
|
|
const files = tree.actions.reduce((acc: Set<string>, action) => {
|
|
const path = action.path.substr(1); // Remove the starting '/'.
|
|
if (path.endsWith('.ts') && dir && action.path.startsWith(dir.path)) {
|
|
acc.add(path);
|
|
}
|
|
|
|
return acc;
|
|
}, new Set<string>());
|
|
|
|
context.addTask(new TslintFixTask({
|
|
ignoreErrors: true,
|
|
tsConfigPath: 'tsconfig.json',
|
|
files: [...files],
|
|
}));
|
|
};
|
|
}
|