lean4-htt/library/init/lean/message.lean
2019-03-27 12:12:21 -07:00

66 lines
1.7 KiB
Text

/-
Copyright (c) 2018 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Author: Sebastian Ullrich
Message Type used by the Lean frontend
-/
prelude
import init.data.tostring init.lean.position
namespace Lean
inductive MessageSeverity
| information | warning | error
-- TODO: structured messages
structure Message :=
(filename : String)
(pos : Position)
(endPos : Option Position := none)
(severity : MessageSeverity := MessageSeverity.error)
(caption : String := "")
(text : String)
namespace Message
protected def toString (msg : Message) : String :=
msg.filename ++ ":" ++ toString msg.pos.line ++ ":" ++ toString msg.pos.column ++ ": " ++
(match msg.severity with
| MessageSeverity.information := ""
| MessageSeverity.warning := "warning: "
| MessageSeverity.error := "error: ") ++
(if msg.caption = "" then "" else msg.caption ++ ":\n") ++
msg.text
instance : Inhabited Message :=
⟨{ filename := "", pos := ⟨0, 1⟩, text := ""}⟩
instance : HasToString Message :=
⟨Message.toString⟩
end Message
structure MessageLog :=
-- messages are stored in reverse for efficient append
(revList : List Message)
namespace MessageLog
def empty : MessageLog :=
⟨[]⟩
def add (msg : Message) (log : MessageLog) : MessageLog :=
⟨msg :: log.revList⟩
protected def append (l₁ l₂ : MessageLog) : MessageLog :=
⟨l₂.revList ++ l₁.revList⟩
instance : HasAppend MessageLog :=
⟨MessageLog.append⟩
def hasErrors (log : MessageLog) : Bool :=
log.revList.any $ λ m, match m.severity with
| MessageSeverity.error := true
| _ := false
def toList (log : MessageLog) : List Message :=
log.revList.reverse
end MessageLog
end Lean