diff options
Diffstat (limited to 'tools/format.js')
-rwxr-xr-x | tools/format.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/tools/format.js b/tools/format.js new file mode 100755 index 000000000..9786e6fe3 --- /dev/null +++ b/tools/format.js @@ -0,0 +1,63 @@ +#!/usr/bin/env -S deno run --unstable --allow-write --allow-read --allow-run +// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. +import { getPrebuiltToolPath, getSources, join, ROOT_PATH } from "./util.js"; + +async function dprint() { + const execPath = getPrebuiltToolPath("dprint"); + console.log("dprint"); + const p = Deno.run({ + cmd: [execPath, "fmt"], + }); + const { success } = await p.status(); + if (!success) { + throw new Error("dprint failed"); + } + p.close(); +} + +async function rustfmt() { + const configFile = join(ROOT_PATH, ".rustfmt.toml"); + const sourceFiles = await getSources(ROOT_PATH, ["*.rs"]); + + if (!sourceFiles.length) { + return; + } + + console.log(`rustfmt ${sourceFiles.length} file(s)`); + const p = Deno.run({ + cmd: ["rustfmt", "--config-path=" + configFile, "--", ...sourceFiles], + }); + const { success } = await p.status(); + if (!success) { + throw new Error("rustfmt failed"); + } + p.close(); +} + +async function main() { + await Deno.chdir(ROOT_PATH); + await dprint(); + await rustfmt(); + + if (Deno.args.includes("--check")) { + const git = Deno.run({ + cmd: ["git", "status", "-uno", "--porcelain", "--ignore-submodules"], + stdout: "piped", + }); + + const { success } = await git.status(); + if (!success) { + throw new Error("git status failed"); + } + const out = new TextDecoder().decode(await git.output()); + git.close(); + + if (out) { + console.log("run tools/format.js"); + console.log(out); + Deno.exit(1); + } + } +} + +await main(); |