/- Copyright (c) 2019 Microsoft Corporation. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Sebastian Ullrich -/ import Lean.Attributes import Lean.Syntax import Lean.Message namespace Lean def Linter := Environment → Name → Syntax → IO MessageLog def mkLintersRef : IO (IO.Ref (Array Linter)) := IO.mkRef #[] /- Linters should be loadable as plugins, so store in a global IO ref instead of an attribute managed by the environment (which only contains `import`ed objects). -/ @[init mkLintersRef, export lean_linters_ref] constant lintersRef : IO.Ref (Array Linter) := arbitrary _ def addLinter (l : Linter) : IO Unit := do ls ← lintersRef.get; lintersRef.set (ls.push l) end Lean