[GHC] #8809: Prettier error messages?
GHC
ghc-devs at haskell.org
Wed Nov 16 04:28:47 UTC 2016
#8809: Prettier error messages?
-------------------------------------+-------------------------------------
Reporter: joelteon | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.9
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
#8809,#10073,#10179 |
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by Rufflewind):
> Display one line of code extracted from the original source code, along
with a marker indicating the location of the error.
So this (“caret diagnostic” is what Clang calls them) is the one I'm a bit
stuck on. In order to print a line in the original source file, I would
need to read a file, i.e. perform `IO`. This is not possible with
`ErrUtils.mkLocMessageAnn`, AFAICT.
I thought of a workaround, but it would require a small tweak to `Doc`: I
need to add an atom for `CaretDiagnostic` containing the `RealSrcInfo`,
and then read the original source file in `printDoc`. However, I feel
that this is a bit hacky.
IMO, there should really be two layers in the system:
- A `Message` type stores each individual diagnostic message unit along
with an associated `SrcLoc` and any other useful information in their
original format (e.g. fragments of the AST).
- `Doc` should remain as a simple, textual output device with fancy
formatting (no support for embedded ASTs). (It does need to understand
colors and bold though, as their widths must be treated as zero.)
The rendering function `[Message] -> IO Doc` would support `IO`, and this
is where the caret diagnostics can be constructed, and it would also
provide all the necessary information for `Doc` deduce alignment
correctly. Hence, IMO the debate over how to represent ASTs should focus
on the `Message` type, not `Doc`.
That being said, even if this idea does work, I'm not sure I have the time
to work on a major refactor right now, so I might go with the hacky
solution for the time being.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8809#comment:27>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list