diff --git a/package.json b/package.json index ada7279761..b53e34f4a4 100644 --- a/package.json +++ b/package.json @@ -217,19 +217,21 @@ "lint-staged": { "components/**/*.tsx": [ "npm run lint-staged:ts", - "node ./scripts/lint-prettier.js" + "node ./scripts/pre-prettier.js", + "git add" ], "{tests,site,scripts,components}/**/*.{js,jsx}": [ "npm run lint-staged:es", - "node ./scripts/lint-prettier.js" + "node ./scripts/pre-prettier.js", + "git add" ], "{site,components}/**/*.less": [ "stylelint --syntax less", - "node ./scripts/lint-prettier.js" + "node ./scripts/pre-prettier.js", + "git add" ], "components/*/demo/*.md": [ - "npm run lint-staged:demo", - "node ./scripts/lint-prettier.js" + "npm run lint-staged:demo" ] }, "sideEffects": [ diff --git a/scripts/pre-prettier.js b/scripts/pre-prettier.js new file mode 100644 index 0000000000..d7bd4c4baf --- /dev/null +++ b/scripts/pre-prettier.js @@ -0,0 +1,47 @@ +/** + * copy to https://github.com/facebook/react/blob/master/scripts/prettier/index.js + * prettier api doc https://prettier.io/docs/en/api.html + *----------*****-------------- + * pre commit prettier file + *----------*****-------------- + */ + +const prettier = require('prettier'); +const fs = require('fs'); + +const prettierConfigPath = require.resolve('../.prettierrc'); + +const files = process.argv.slice(2); + +let didError = false; + +files.forEach(file => { + const options = prettier.resolveConfig.sync(file, { + config: prettierConfigPath, + }); + try { + const fileInfo = prettier.getFileInfo.sync(file); + if (fileInfo.ignored) { + return; + } + const input = fs.readFileSync(file, 'utf8'); + const withParserOptions = { + ...options, + parser: fileInfo.inferredParser, + }; + const output = prettier.format(input, withParserOptions); + if (output !== input) { + fs.writeFileSync(file, output, 'utf8'); + // eslint-disable-next-line no-console + console.log(`\x1b[34m ${file} is prettier`); + } + } catch (e) { + didError = true; + } +}); + +if (didError) { + process.exit(1); +} +// eslint-disable-next-line no-console +console.log('\x1b[32m prettier success!');