lean4-htt/tests/elab/7993.lean
Garmelon 08eb78a5b2
chore: switch to new test/bench suite (#12590)
This PR sets up the new integrated test/bench suite. It then migrates
all benchmarks and some related tests to the new suite. There's also
some documentation and some linting.

For now, a lot of the old tests are left alone so this PR doesn't become
even larger than it already is. Eventually, all tests should be migrated
to the new suite though so there isn't a confusing mix of two systems.
2026-02-25 13:51:53 +00:00

91 lines
2.2 KiB
Text

/-!
# Warn about visibility (and namespace/type) changes in deprecation lints
https://github.com/leanprover/lean4/issues/7993
Deprecation lints should indicate if an updated constant is in a different namespace, is protected,
or has a different type from the deprecated one.
-/
set_option linter.deprecated true
abbrev Foo := Nat
namespace Foo
protected def bar : Foo → Foo
| 0 => 0
| n + 1 => Foo.bar n + 1
theorem bar_rfl : Foo.bar = Foo.bar := rfl
@[deprecated Foo.bar (since := "2025-01-01")]
def foo : Foo → Foo := id
end Foo
/--
warning: `Foo.foo` has been deprecated: Use `Foo.bar` instead
Note: `Foo.bar` is protected. References to this constant must include its prefix `Foo` even when inside its namespace.
-/
#guard_msgs in
open Foo in
example := foo
abbrev Bar := Nat
@[deprecated Foo.foo (since := "2025-01-01")]
def Bar.bar : Bar → Bar := id
abbrev b : Bar := 31
/--
warning: `Bar.bar` has been deprecated: Use `Foo.foo` instead
Note: The updated constant is in a different namespace. Dot notation may need to be changed (e.g., from `x.bar` to `Foo.foo x`).
-/
#guard_msgs in
example := b.bar
/--
warning: `Bar.bar` has been deprecated: Use `Foo.foo` instead
Note: The updated constant is in a different namespace. Dot notation may need to be changed (e.g., from `x.bar` to `foo x`).
-/
#guard_msgs in
open Foo in
example := b.bar
set_option linter.deprecated false in
@[deprecated Foo.bar_rfl (since := "2025-01-01")]
theorem Bar.bar_rfl : Bar.bar = Bar.bar := rfl
/--
warning: `Bar.bar_rfl` has been deprecated: Use `Foo.bar_rfl` instead
Note: The updated constant has a different type:
Foo.bar = Foo.bar
instead of
Bar.bar = Bar.bar
Note: The updated constant is in a different namespace. Dot notation may need to be changed (e.g., from `x.bar_rfl` to `Foo.bar_rfl x`).
-/
#guard_msgs in
example := Bar.bar_rfl
namespace A.B
protected def C := ()
@[deprecated B.C (since := "2025-01-01")]
def D := ()
end A.B
/--
warning: `A.B.D` has been deprecated: Use `A.B.C` instead
Note: `A.B.C` is protected. References to this constant must include at least the last component `B` of its prefix `A.B` even when inside its namespace.
-/
#guard_msgs in
open A B in
example := D