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
                    • One or more equations did not get rendered due to their size.
                    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

                                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