You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					72 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					72 lines
				
				2.0 KiB
			| 
											3 years ago
										 | #!/usr/bin/env node
 | ||
|  | 
 | ||
|  | const spawn = require('child_process').spawnSync; | ||
|  | const path = require('path'); | ||
|  | 
 | ||
|  | const filesToCheck = ['*.h', '*.cc']; | ||
|  | const FORMAT_START = process.env.FORMAT_START || 'main'; | ||
|  | 
 | ||
|  | function main (args) { | ||
|  |   let fix = false; | ||
|  |   while (args.length > 0) { | ||
|  |     switch (args[0]) { | ||
|  |       case '-f': | ||
|  |       case '--fix': | ||
|  |         fix = true; | ||
|  |         break; | ||
|  |       default: | ||
|  |     } | ||
|  |     args.shift(); | ||
|  |   } | ||
|  | 
 | ||
|  |   const clangFormatPath = path.dirname(require.resolve('clang-format')); | ||
|  |   const binary = process.platform === 'win32' | ||
|  |     ? 'node_modules\\.bin\\clang-format.cmd' | ||
|  |     : 'node_modules/.bin/clang-format'; | ||
|  |   const options = ['--binary=' + binary, '--style=file']; | ||
|  |   if (fix) { | ||
|  |     options.push(FORMAT_START); | ||
|  |   } else { | ||
|  |     options.push('--diff', FORMAT_START); | ||
|  |   } | ||
|  | 
 | ||
|  |   const gitClangFormatPath = path.join(clangFormatPath, 'bin/git-clang-format'); | ||
|  |   const result = spawn( | ||
|  |     'python', | ||
|  |     [gitClangFormatPath, ...options, '--', ...filesToCheck], | ||
|  |     { encoding: 'utf-8' } | ||
|  |   ); | ||
|  | 
 | ||
|  |   if (result.stderr) { | ||
|  |     console.error('Error running git-clang-format:', result.stderr); | ||
|  |     return 2; | ||
|  |   } | ||
|  | 
 | ||
|  |   const clangFormatOutput = result.stdout.trim(); | ||
|  |   // Bail fast if in fix mode.
 | ||
|  |   if (fix) { | ||
|  |     console.log(clangFormatOutput); | ||
|  |     return 0; | ||
|  |   } | ||
|  |   // Detect if there is any complains from clang-format
 | ||
|  |   if ( | ||
|  |     clangFormatOutput !== '' && | ||
|  |     clangFormatOutput !== 'no modified files to format' && | ||
|  |     clangFormatOutput !== 'clang-format did not modify any files' | ||
|  |   ) { | ||
|  |     console.error(clangFormatOutput); | ||
|  |     const fixCmd = 'npm run lint:fix'; | ||
|  |     console.error(`
 | ||
|  |       ERROR: please run "${fixCmd}" to format changes in your commit | ||
|  |         Note that when running the command locally, please keep your local | ||
|  |         main branch and working branch up to date with nodejs/node-addon-api | ||
|  |         to exclude un-related complains. | ||
|  |         Or you can run "env FORMAT_START=upstream/main ${fixCmd}".`);
 | ||
|  |     return 1; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | if (require.main === module) { | ||
|  |   process.exitCode = main(process.argv.slice(2)); | ||
|  | } |