Documentation

Std.Tactic.TryThis

"Try this" support #

This implements a mechanism for tactics to print a message saying Try this: <suggestion>, where <suggestion> is a link to a replacement tactic. Users can either click on the link in the suggestion (provided by a widget), or use a code action which applies the suggestion.

Raw widgets and code actions #

This is a widget which is placed by TryThis.addSuggestion and TryThis.addSuggestions.

When placed by addSuggestion, it says Try this: <replacement> where <replacement> is a link which will perform the replacement.

When placed by addSuggestions, it says:

Try these:
  • <replacement1>
  • <replacement2>
  • <replacement3>
  • ...

where <replacement*> is a link which will perform the replacement.

Equations
  • One or more equations did not get rendered due to their size.
Instances For

    This is a code action provider that looks for TryThisInfo nodes and supplies a code action to apply the replacement.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      Formatting #

      Yields (indent, column) given a FileMap and a String.Range, where indent is the number of spaces by which the line that first includes range is initially indented, and column is the column range starts at in that line.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        Replace subexpressions like ?m.1234 with ?_ so it can be copy-pasted.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          Delaborate e into syntax suitable for use by refine.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For

            The default maximum width of an ideal line in source code, 100 is the current convention.

            Equations
            Instances For

              An option allowing the user to customize the ideal input width, this controls output format when the output is intended to be copied back into a lean file

              Suggestion data #

              Text to be used as a suggested replacement in the infoview. This can be either a TSyntax kind for a single kind : SyntaxNodeKind or a raw String.

              Instead of using constructors directly, there are coercions available from these types to SuggestionText.

              Instances For
                Equations
                • One or more equations did not get rendered due to their size.
                Equations
                • Std.Tactic.TryThis.instCoeHeadTSyntaxConsSyntaxNodeKindNilSuggestionText = { coe := Std.Tactic.TryThis.SuggestionText.tsyntax }

                Pretty-prints a SuggestionText as a Format. If the SuggestionText is some TSyntax kind, we use the appropriate pretty-printer; strings are coerced to Formats as-is.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For

                  Pretty-prints a SuggestionText as a String and wraps with respect to the pane width, indentation, and column, via Format.prettyExtra. If w := none, then w := getInputWidth (← getOptions) is used. Raw Strings are returned as-is.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For

                    Style hooks for Suggestions. See SuggestionStyle.error, .warning, .success, .value, and other definitions here for style presets. This is an arbitrary Json object, with the following interesting fields:

                    • title: the hover text in the suggestion link
                    • className: the CSS classes applied to the link
                    • style: A Json object with additional inline CSS styles such as color or textDecoration.
                    Equations
                    Instances For

                      Style as an error. By default, decorates the text with an undersquiggle; providing the argument decorated := false turns this off.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For

                        Style as a warning. By default, decorates the text with an undersquiggle; providing the argument decorated := false turns this off.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For

                          Style the same way as a hypothesis appearing in the infoview.

                          Equations
                          Instances For

                            Style the same way as an inaccessible hypothesis appearing in the infoview.

                            Equations
                            Instances For

                              Draws the color from a red-yellow-green color gradient with red at 0.0, yellow at 0.5, and green at 1.0. Values outside the range [0.0, 1.0] are clipped to lie within this range.

                              With showValueInHoverText := true (the default), the value t will be included in the title of the HTML element (which appears on hover).

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For

                                Holds a suggestion for replacement, along with preInfo and postInfo strings to be printed immediately before and after that suggestion, respectively. It also includes an optional MessageData to represent the suggestion in logs; by default, this is none, and suggestion is used.

                                Instances For
                                  Equations

                                  Converts a Suggestion to Json in CoreM. We need CoreM in order to pretty-print syntax.

                                  If w := none, then w := getInputWidth (← getOptions) is used.

                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  Instances For
                                    Equations
                                    • One or more equations did not get rendered due to their size.

                                    Delaborate e into a suggestion suitable for use by refine.

                                    Equations
                                    • One or more equations did not get rendered due to their size.
                                    Instances For

                                      Widget hooks #

                                      Add a "try this" suggestion. This has three effects:

                                      • An info diagnostic is displayed saying Try this: <suggestion>
                                      • A widget is registered, saying Try this: <suggestion> with a link on <suggestion> to apply the suggestion
                                      • A code action is added, which will apply the suggestion.

                                      The parameters are:

                                      • ref: the span of the info diagnostic
                                      • s: a Suggestion, which contains
                                        • suggestion: the replacement text;
                                        • preInfo?: an optional string shown immediately after the replacement text in the widget message (only)
                                        • postInfo?: an optional string shown immediately after the replacement text in the widget message (only)
                                        • style?: an optional Json object used as the value of the style attribute of the suggestion text's element (not the whole suggestion element).
                                        • messageData?: an optional message to display in place of suggestion in the info diagnostic (only). The widget message uses only suggestion. If messageData? is none, we simply use suggestion instead.
                                      • origSpan?: a syntax object whose span is the actual text to be replaced by suggestion. If not provided it defaults to ref.
                                      • header: a string that begins the display. By default, it is "Try this: ".
                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For

                                        Add a list of "try this" suggestions as a single "try these" suggestion. This has three effects:

                                        • An info diagnostic is displayed saying Try these: <list of suggestions>
                                        • A widget is registered, saying Try these: <list of suggestions> with a link on each <suggestion> to apply the suggestion
                                        • A code action for each suggestion is added, which will apply the suggestion.

                                        The parameters are:

                                        • ref: the span of the info diagnostic
                                        • suggestions: an array of Suggestions, which each contain
                                          • suggestion: the replacement text;
                                          • preInfo?: an optional string shown immediately after the replacement text in the widget message (only)
                                          • postInfo?: an optional string shown immediately after the replacement text in the widget message (only)
                                          • style?: an optional Json object used as the value of the style attribute of the suggestion text's element (not the whole suggestion element).
                                          • messageData?: an optional message to display in place of suggestion in the info diagnostic (only). The widget message uses only suggestion. If messageData? is none, we simply use suggestion instead.
                                        • origSpan?: a syntax object whose span is the actual text to be replaced by suggestion. If not provided it defaults to ref.
                                        • header: a string that precedes the list. By default, it is "Try these:".
                                        • style?: a default style for all suggestions which do not have a custom style? set.
                                        Equations
                                        • One or more equations did not get rendered due to their size.
                                        Instances For

                                          Add an exact e or refine e suggestion.

                                          The parameters are:

                                          • ref: the span of the info diagnostic
                                          • e: the replacement expression
                                          • origSpan?: a syntax object whose span is the actual text to be replaced by suggestion. If not provided it defaults to ref.
                                          • addSubgoalsMsg: if true (default false), any remaining subgoals will be shown after Remaining subgoals:
                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For

                                            Add exact e or refine e suggestions.

                                            The parameters are:

                                            • ref: the span of the info diagnostic
                                            • es: the array of replacement expressions
                                            • origSpan?: a syntax object whose span is the actual text to be replaced by suggestion. If not provided it defaults to ref.
                                            • addSubgoalsMsg: if true (default false), any remaining subgoals will be shown after Remaining subgoals:
                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            Instances For
                                              def Std.Tactic.TryThis.addTermSuggestion (ref : Lean.Syntax) (e : Lean.Expr) (origSpan? : optParam (Option Lean.Syntax) none) (header : optParam String "Try this: ") :

                                              Add a term suggestion.

                                              The parameters are:

                                              • ref: the span of the info diagnostic
                                              • e: the replacement expression
                                              • origSpan?: a syntax object whose span is the actual text to be replaced by suggestion. If not provided it defaults to ref.
                                              • header: a string which precedes the suggestion. By default, it's "Try this: ".
                                              Equations
                                              Instances For

                                                Add term suggestions.

                                                The parameters are:

                                                • ref: the span of the info diagnostic
                                                • es: an array of the replacement expressions
                                                • origSpan?: a syntax object whose span is the actual text to be replaced by suggestion. If not provided it defaults to ref.
                                                • header: a string which precedes the list of suggestions. By default, it's "Try these:".
                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For