2018-06-05 18:50:06 -07:00

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);
}
}