See #20055 (closed) and #18516 for context.
This work-in-progress MR reaps the benefits of the refactoring work we have done as part of #18516 and starts moving the suggestions buried in parser messages' diagnostics where they belong, i.e. in the
diagnosticHints implementation of the
instance Diagnostic PsMessage.
This is a slightly invasive MR as it would change the current GHC output when it comes to certain diagnostic, but I think it's a necessary evil. In particular, historically GHC was never consistent in the way errors and warnings were emitted alongside suggestions. Check out the following excerpt:
PsErrIllegalBangPattern e -> mkSimpleDecorated $ text "Illegal bang-pattern (use BangPatterns):" $$ ppr e ... -> mkSimpleDecorated $ text "Multi-way if-expressions need MultiWayIf turned on" ... PsErrIllegalQualifiedDo qdoDoc -> mkSimpleDecorated $ vcat [ text "Illegal qualified" <+> quotes qdoDoc <+> text "block" , text "Perhaps you intended to use QualifiedDo" ] ...
There are here at least 3 stylistic forms: one where the hint is short and quick between parentheses, one where is "hidden" in the diagnostic ("need MultiWayIf turned on") and one where is a bit more explicit and phrased like a suggestion "Perhaps you intended..". However, using the new diagnostic infrastructure, it means everything is printed consistently now, like this:
T16270.hs:26:12: error: Illegal bang-pattern !i Suggested fix: Perhaps you intended to use BangPatterns T16270.hs:28:9: error: Illegal multi-way if-expression Suggested fix: Perhaps you intended to use MultiWayIf qdofail002.hs:11:13: Illegal qualified ‘P.mdo’ block Suggested fix: Perhaps you intended to use QualifiedDo
My goal here is not to change the existing prose of the messages (although I am polishing it as I see fit), as that would be too much of an opinionated/bikesheddy task for me to do. Hopefully somebody else can step up for the task, and we can discuss this further as part of a larger ticket/proposal.