🙌

deno fmt をコードの中で呼ぶ

2022/09/21に公開

deno のバージョン 1.25.3 時点の話

format.ts
const process = Deno.run({
  cmd: [Deno.execPath(), "fmt", "-"],
  stdin: "piped",
  stdout: "piped",
});

await process.stdin.write(
  new TextEncoder().encode(
    "const a: number =28; console.log(20,(3+(4      *  10))     )"
  )
);
process.stdin.writable.close();

console.log(new TextDecoder().decode(await process.output()));

実行コマンド

deno run --allow-run --allow-read ./format.ts

出力

const a: number = 28;
console.log(20, 3 + (4 * 10));

Deno.run を使っているため, --allow-run のフラグが必要. そのため Deno Deploy では動かない.
TypeError: Deno.run is not a function

Runtime API として使えるようになれば, --allow-run のフラグはつけなくて良くなりそう.

↓ 追加するかの議論
https://github.com/denoland/deno/issues/10731

Prettier のほうが簡単に呼び出せた

// @deno-types="https://cdn.skypack.dev/prettier@2.7.1?dts"
import prettier from "https://unpkg.com/prettier@2.7.1/esm/standalone.mjs";
import parserTypeScript from "https://unpkg.com/prettier@2.7.1/esm/parser-typescript.mjs";

console.log(
  prettier.format(
    "const a: number =28; console.log(20,(3+(4      *  10))     )",
    {
      parser: "typescript",
      plugins: [parserTypeScript],
    }
  )
);

実行コマンド

deno run ./format.ts

出力

const a: number = 28;
console.log(20, 3 + 4 * 10);

Prettier は deno fmt に比べて 余計なカッコを 更に取り除いてくれる

GitHubで編集を提案

Discussion