Documentation

Lean.PrettyPrinter.Formatter

The formatter turns a Syntax tree into a Format object, inserting both mandatory whitespace (to separate adjacent tokens) as well as "pretty" optional whitespace.

The basic approach works much like the parenthesizer: A right-to-left traversal over the syntax tree, driven by parser-specific handlers registered via attributes. The traversal is right-to-left so that when emitting a token, we already know the text following it and can decide whether or not whitespace between the two is necessary.

  • leadWord : String

    Textual content of stack up to the first whitespace (not enclosed in an escaped ident). We assume that the textual content of stack is modified only by pushText and pushLine, so leadWord is adjusted there accordingly.

  • leadWordIdent : Bool

    When the leadWord is nonempty, whether it is an identifier. Identifiers get space inserted between them.

  • isUngrouped : Bool

    Whether the generated format begins with the result of an ungrouped category formatter.

  • mustBeGrouped : Bool

    Whether the resulting format must be grouped when used in a category formatter. If the flag is set to false, then categoryParser omits the fill+nest operation.

  • stack : Array Format

    Stack of generated Format objects, analogous to the Syntax stack in the parser. Note, however, that the stack is reversed because of the right-to-left traversal.

Instances For
    @[reducible, inline]
    Equations
      Instances For
        @[inline]
        Equations
          Instances For
            @[reducible, inline]
            Equations
              Instances For

                Execute x at the right-most child of the current node, if any, then advance to the left. Runs x even if there are no children, in which case the current syntax node will be .missing.

                Equations
                  Instances For

                    Execute x, pass array of generated Format objects to fn, and push result.

                    Equations
                      Instances For

                        Execute x and concatenate generated Format objects.

                        Equations
                          Instances For
                            Equations
                              Instances For

                                If pos? has a position, run x and tag its results with that position, if they are not already tagged. Otherwise just run x.

                                Equations
                                  Instances For
                                    @[extern lean_mk_antiquot_formatter]
                                    opaque Lean.PrettyPrinter.Formatter.mkAntiquot.formatter' (name : String) (kind : SyntaxNodeKind) (anonymous : Bool := true) (isPseudoKind : Bool := false) :
                                    @[extern lean_pretty_printer_formatter_interpret_parser_descr]
                                    @[implemented_by Lean.PrettyPrinter.Formatter.formatterForKindUnsafe]
                                    Equations
                                      Instances For
                                        Equations
                                          Instances For
                                            @[macro_inline]
                                            def Lean.PrettyPrinter.Formatter.ite :
                                            {x : Type} → (c : Prop) → [Decidable c] → (t e : Formatter) → Formatter
                                            Equations
                                              Instances For
                                                @[reducible, inline]
                                                Equations
                                                  Instances For
                                                    Equations
                                                      Instances For
                                                        Equations
                                                          Instances For
                                                            Equations
                                                              Instances For
                                                                Equations
                                                                  Instances For
                                                                    Equations
                                                                      Instances For