derive Show and Eq, improvements to LSP

This commit is contained in:
2026-02-24 20:01:58 -08:00
parent a789cffcce
commit 983dde4de2
21 changed files with 281 additions and 39 deletions

View File

@@ -16,6 +16,7 @@ import Lib.Prettier
import Lib.Types
import Lib.Util
import Lib.Erasure
import Lib.Derive
dumpEnv : Context -> M String
dumpEnv ctx =
@@ -529,6 +530,17 @@ processRecord ns recordFC (nameFC, nm) tele cname decls = do
let deps = ((name, RApp fc (RVar fc pname) (RVar fc "$self") Explicit) :: deps)
processFields autoPat tail deps rest
processDerive : String FC FC × String (FC × String) M Unit
processDerive ns fc (clFC, clName) (fc, name) = do
case clName of
"Eq" => do
decls <- deriveEq fc name
for_ decls $ processDecl ns
"Show" => do
decls <- deriveShow fc name
for_ decls $ processDecl ns
_ => error fc "derive \{clName} is not supported"
processExports : String FC List (FC × String) M Unit
processExports ns fc names = do
top <- getTop
@@ -542,6 +554,7 @@ processExports ns fc names = do
-- currently mixfix registration is handled in the parser
-- since we now run a decl at a time we could do it here.
processDecl ns (PMixFix _ _ _ _) = pure MkUnit
processDecl ns (DDerive fc tclass name) = processDerive ns fc tclass name
processDecl ns (TypeSig fc names tm) = processTypeSig ns fc names tm
processDecl ns (PType fc nm ty) = processPrimType ns fc nm ty
processDecl ns (PFunc fc nm used ty src) = processPrimFn ns fc nm used ty src