Does this need to be *this* hardcoded? Or could we just parse the pragma and compare it to a list of known pragmas to be parsed from a file (or settings value?).
The change in question does: - pragmas = options_pragmas ++ ["cfiles", "contract"] + pragmas = options_pragmas ++ ["cfiles", "contract", "hlint"] to the `compiler/parser/Lexer.x`, and as such is somewhat hardcoded. So we already ignore a bunch of `option_` and those three pragmas. And I see <0,option_prags> { "{-#" { warnThen Opt_WarnUnrecognisedPragmas (text "Unrecognised pragma") (nested_comment lexToken) } } which I believe handles the unrecognisedPragmas case. Can't we have a ignored-pragmas value in the settings, that just lists all those we want to ignore, instead of hardcoding them in the Lexer? That at least feels to me like a less invasive (and easier to adapt) appraoch, that might be less controversial? Yes it's just moving goal posts, but it moves the logic into a runtime value instead of a compile time value. Cheers, Moritz > On Oct 17, 2018, at 4:05 PM, Simon Marlow <marlo...@gmail.com> wrote: > > Simon - GHC provides some protection against mistyped pragma names, in the > form of the -Wunrecognised-pragmas warning, but only for {-# ... #-} pragmas. > If tools decide to use their own pragma syntax, they don't benefit from this. > That's one downside, in addition to the others that Neil mentioned. > > You might say we shouldn't care about mistyped pragma names. If the user > accidentally writes {- HLNIT -} and it is silently ignored, that's not our > problem. OK, but we cared about it enough for the pragmas that GHC > understands to add the special warning, and it's reasonable to expect that > HLint users also care about it. > > (personally I have no stance on whether we should have this warning, there > are upsides and downsides. But that's where we are now.) > > Cheers > Simon > > On Tue, 16 Oct 2018 at 23:34, Simon Peyton Jones <simo...@microsoft.com> > wrote: > I’m still not understanding what’s wrong with > > > > {- HLINT blah blah -} > > > > GHC will ignore it. HLint can look at it. Simple. > > > > I must be missing something obvious. > > > > Simon > > > > From: ghc-devs <ghc-devs-boun...@haskell.org> On Behalf Of Simon Marlow > Sent: 16 October 2018 21:44 > To: Neil Mitchell <ndmitch...@gmail.com> > Cc: ghc-devs <ghc-devs@haskell.org> > Subject: Re: Treatment of unknown pragmas > > > > I suggested to Neil that he add the {-# HLINT #-} pragma to GHC. It seemed > like the least worst option taking into account the various issues that have > already been described in this thread. I'm OK with adding HLINT; after all we > already ignore OPTIONS_HADDOCK, OPTIONS_NHC98, a bunch of other OPTIONS, > CFILES (a Hugs relic), and several more that GHC ignores. > > > > We can either > > (a) not protect people from mistyped pragmas, or > > (b) protect people from mistyped pragma names, but then we have to bake in > the set of known pragmas > > > > We could choose to have a different convention for pragmas that GHC doesn't > know about (as Ben suggests), but then of course we don't get any protection > for mistyped pragma names when using that convention. > > > > Cheers > > Simon > > > > > > On Tue, 16 Oct 2018 at 21:12, Neil Mitchell <ndmitch...@gmail.com> wrote: > >> A warning flag is an interesting way to deal with the issue. On the >> other hand, it's not great from an ergonomic perspective; afterall, this >> would mean that all users of HLint (and any other tool requiring special > > Yep, this means every HLint user has to do an extra thing. I (the > HLint author) now have a whole pile of "how do I disable warnings in > Stack", and "what's the equivalent of this in Nix". Personally, it ups > the support level significantly that I wouldn't go this route. > > I think it might be a useful feature in general, as new tools could > use the flag to prototype new types of warning, but I imagine once a > feature gets popular it becomes too much fuss. > >>> I think it makes a lot of sense to have a standard way for third-parties >>> to attach string-y information to Haskell source constructs. While it's >>> not strictly speaking necessary to standardize the syntax, doing >>> so minimizes the chance that tools overlap and hopefully reduces >>> the language ecosystem learning curve. >> >> This sounds exactly like the existing ANN pragma, which is what I've wanted >> LiquidHaskell to move towards for a long time. What is wrong with using the >> ANN pragma? > > Significant compilation performance penalty and extra recompilation. > ANN pragmas is what HLint currently uses. > >> I'm a bit skeptical of this idea. Afterall, adding cases to the >> lexer for every tool that wants a pragma seems quite unsustainable. > > I don't find this argument that convincing. Given the list already > includes CATCH and DERIVE, the bar can't have been _that_ high to > entry. And yet, the list remains pretty short. My guess is the demand > is pretty low - we're just whitelisting a handful of additional words > that aren't misspellings. > > Thanks, Neil > _______________________________________________ > ghc-devs mailing list > ghc-devs@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs > > _______________________________________________ > ghc-devs mailing list > ghc-devs@haskell.org > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs