On this page:
4.1 Formatting Terms
format-term
format-source-element
format-variable-initializer
format-declaration
format-expression
format-subexpression
format-statement
format-nested-substatement
format-substatement
format-case-clause
format-property
format-identifier
4.2 Configuration Parameters
current-indentation-width
collapse-lines?
collapse-simple-substatements?
4.3 Extending the Pretty-Printer
formatters/ Expression
formatters/ Statement
formatters/ Expression List
formatters/ Statement List
format-map
4.4 S-Expression Syntax
sexp?
Expression->sexp
Statement->sexp
Source Element->sexp
Version: 4.1.0.4

4 Pretty-Printing

This library provides facilities for pretty-printing JavaScript source. It be can required via:

 (require (planet dherman/javascript:6/print))

This library depends on the pprint PLaneT package, which can be required via:

  (require (planet dherman/pprint:4))

See the documentation for pprint for information on how to use it.

4.1 Formatting Terms

(format-term term)  doc?

  term : Term/X?

Formats any JavaScript term as a doc for pretty-printing.

(format-source-element element)  doc?

  element : SourceElement?

Formats a JavaScript source element as a doc for pretty-printing.

(format-variable-initializer init)  doc?

  init : VariableInitializer?

Formats a variable initializer as a doc for pretty-printing.

(format-declaration decl)  doc?

  decl : Declaration?

Formats a declaration as a doc for pretty-printing.

(format-expression expr)  doc?

  expr : Expression/X?

Formats an expression as a doc for pretty-printing.

(format-subexpression expr parent)  doc?

  expr : Expression?

  parent : Expression?

Formats an expression expr that occurs as an immediate subexpression of parent as a doc for pretty-printing. The parenthesization is determined based on the precedence of the two expressions.

(format-statement stmt)  doc?

  stmt : Statement/X?

Formats a statement as a doc for pretty-printing. Post-conditions: The statement output includes its own semicolon if appropriate, and statement output is not newline-terminated.

(format-nested-substatement stmt)  doc?

  stmt : SubStatement/X?

Formats a statement that occurs as an indented substatement as a doc for pretty-printing. Post-condition: The indentation level is returned to its previous level after the substatement.

(format-substatement stmt)  doc?

  stmt : SubStatement/X?

Formats a statement that occurs as a substatement as a doc for pretty-printing.

(format-case-clause clause)  doc?

  clause : CaseClause?

Formats a case clause as a doc for pretty-printing.

(format-property property)  doc?

  property : Property?

Formats an object property as a doc for pretty-printing.

(format-identifier id)  doc?

  id : Identifier?

Formats an identifier as a doc for pretty-printing.

4.2 Configuration Parameters

current-indentation-width : (parameter/c natural-number/c)

The number of spaces to indent.

collapse-lines? : (parameter/c boolean?)

(Currently ignored.)

collapse-simple-substatements? : (parameter/c boolean?)

Non-block substatements stay on same line?

4.3 Extending the Pretty-Printer

As described in Extending the Language, it is possible to extend the language with custom forms. The pretty-printer can be extended with extra matchers that recognize just their form types and produce pretty-printed docs. Matchers should simple fail to match (raising the same error as (match) would for anything other than the forms they recognize.

formatters/Expression : (parameter/c (listof (any -> doc?)))

formatters/Statement : (parameter/c (listof (any -> doc?)))

formatters/ExpressionList : (parameter/c (listof (any -> doc?)))

formatters/StatementList : (parameter/c (listof (any -> doc?)))

(format-map f elts param)  c

  f : (a -> c)

  elts : (or (listof a) b)

  param : (parameter (b -> c))

Applies a formatter to an extensible list of terms (such as an ExpressionList/X or StatementList/X). If the formatter fails to match, the current value of the param parameter is used to format the elements instead.

4.4 S-Expression Syntax

This module also provides a few utilities for generating an alternative S-expression syntax of JavaScript.

(sexp? x)  boolean?

  x : any

Determines whether x is an S-expression.

(Expression->sexp expr)  sexp?

  expr : Expression?

Creates an S-expression representation of an expression.

(Statement->sexp stmt)  sexp?

  stmt : Statement?

Creates an S-expression representation of a statement.

(SourceElement->sexp elt)  sexp?

  elt : SourceElement?

Creates an S-expression representation of a source element.