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.14.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:

sane-fmt 0.14.0
Opinionated code formatter for TypeScript and JavaScript

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

ARGS:
    <FILES>...
            Files to process

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

OPTIONS:
        --color <COLOR>
            When to use terminal color

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

        --details <DETAILS>
            File diff detail

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

    -h, --help
            Print help information

        --hide-passed
            Do not log passed filenames

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

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

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

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

    -V, --version
            Print version information

    -w, --write
            Whether to write or check

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.14.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.14.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.14.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