Implements Prettier (#701)

* Adds and configures prettier

* Creates format script

* Runs prettier

* Adds npm scripts and checks for formatting in CI
This commit is contained in:
John Furrow
2018-09-02 20:43:35 -07:00
committed by GitHub
parent f492ad348a
commit 6dec5cddac
247 changed files with 3955 additions and 4981 deletions
+87
View File
@@ -0,0 +1,87 @@
const chalk = require('chalk');
const fs = require('fs');
const glob = require('glob');
const path = require('path');
const prettier = require('prettier');
const filePattern = `{client,scripts,server,shared}${path.sep}!(assets){${path.sep},}{**${path.sep}*,*}.{js,json,md}`;
const iterateOverFiles = ({onFileRead}) => {
return new Promise((resolve, reject) => {
glob(filePattern, (error, files) => {
if (error) {
reject(Error(error));
}
resolve(
Promise.all(
files.map(file => {
const filePath = path.join(process.cwd(), file);
const fileContents = fs.readFileSync(filePath, 'utf8');
return onFileRead(filePath, fileContents);
})
)
);
});
});
};
const format = () => {
console.log(chalk.reset('Formatting files...'));
iterateOverFiles({
onFileRead: (filePath, fileContents) => {
return prettier.resolveConfig(filePath).then(options => {
return new Promise((resolve, reject) => {
fs.writeFile(filePath, prettier.format(fileContents, {...options, filepath: filePath}), error => {
if (error) {
reject(error);
return;
}
resolve();
});
});
});
},
})
.then(() => {
console.log(chalk.green('Done formatting files.'));
})
.catch(error => {
console.log(chalk.red('Error formatting files:\n'), chalk.reset(error));
process.exit(1);
});
};
const check = () => {
console.log(chalk.reset('Checking code formatting...'));
iterateOverFiles({
onFileRead: (filePath, fileContents) => {
return prettier.resolveConfig(filePath).then(options => {
const isCompliant = prettier.check(fileContents, {...options, filepath: filePath});
if (!isCompliant) {
throw filePath;
}
});
},
})
.then(() => {
console.log(chalk.green('Done checking files.'));
})
.catch(error => {
console.log(chalk.red('Unformatted file found:\n'), chalk.reset(error));
process.exit(1);
});
};
const commands = {check, format};
const desiredCommand = process.argv.slice(2)[0];
if (commands[desiredCommand] == null) {
throw new Error(`No command ${desiredCommand}.`);
} else {
commands[desiredCommand]();
}