This PR migrates most remaining tests to the new test suite. It also completes the migration of directories like `tests/lean/run`, meaning that PRs trying to add tests to those old directories will now fail.
126 lines
2.7 KiB
Text
126 lines
2.7 KiB
Text
import Lean.Elab
|
||
--^ waitForILeans
|
||
structure Bar where
|
||
|
||
structure Foo where
|
||
foo₁ : Nat
|
||
foo₂ : Nat
|
||
bar : Bar
|
||
|
||
def mkFoo₁ : Foo := {
|
||
--v textDocument/definition
|
||
foo₁ := 1
|
||
--^ textDocument/definition
|
||
--v textDocument/declaration
|
||
foo₂ := 2
|
||
--v textDocument/typeDefinition
|
||
bar := ⟨⟩
|
||
}
|
||
|
||
--v textDocument/definition
|
||
#check (Bar)
|
||
|
||
structure HandWrittenStruct where
|
||
n : Nat
|
||
|
||
-- def HandWrittenStruct.n := fun | mk n => n
|
||
|
||
--v textDocument/definition
|
||
def hws : HandWrittenStruct := {
|
||
--v textDocument/definition
|
||
n := 3
|
||
}
|
||
|
||
--v textDocument/declaration
|
||
def mkFoo₂ := mkFoo₁
|
||
|
||
syntax (name := elabTest) "test" : term
|
||
|
||
@[term_elab elabTest] def elabElabTest : Lean.Elab.Term.TermElab := fun orig _ => do
|
||
let stx ← `(Nat.succ (Nat.succ Nat.zero))
|
||
Lean.Elab.withMacroExpansionInfo orig stx $ Lean.Elab.Term.elabTerm stx none
|
||
|
||
--v textDocument/declaration
|
||
#check test
|
||
--^ textDocument/definition
|
||
|
||
def Baz (α : Type) := α
|
||
|
||
#check fun (b : Baz Foo) => b
|
||
--^ textDocument/typeDefinition
|
||
|
||
example : Nat :=
|
||
let a := 1
|
||
--v textDocument/definition
|
||
a + b
|
||
--^ textDocument/definition
|
||
where
|
||
b := 2
|
||
|
||
macro_rules | `(test) => `(Nat.succ (Nat.succ Nat.zero))
|
||
#check test
|
||
--^ textDocument/definition
|
||
|
||
class Foo2 where
|
||
foo : Nat → Nat
|
||
foo' : Nat
|
||
|
||
class Foo3 [Foo2] where
|
||
foo : [Foo2] → Nat
|
||
|
||
class inductive Foo4 : Nat → Type where
|
||
| mk : Nat → Foo4 0
|
||
|
||
def Foo4.foo : [Foo4 n] → Nat
|
||
| .mk n => n
|
||
|
||
class Foo5 where
|
||
foo : Foo2
|
||
|
||
|
||
instance : Foo2 := .mk id 0
|
||
instance : Foo3 := .mk 0
|
||
instance : Foo4 0 := .mk 0
|
||
instance [foo2 : Foo2] : Foo5 := .mk foo2
|
||
|
||
-- should go-to instance
|
||
--v textDocument/definition
|
||
#check Foo2.foo 2
|
||
--^ textDocument/definition
|
||
#check (Foo2.foo)
|
||
--^ textDocument/definition
|
||
#check (Foo2.foo')
|
||
--^ textDocument/definition
|
||
|
||
-- should go-to projection
|
||
#check @Foo2.foo
|
||
--^ textDocument/definition
|
||
|
||
-- test that the correct instance index is extracted
|
||
#check (Foo3.foo)
|
||
--^ textDocument/definition
|
||
|
||
-- non-projections should not go-to instance
|
||
#check (Foo4.foo)
|
||
--^ textDocument/definition
|
||
|
||
set_option pp.all true in
|
||
-- test that multiple instances can be extracted
|
||
#check (Foo5.foo)
|
||
--^ textDocument/definition
|
||
|
||
-- duplicate definitions link to the original
|
||
def mkFoo₁ := 1
|
||
--^ textDocument/definition
|
||
|
||
-- go-to-projection should be able to look through reducible definitions
|
||
@[reducible] def foo'' (n : Nat) := Foo2.foo n
|
||
|
||
#check foo'' 0
|
||
--^ textDocument/definition
|
||
|
||
-- go-to-projection should not be able to look through semi-reducible definitions
|
||
def foo''' (n : Nat) := Foo2.foo n
|
||
|
||
#check foo''' 0
|
||
--^ textDocument/definition
|