TBD whether we depend on ILogger directly, or introduce an interface. ILogger would add another dependency; so may be better to just define our own interface that is similar to ILogger.
Create a new class, CheckDiagnostics, with properties corresponding to items above.
CheckResult then hold a single instance of this object. As Check does things (parse, eval, etc), if the object is available, fill out the properties on the object.
For Check, Eval add a helper that accepts ILogger and captures (As appropriate):
Some optional additional information provided by host:
Also could apply this to LSP. Notably, we want:
See Fx test site for examples.