Loc.Error now carries a diagnostic: a stable kind, a span, notes that each have their own span and severity, and the macro expansion it came from. The notes are the part that was actually missing — "this is wrong here" plus "because of that, over there" is two places and two explanations, and a single string can state only one of them. The compatibility story for the daemon, which was the open question: the single-diagnostic exception stays the single-diagnostic exception. Session and dev evaluate one form and have one failure to report, so they take a location and a message out of it with Loc.summary and are otherwise unchanged. A second exception carries a list, and only a driver that compiles a whole file raises it, so nothing interactive has to know it is there. No message text changed.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%