sane-fmt

Opinionated code formatter for TypeScript and JavaScript.

Usage in Deno

  • Deno.version.deno: 1.8.0
  • Deno.version.v8: 9.0.257.3
  • Deno.version.typescript: 4.2.2

Command Line Interface

Main CLI

⚠ WARNING: Due to technical limitations, the main CLI currently does not support Windows. You may download the native version from the GitHub Release page of sane-fmt. The stdio CLI is still supported.

Installation:

deno install \
  --unstable \
  --allow-read \
  --allow-write \
  --allow-env \
  --name=sane-fmt \
  https://deno.land/x/sane_fmt@0.15.0/main.js

Environment Variables:

  • SANE_FMT_DENO_PREOPENS: A list of preopened directories. Its delimiter is colon (:) on Linux/Unix and semicolon (;) in Windows.

Usage:

Opinionated code formatter for TypeScript and JavaScript

Usage: sane-fmt [OPTIONS] [FILES]...

Arguments:
  [FILES]...
          Files to process

          If none are provided, a default set of files will be assumed

Options:
      --stdio
          Reads unformatted code from standard input, prints formatted code to standard output, then exits

  -w, --write
          Whether to write or check

      --details <DETAILS>
          File diff detail

          [default: name]
          [possible values: count, name, diff]

      --hide-passed
          Do not log passed filenames

      --color <COLOR>
          When to use terminal color

          [default: auto]
          [possible values: auto, never, always]

      --log-format <LOG_FORMAT>
          Format of log messages

          [default: human]
          [possible values: human, github-actions]

  -I, --include <INCLUDE>
          Files whose contents contain paths to target files (`-` means stdin, other strings mean text file)

  -h, --help
          Print help information (use `-h` for a summary)

  -V, --version
          Print version information

Stdio CLI

Unlike the feature-packed main CLI, the stdio CLI only function is to read TypeScript code from stdin and print formatted code to stdout.

Installation:

deno install \
  --unstable \
  --name=sane-fmt-stdio \
  https://deno.land/x/sane_fmt@0.15.0/stdio.js

Usage Example:

echo 'const message="hello world";' | sane-fmt-stdio

Expected Output:

const message = 'hello world'

Programming Interface

Example: Format a file

import Context from 'https://deno.land/std@0.92.0/wasi/snapshot_preview1.ts'
import { u8v } from 'https://deno.land/x/sane_fmt@0.15.0/index.ts'
const context = new Context({
  args: ['sane-fmt', 'example-directory/example-file.ts'],
  stdin: Deno.stdin.rid,
  stdout: Deno.stdout.rid,
  stderr: Deno.stderr.rid,
  preopens: {
    'example-directory': 'example-directory',
  },
})
const module = await WebAssembly.compile(u8v)
const instance = await WebAssembly.instantiate(module, {
  wasi_snapshot_preview1: context.exports,
})
const status = context.start(instance)
if (status) {
  throw new Error(`Program exits with code ${status}`)
}

Example: Read unformatted input and print formatted output

import Context from 'https://deno.land/std@0.92.0/wasi/snapshot_preview1.ts'
import { u8v } from 'https://deno.land/x/sane_fmt@0.15.0/index.ts'
const context = new Context({
  args: ['sane-fmt', '--stdio'],
  stdin: Deno.stdin.rid,
  stdout: Deno.stdout.rid,
  stderr: Deno.stderr.rid,
})
const module = await WebAssembly.compile(u8v)
const instance = await WebAssembly.instantiate(module, {
  wasi_snapshot_preview1: context.exports,
})
const status = context.start(instance)
if (status) {
  throw new Error(`Program exits with code ${status}`)
}

License

MIT © Hoàng Văn Khải