63 lines
1.6 KiB
Text
63 lines
1.6 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 : 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 := tt
|
|
| _ := ff
|
|
|
|
def toList (log : messageLog) : list message :=
|
|
log.revList.reverse
|
|
end messageLog
|
|
end lean
|