This PR makes the `Std.Time.Format` import in `Lean.Elab.Tactic.Grind.Annotated` private rather than public, preventing the entire `Std.Time` infrastructure (including timezone databases) from being re-exported through `import Lean`. The `grindAnnotatedExt` extension is kept private, with a new public accessor function `isGrindAnnotatedModule` exposed for use by `LibrarySuggestions.Basic`. This should address the +2.5% instruction increase on `import Lean` observed after merging #11332. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude <noreply@anthropic.com>
92 lines
3.2 KiB
Text
92 lines
3.2 KiB
Text
/-
|
|
Copyright (c) 2025 Lean FRO, LLC. All rights reserved.
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
Authors: Kim Morrison
|
|
-/
|
|
import Lean.Elab.Tactic.Grind
|
|
import Lean.LibrarySuggestions.Basic
|
|
|
|
/-!
|
|
# Tests for grind_annotated command
|
|
|
|
This file tests that:
|
|
1. The `grind_annotated` command correctly validates date formats
|
|
2. The `filterGrindAnnotated` wrapper correctly filters suggestions based on the caller
|
|
-/
|
|
|
|
open Lean Meta Elab Tactic LibrarySuggestions
|
|
|
|
/-! ## Date format validation -/
|
|
|
|
/--
|
|
error: Invalid date format: offset 0: condition not satisfied
|
|
Expected format: YYYY-MM-DD (e.g., "2025-01-15")
|
|
-/
|
|
#guard_msgs in
|
|
grind_annotated "invalid-date"
|
|
|
|
/-- info: Init.Data.List.Lemmas is grind-annotated: true -/
|
|
#guard_msgs in
|
|
#eval do
|
|
let env ← getEnv
|
|
-- Use the public API to check if a module is grind-annotated
|
|
-- First we need to get the module index for a theorem from Init.Data.List.Lemmas
|
|
match env.getModuleIdxFor? `List.eq_nil_of_length_eq_zero with
|
|
| none => logInfo "Could not find module"
|
|
| some modIdx =>
|
|
let isAnnotated := Lean.Elab.Tactic.Grind.isGrindAnnotatedModule env modIdx
|
|
logInfo m!"Init.Data.List.Lemmas is grind-annotated: {isAnnotated}"
|
|
|
|
/-! ## Filtering logic -/
|
|
|
|
/--
|
|
Create a hardcoded selector that returns a suggestion from `List.eq_nil_of_length_eq_zero`
|
|
in the grind-annotated Init.Data.List.Lemmas module.
|
|
-/
|
|
def testSelector : Selector := fun _ _ => do
|
|
return #[{
|
|
name := `List.eq_nil_of_length_eq_zero
|
|
score := 1.0
|
|
flag := none
|
|
}]
|
|
|
|
/-- info: All tests passed! -/
|
|
#guard_msgs in
|
|
example : True := by
|
|
run_tac do
|
|
let mvarId ← getMainGoal
|
|
let env ← getEnv
|
|
|
|
-- Debug: Check if List.eq_nil_of_length_eq_zero exists and get its module
|
|
let theoremName := `List.eq_nil_of_length_eq_zero
|
|
|
|
match env.getModuleIdxFor? theoremName with
|
|
| none => logInfo "Theorem has no module index"
|
|
| some modIdx =>
|
|
let _moduleName := env.header.moduleNames[modIdx.toNat]!
|
|
let _isAnnotated := Grind.isGrindAnnotatedModule env modIdx
|
|
pure ()
|
|
|
|
-- Test 1: Without filter, suggestion should be returned
|
|
let suggestions1 ← testSelector mvarId {}
|
|
unless suggestions1.size == 1 do
|
|
throwError "Test 1 failed: Expected 1 suggestion without filter, got {suggestions1.size}"
|
|
|
|
-- Test 2: With filterGrindAnnotated and caller := "grind", suggestion should be filtered out
|
|
let filteredSelector := testSelector.filterGrindAnnotated
|
|
let suggestions2 ← filteredSelector mvarId { caller := some "grind" }
|
|
unless suggestions2.size == 0 do
|
|
throwError "Test 2 failed: Expected 0 suggestions with grind caller, got {suggestions2.size}"
|
|
|
|
-- Test 3: With filterGrindAnnotated and caller := "simp", suggestion should be returned
|
|
let suggestions3 ← filteredSelector mvarId { caller := some "simp" }
|
|
unless suggestions3.size == 1 do
|
|
throwError "Test 3 failed: Expected 1 suggestion with simp caller, got {suggestions3.size}"
|
|
|
|
-- Test 4: With filterGrindAnnotated and no caller, suggestion should be returned
|
|
let suggestions4 ← filteredSelector mvarId { caller := none }
|
|
unless suggestions4.size == 1 do
|
|
throwError "Test 4 failed: Expected 1 suggestion with no caller, got {suggestions4.size}"
|
|
|
|
logInfo "All tests passed!"
|
|
trivial
|