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
				
				1.7 KiB
			
		
		
			
		
	
	
					72 lines
				
				1.7 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								#!/usr/bin/env node
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const spawn = require('child_process').spawnSync;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const filesToCheck = '*.js';
							 | 
						||
| 
								 | 
							
								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();
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Check js files that change on unstaged file
							 | 
						||
| 
								 | 
							
								  const fileUnStaged = spawn(
							 | 
						||
| 
								 | 
							
								    'git',
							 | 
						||
| 
								 | 
							
								    ['diff', '--name-only', FORMAT_START, filesToCheck],
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      encoding: 'utf-8'
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Check js files that change on staged file
							 | 
						||
| 
								 | 
							
								  const fileStaged = spawn(
							 | 
						||
| 
								 | 
							
								    'git',
							 | 
						||
| 
								 | 
							
								    ['diff', '--name-only', '--cached', FORMAT_START, filesToCheck],
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      encoding: 'utf-8'
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const options = [
							 | 
						||
| 
								 | 
							
								    ...fileStaged.stdout.split('\n').filter((f) => f !== ''),
							 | 
						||
| 
								 | 
							
								    ...fileUnStaged.stdout.split('\n').filter((f) => f !== '')
							 | 
						||
| 
								 | 
							
								  ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (fix) {
							 | 
						||
| 
								 | 
							
								    options.push('--fix');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  const result = spawn('node_modules/.bin/eslint', [...options], {
							 | 
						||
| 
								 | 
							
								    encoding: 'utf-8'
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (result.status === 1) {
							 | 
						||
| 
								 | 
							
								    console.error('Eslint error:', result.stdout);
							 | 
						||
| 
								 | 
							
								    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}".
							 | 
						||
| 
								 | 
							
								    Also fix JS files by yourself if necessary.`);
							 | 
						||
| 
								 | 
							
								    return 1;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (result.stderr) {
							 | 
						||
| 
								 | 
							
								    console.error('Error running eslint:', result.stderr);
							 | 
						||
| 
								 | 
							
								    return 2;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if (require.main === module) {
							 | 
						||
| 
								 | 
							
								  process.exitCode = main(process.argv.slice(2));
							 | 
						||
| 
								 | 
							
								}
							 |