feat(dev-infra): migrate format tool to use new logging system (#37232)
Migrate the formatting tool in ng-dev to use new logging system rather than directly calling console.* to create a better experience for users. PR Close #37232
This commit is contained in:
parent
52c7aae4df
commit
40e357411e
|
@ -7,6 +7,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import {prompt} from 'inquirer';
|
import {prompt} from 'inquirer';
|
||||||
|
|
||||||
|
import {error, info} from '../utils/console';
|
||||||
|
|
||||||
import {runFormatterInParallel} from './run-commands-parallel';
|
import {runFormatterInParallel} from './run-commands-parallel';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,16 +20,16 @@ export async function formatFiles(files: string[]) {
|
||||||
let failures = await runFormatterInParallel(files, 'format');
|
let failures = await runFormatterInParallel(files, 'format');
|
||||||
|
|
||||||
if (failures === false) {
|
if (failures === false) {
|
||||||
console.info('No files matched for formatting.');
|
info('No files matched for formatting.');
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The process should exit as a failure if any of the files failed to format.
|
// The process should exit as a failure if any of the files failed to format.
|
||||||
if (failures.length !== 0) {
|
if (failures.length !== 0) {
|
||||||
console.error(`Formatting failed, see errors above for more information.`);
|
error(`Formatting failed, see errors above for more information.`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
console.info(`√ Formatting complete.`);
|
info(`√ Formatting complete.`);
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,18 +41,18 @@ export async function checkFiles(files: string[]) {
|
||||||
const failures = await runFormatterInParallel(files, 'check');
|
const failures = await runFormatterInParallel(files, 'check');
|
||||||
|
|
||||||
if (failures === false) {
|
if (failures === false) {
|
||||||
console.info('No files matched for formatting check.');
|
info('No files matched for formatting check.');
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (failures.length) {
|
if (failures.length) {
|
||||||
// Provide output expressing which files are failing formatting.
|
// Provide output expressing which files are failing formatting.
|
||||||
console.group('\nThe following files are out of format:');
|
info.group('\nThe following files are out of format:');
|
||||||
for (const file of failures) {
|
for (const file of failures) {
|
||||||
console.info(` - ${file}`);
|
info(` - ${file}`);
|
||||||
}
|
}
|
||||||
console.groupEnd();
|
info.groupEnd();
|
||||||
console.info();
|
info();
|
||||||
|
|
||||||
// If the command is run in a non-CI environment, prompt to format the files immediately.
|
// If the command is run in a non-CI environment, prompt to format the files immediately.
|
||||||
let runFormatter = false;
|
let runFormatter = false;
|
||||||
|
@ -67,13 +70,13 @@ export async function checkFiles(files: string[]) {
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
} else {
|
} else {
|
||||||
// Inform user how to format files in the future.
|
// Inform user how to format files in the future.
|
||||||
console.info();
|
info();
|
||||||
console.info(`To format the failing file run the following command:`);
|
info(`To format the failing file run the following command:`);
|
||||||
console.info(` yarn ng-dev format files ${failures.join(' ')}`);
|
info(` yarn ng-dev format files ${failures.join(' ')}`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
console.info('√ All files correctly formatted.');
|
info('√ All files correctly formatted.');
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
import {join} from 'path';
|
import {join} from 'path';
|
||||||
|
|
||||||
import {getRepoBaseDir} from '../../utils/config';
|
import {getRepoBaseDir} from '../../utils/config';
|
||||||
|
import {error} from '../../utils/console';
|
||||||
|
|
||||||
import {Formatter} from './base-formatter';
|
import {Formatter} from './base-formatter';
|
||||||
|
|
||||||
|
@ -35,9 +36,9 @@ export class Buildifier extends Formatter {
|
||||||
callback:
|
callback:
|
||||||
(file: string, code: number, _: string, stderr: string) => {
|
(file: string, code: number, _: string, stderr: string) => {
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
console.error(`Error running buildifier on: ${file}`);
|
error(`Error running buildifier on: ${file}`);
|
||||||
console.error(stderr);
|
error(stderr);
|
||||||
console.error();
|
error();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
import {join} from 'path';
|
import {join} from 'path';
|
||||||
|
|
||||||
import {getRepoBaseDir} from '../../utils/config';
|
import {getRepoBaseDir} from '../../utils/config';
|
||||||
|
import {error} from '../../utils/console';
|
||||||
|
|
||||||
import {Formatter} from './base-formatter';
|
import {Formatter} from './base-formatter';
|
||||||
|
|
||||||
|
@ -35,9 +36,9 @@ export class ClangFormat extends Formatter {
|
||||||
callback:
|
callback:
|
||||||
(file: string, code: number, _: string, stderr: string) => {
|
(file: string, code: number, _: string, stderr: string) => {
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
console.error(`Error running clang-format on: ${file}`);
|
error(`Error running clang-format on: ${file}`);
|
||||||
console.error(stderr);
|
error(stderr);
|
||||||
console.error();
|
error();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -11,6 +11,8 @@ import * as multimatch from 'multimatch';
|
||||||
import {cpus} from 'os';
|
import {cpus} from 'os';
|
||||||
import {exec} from 'shelljs';
|
import {exec} from 'shelljs';
|
||||||
|
|
||||||
|
import {info} from '../utils/console';
|
||||||
|
|
||||||
import {Formatter, FormatterAction, getActiveFormatters} from './formatters';
|
import {Formatter, FormatterAction, getActiveFormatters} from './formatters';
|
||||||
|
|
||||||
const AVAILABLE_THREADS = Math.max(cpus().length - 1, 1);
|
const AVAILABLE_THREADS = Math.max(cpus().length - 1, 1);
|
||||||
|
@ -47,10 +49,10 @@ export function runFormatterInParallel(allFiles: string[], action: FormatterActi
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case 'format':
|
case 'format':
|
||||||
console.info(`Formatting ${pendingCommands.length} file(s)`);
|
info(`Formatting ${pendingCommands.length} file(s)`);
|
||||||
break;
|
break;
|
||||||
case 'check':
|
case 'check':
|
||||||
console.info(`Checking format of ${pendingCommands.length} file(s)`);
|
info(`Checking format of ${pendingCommands.length} file(s)`);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw Error(`Invalid format action "${action}": allowed actions are "format" and "check"`);
|
throw Error(`Invalid format action "${action}": allowed actions are "format" and "check"`);
|
||||||
|
|
Loading…
Reference in New Issue