mirror of
https://github.com/angular/angular-cli.git
synced 2025-05-14 17:43:52 +08:00
76 lines
2.4 KiB
TypeScript
76 lines
2.4 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
|
|
*/
|
|
// tslint:disable:no-implicit-dependencies
|
|
import { logging } from '@angular-devkit/core';
|
|
import { ParsedArgs } from 'minimist';
|
|
import * as path from 'path';
|
|
import { Configuration, ILinterOptions, Linter, findFormatter } from 'tslint';
|
|
import * as ts from 'typescript';
|
|
|
|
|
|
function _buildRules(logger: logging.Logger) {
|
|
const tsConfigPath = path.join(__dirname, '../rules/tsconfig.json');
|
|
const configFile = ts.readConfigFile(tsConfigPath, ts.sys.readFile);
|
|
|
|
const parsedTsConfig = ts.parseJsonConfigFileContent(
|
|
configFile.config,
|
|
ts.sys,
|
|
path.dirname(tsConfigPath),
|
|
);
|
|
const lintRulesProgram = ts.createProgram(parsedTsConfig.fileNames, parsedTsConfig.options);
|
|
const result = lintRulesProgram.emit();
|
|
|
|
if (result.emitSkipped) {
|
|
const host: ts.FormatDiagnosticsHost = {
|
|
getCurrentDirectory: () => ts.sys.getCurrentDirectory(),
|
|
getNewLine: () => ts.sys.newLine,
|
|
getCanonicalFileName: (fileName: string) => fileName,
|
|
};
|
|
logger.fatal(ts.formatDiagnostics(result.diagnostics, host));
|
|
process.exit(100);
|
|
}
|
|
}
|
|
|
|
|
|
export default function (options: ParsedArgs, logger: logging.Logger) {
|
|
_buildRules(logger);
|
|
|
|
const lintOptions: ILinterOptions = {
|
|
fix: options.fix,
|
|
};
|
|
|
|
const program = Linter.createProgram(path.join(__dirname, '../tsconfig.json'));
|
|
const linter = new Linter(lintOptions, program);
|
|
const tsLintPath = path.join(__dirname, '../tslint.json');
|
|
const tsLintConfig = Configuration.loadConfigurationFromPath(tsLintPath);
|
|
|
|
program.getRootFileNames().forEach(fileName => {
|
|
linter.lint(fileName, ts.sys.readFile(fileName) || '', tsLintConfig);
|
|
});
|
|
|
|
const result = linter.getResult();
|
|
const Formatter = findFormatter('codeFrame');
|
|
if (!Formatter) {
|
|
throw new Error('Cannot find lint formatter.');
|
|
}
|
|
const formatter = new Formatter();
|
|
|
|
if (result.errorCount > 0) {
|
|
logger.error(formatter.format(result.failures));
|
|
logger.info(`Errors: ${result.errorCount}`);
|
|
if (result.warningCount > 0) {
|
|
logger.info(`Warnings: ${result.warningCount}`);
|
|
}
|
|
process.exit(2);
|
|
} else if (result.warningCount > 0) {
|
|
logger.warn(formatter.format(result.failures));
|
|
logger.info(`Warnings: ${result.warningCount}`);
|
|
process.exit(1);
|
|
}
|
|
}
|