This PR fixes a bug where tactic auto-completion would produce tactic completion items in the entire trailing whitespace of an empty tactic block. Since #13229 further restricted top-level `by` blocks to be indentation- sensitive, this PR adjusts the logic to only display completion items at a "proper" indentation level. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
142 lines
3.5 KiB
Text
142 lines
3.5 KiB
Text
prelude
|
|
import Init.Notation
|
|
|
|
/-
|
|
Tests for tactic completion in empty `by` blocks (no indented tactics follow).
|
|
|
|
Tests cover:
|
|
- Top-level `by`
|
|
- Nested `by` inside expressions (e.g. `id <| have := by`)
|
|
- Completion at various columns on the line below `by`
|
|
|
|
Note: `--^` tests at the column of `^`; `--⬑` tests at the column of `--` itself (for column 0).
|
|
To test a column on the line below `by`, we place an indented comment there so that the tested
|
|
column falls within the leading whitespace (matching how completionTactics.lean works).
|
|
-/
|
|
|
|
/-- A docstring -/
|
|
syntax (name := skip) "skip" : tactic
|
|
|
|
-- ===== On the `by` token itself (no completions expected) =====
|
|
|
|
-- column 20 on `by` line (end of `by` token, before whitespace)
|
|
example : True := by
|
|
--^ completion
|
|
|
|
-- column 20 on nested `by` line (end of `by` token, before whitespace)
|
|
example : True := id <|
|
|
have : True := by
|
|
--^ completion
|
|
|
|
-- ===== Cursor before `by` on the same line (no completions expected) =====
|
|
|
|
-- Only the trailing whitespace past an opener token (here `by`) should offer completions. A
|
|
-- cursor in whitespace that precedes the opener on the same line must not — that whitespace is
|
|
-- part of the surrounding term, not the tactic block.
|
|
|
|
-- column 18 between `:=` and `by` (cursor is before `by` on the same line)
|
|
example : True := by
|
|
--^ completion
|
|
|
|
-- column 4 in leading indent of a line whose only token is `by`
|
|
example : True :=
|
|
by
|
|
--^ completion
|
|
|
|
-- column 18 before nested `by`, on the same line as `by`
|
|
example : True := id <|
|
|
have : True := by
|
|
--^ completion
|
|
|
|
-- ===== Top-level `by`, non-indented content following =====
|
|
|
|
-- column 21 on line below `by`
|
|
example : True := by
|
|
-- below by
|
|
--^ completion
|
|
sorry
|
|
|
|
-- column 0 on line below `by`
|
|
example : True := by
|
|
-- below by
|
|
--⬑ completion
|
|
sorry
|
|
|
|
-- column 2 on line below `by`
|
|
example : True := by
|
|
-- below by
|
|
--^ completion
|
|
sorry
|
|
|
|
-- ===== Top-level `by`, no tactics following =====
|
|
|
|
-- column 21 on line below `by`
|
|
example : True := by
|
|
-- below by
|
|
--^ completion
|
|
|
|
-- column 0 on line below `by`
|
|
example : True := by
|
|
-- below by
|
|
--⬑ completion
|
|
|
|
-- column 2 on line below `by`
|
|
example : True := by
|
|
-- below by
|
|
--^ completion
|
|
|
|
-- ===== Nested `by`, content following =====
|
|
|
|
-- column 21 on line below `by`
|
|
example : True := id <|
|
|
have : True := by
|
|
-- below by
|
|
--^ completion
|
|
sorry
|
|
|
|
-- column 2 on line below `by` (at column of `have` line)
|
|
example : True := id <|
|
|
have : True := by
|
|
-- below by
|
|
--^ completion
|
|
sorry
|
|
|
|
-- column 0 on line below `by`
|
|
example : True := id <|
|
|
have : True := by
|
|
-- below by
|
|
--⬑ completion
|
|
sorry
|
|
|
|
-- column 4 on line below `by` (indented past `have` but not past `by`)
|
|
example : True := id <|
|
|
have : True := by
|
|
-- below by
|
|
--^ completion
|
|
sorry
|
|
|
|
-- ===== Nested `by`, no tactics following =====
|
|
|
|
-- column 21 on line below `by`
|
|
example : True := id <|
|
|
have : True := by
|
|
-- below by
|
|
--^ completion
|
|
|
|
-- column 2 on line below `by` (at column of `have` line)
|
|
example : True := id <|
|
|
have : True := by
|
|
-- below by
|
|
--^ completion
|
|
|
|
-- column 0 on line below `by`
|
|
example : True := id <|
|
|
have : True := by
|
|
-- below by
|
|
--⬑ completion
|
|
|
|
-- column 4 on line below `by`
|
|
example : True := id <|
|
|
have : True := by
|
|
-- below by
|
|
--^ completion
|