Documentation

Init.Data.Format.Basic

Determines how groups should have linebreaks inserted when the text would overfill its remaining space.

Instances For
    inductive Std.Format :

    A representation of a set of strings, in which the placement of newlines and indentation differ.

    Given a specific line width, specified in columns, the string that uses the fewest lines can be selected.

    The pretty-printing algorithm is based on Wadler's paper A Prettier Printer.

    • nil : Format

      The empty format.

    • line : Format

      A position where a newline may be inserted if the current group does not fit within the allotted column width.

    • align (force : Bool) : Format

      align tells the formatter to pad with spaces to the current indentation level, or else add a newline if we are already at or past the indent.

      If force is true, then it will pad to the indent even if it is in a flattened group.

      Example:

      open Std Format in
      #eval IO.println (nest 2 <| "." ++ align ++ "a" ++ line ++ "b")
      
      . a
        b
      
    • text : StringFormat

      A node containing a plain string.

      If the string contains newlines, the formatter emits them and then indents to the current level.

    • nest (indent : Int) (f : Format) : Format

      nest indent f increases the current indentation level by indent while rendering f.

      Example:

      open Std Format in
      def fmtList (l : List Format) : Format :=
        let f := joinSep l  (", " ++ Format.line)
        group (nest 1 <| "[" ++ f ++ "]")
      

      This will be written all on one line, but if the text is too large, the formatter will put in linebreaks after the commas and indent later lines by 1.

    • append : FormatFormatFormat

      Concatenation of two Formats.

    • group : Format(behavior : optParam FlattenBehavior FlattenBehavior.allOrNone) → Format

      Creates a new flattening group for the given inner Format.

    • tag : NatFormatFormat

      Used for associating auxiliary information (e.g. Exprs) with Format objects.

    Instances For

      Checks whether the given format contains no characters.

      Equations
        Instances For

          Creates a group in which as few Format.lines as possible are rendered as newlines.

          This is an alias for Format.group, with FlattenBehavior set to fill.

          Equations
            Instances For

              Concatenates a list of Formats with ++.

              Equations
                Instances For

                  Checks whether a Format is the constructor Format.nil.

                  This does not check whether the resulting rendered strings are always empty. To do that, use Format.isEmpty.

                  Equations
                    Instances For

                      A directive indicating whether a given work group is able to be flattened.

                      • allow indicates that the group is allowed to be flattened; its argument is true if there is sufficient space for it to be flattened (and so it should be), or false if not.
                      • disallow means that this group should not be flattened irrespective of space concerns. This is used at levels of a Format outside of any flattening groups. It is necessary to track this so that, after a hard line break, we know whether to try to flatten the next line.
                      Instances For

                        Whether the given directive indicates that flattening should occur.

                        Equations
                          Instances For

                            A monad that can be used to incrementally render Format objects.

                            • pushOutput (s : String) : m Unit

                              Emits the string s.

                            • pushNewline (indent : Nat) : m Unit

                              Emits a newline followed by indent columns of indentation.

                            • currColumn : m Nat

                              Gets the current column at which the next string will be emitted.

                            • startTag (tag : Nat) : m Unit

                              Starts a region tagged with tag.

                            • endTags (count : Nat) : m Unit

                              Exits the scope of count opened tags.

                            Instances
                              def Std.Format.prettyM {m : TypeType} (f : Format) (w : Nat) (indent : Nat := 0) [Monad m] [MonadPrettyFormat m] :

                              Renders a Format using effects in the monad m, using the methods of MonadPrettyFormat.

                              Each line is emitted as soon as it is rendered, rather than waiting for the entire document to be rendered.

                              • w: the total width
                              • indent: the initial indentation to use for wrapped lines (subsequent wrapping may increase the indentation)
                              Equations
                                Instances For
                                  @[inline]

                                  Creates a format l ++ f ++ r with a flattening group, nesting the contents by the length of l.

                                  The group's FlattenBehavior is allOrNone; for fill use Std.Format.bracketFill.

                                  Equations
                                    Instances For
                                      @[inline]

                                      Creates the format "(" ++ f ++ ")" with a flattening group, nesting by one space.

                                      Equations
                                        Instances For
                                          @[inline]

                                          Creates the format "[" ++ f ++ "]" with a flattening group, nesting by one space.

                                          sbracket is short for “square bracket”.

                                          Equations
                                            Instances For
                                              @[inline]

                                              Creates a format l ++ f ++ r with a flattening group, nesting the contents by the length of l.

                                              The group's FlattenBehavior is fill; for allOrNone use Std.Format.bracketFill.

                                              Equations
                                                Instances For

                                                  The default indentation level, which is two spaces.

                                                  Equations
                                                    Instances For
                                                      Equations
                                                        Instances For

                                                          The default width of the targeted output, which is 120 columns.

                                                          Equations
                                                            Instances For

                                                              Increases the indentation level by the default amount.

                                                              Equations
                                                                Instances For

                                                                  Insert a newline and then f, all nested by the default indent amount.

                                                                  Equations
                                                                    Instances For
                                                                      @[export lean_format_pretty]
                                                                      def Std.Format.pretty (f : Format) (width : Nat := defWidth) (indent column : Nat := 0) :

                                                                      Renders a Format to a string.

                                                                      • width: the total width
                                                                      • indent: the initial indentation to use for wrapped lines (subsequent wrapping may increase the indentation)
                                                                      • column: begin the first line wrap column characters earlier than usual (this is useful when the output String will be printed starting at column)
                                                                      Equations
                                                                        Instances For
                                                                          class Std.ToFormat (α : Type u) :

                                                                          Specifies a “user-facing” way to convert from the type α to a Format object. There is no expectation that the resulting string is valid code.

                                                                          The Repr class is similar, but the expectation is that instances produce valid Lean code.

                                                                          Instances
                                                                            def Std.Format.joinSep {α : Type u} [ToFormat α] :
                                                                            List αFormatFormat

                                                                            Intercalates the given list with the given sep format.

                                                                            The list items are formatting using ToFormat.format.

                                                                            Equations
                                                                              Instances For
                                                                                def Std.Format.prefixJoin {α : Type u} [ToFormat α] (pre : Format) :
                                                                                List αFormat

                                                                                Concatenates the given list after prepending pre to each element.

                                                                                The list items are formatting using ToFormat.format.

                                                                                Equations
                                                                                  Instances For
                                                                                    def Std.Format.joinSuffix {α : Type u} [ToFormat α] :
                                                                                    List αFormatFormat

                                                                                    Concatenates the given list after appending the given suffix to each element.

                                                                                    The list items are formatting using ToFormat.format.

                                                                                    Equations
                                                                                      Instances For