In an effort to centralize formatting and linting enforcement into one location, buildifier is being added as a formatter for ng-dev's format command. Allowing for format enforcement for all .bzl, .bazel, WORKSPACE and BUILD files. PR Close #36842
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.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 {prompt} from 'inquirer';
 | 
						|
import {runFormatterInParallel} from './run-commands-parallel';
 | 
						|
 | 
						|
/**
 | 
						|
 * Format provided files in place.
 | 
						|
 */
 | 
						|
export async function formatFiles(files: string[]) {
 | 
						|
  // Whether any files failed to format.
 | 
						|
  let failures = await runFormatterInParallel(files, 'format');
 | 
						|
 | 
						|
  if (failures === false) {
 | 
						|
    console.info('No files matched for formatting.');
 | 
						|
    process.exit(0);
 | 
						|
  }
 | 
						|
 | 
						|
  // The process should exit as a failure if any of the files failed to format.
 | 
						|
  if (failures.length !== 0) {
 | 
						|
    console.error(`Formatting failed, see errors above for more information.`);
 | 
						|
    process.exit(1);
 | 
						|
  }
 | 
						|
  console.info(`√  Formatting complete.`);
 | 
						|
  process.exit(0);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Check provided files for formatting correctness.
 | 
						|
 */
 | 
						|
export async function checkFiles(files: string[]) {
 | 
						|
  // Files which are currently not formatted correctly.
 | 
						|
  const failures = await runFormatterInParallel(files, 'check');
 | 
						|
 | 
						|
  if (failures === false) {
 | 
						|
    console.info('No files matched for formatting check.');
 | 
						|
    process.exit(0);
 | 
						|
  }
 | 
						|
 | 
						|
  if (failures.length) {
 | 
						|
    // Provide output expressing which files are failing formatting.
 | 
						|
    console.group('\nThe following files are out of format:');
 | 
						|
    for (const file of failures) {
 | 
						|
      console.info(`  - ${file}`);
 | 
						|
    }
 | 
						|
    console.groupEnd();
 | 
						|
    console.info();
 | 
						|
 | 
						|
    // If the command is run in a non-CI environment, prompt to format the files immediately.
 | 
						|
    let runFormatter = false;
 | 
						|
    if (!process.env['CI']) {
 | 
						|
      runFormatter = (await prompt({
 | 
						|
                       type: 'confirm',
 | 
						|
                       name: 'runFormatter',
 | 
						|
                       message: 'Format the files now?',
 | 
						|
                     })).runFormatter;
 | 
						|
    }
 | 
						|
 | 
						|
    if (runFormatter) {
 | 
						|
      // Format the failing files as requested.
 | 
						|
      await formatFiles(failures);
 | 
						|
      process.exit(0);
 | 
						|
    } else {
 | 
						|
      // Inform user how to format files in the future.
 | 
						|
      console.info();
 | 
						|
      console.info(`To format the failing file run the following command:`);
 | 
						|
      console.info(`  yarn ng-dev format files ${failures.join(' ')}`);
 | 
						|
      process.exit(1);
 | 
						|
    }
 | 
						|
  } else {
 | 
						|
    console.info('√  All files correctly formatted.');
 | 
						|
    process.exit(0);
 | 
						|
  }
 | 
						|
}
 |