See also https://github.com/google/haskell-indexer/blob/master/haskell-indexer-backend-ghc/src/Language/Haskell/Indexer/Backend/GhcApiSupport.hs for an as-complete GHC API based setup as I could get. The comments indicate possible deficiencies.
The test https://github.com/google/haskell-indexer/blob/master/haskell-indexer-backend-ghc/tests/Language/Haskell/Indexer/Backend/Ghc/Test/BasicTestBase.hs#L179 shows some cases that are covered (for example testTemplateHaskellCodeExecFFI ). In practice one can run AST extraction with HscNoLink + HscInterpreted for most targets, but for hairy ones (FFI invoked from TemplateHaskell in certain ways, for examples) that will fail. 2018-01-19 19:46 GMT+01:00 Robin Palotai <[email protected]>: > See some additions inline. > BR > Robin > > 2018-01-19 18:27 GMT+01:00 Simon Peyton Jones via ghc-devs < > [email protected]>: > >> | To do this, my idea is to instruct GHC with a compilation flag to give >> | out its internal representation of the source code. >> >> Why can't you just use GHC as a library, and ask it to parse and >> typecheck the module and then look at what it gives you. >> >> Last time I checked (GHC 8.2, for haskell-indexer), using the library is > not equivalent to using GHC's Main. GHC's Main does tremendous amount of > magic with flag parsing and state setup, and doesn't expose all the > functionality for libraries to do the same. > > AFAIR we saw two possible ways to get the AST out from a complicated setup > (FFI, objects, packages, ...): > 1) invoke GHC and use Frontend plugin (but Frontend plugin is/was more > limited at the time - the gist in the below trac entry mentions that even > the Frontend plugin didn't do everything Main does). > 2) Refactor GHC Main and expose all the functionality to GHC API. > > I filed https://ghc.haskell.org/trac/ghc/ticket/14018 a while ago that's > slightly related. > > By the way, you can click around http://stuff.codereview.me/ghc/#ghc/ghc/ > Main.hs?corpus=ghc-8.2.1-rc2&signature in the 'main' function to see all > the magic. > > Others are more used to the GHC API than me, though. >> >> S >> >> | -----Original Message----- >> | From: ghc-devs [mailto:[email protected]] On Behalf Of >> | Németh Boldizsár >> | Sent: 19 January 2018 09:35 >> | To: [email protected] >> | Subject: Extracting representation from GHC >> | >> | Dear GHC Developers, >> | >> | I would like to ask your opinion on my ideas to make it easier to use >> | development tools with GHC. >> | >> | In the past when working on a Haskell refactoring tool I relied on >> | using the GHC API for parsing and type checking Haskell sources. I >> | extracted the representation and performed analysis and transformation >> | on it as it was needed. However using the refactorer would be easier >> | if it could work with build tools. >> | >> | To do this, my idea is to instruct GHC with a compilation flag to give >> | out its internal representation of the source code. Most build tools >> | let the user to configure the GHC flags so the refactoring tool would >> | be usable in any build infrastructure. I'm thinking of using the pre- >> | existing plugin architecture and adding two new fields to the Plugin >> | datastructure. One would be called with the parsed representation >> | (HsParsedModule) when parsing succeeds, another with the result of the >> | type checking (TcGblEnv) when type checking is finished. >> | >> | What do you think about this solution? >> | >> | Boldizsár >> | >> | (ps: My first idea was using frontend plugins, but I could not access >> | the representation from there and --frontend flag changed GHC >> | compilation mode.) >> | >> | _______________________________________________ >> | ghc-devs mailing list >> | [email protected] >> | https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmail.h >> | askell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc- >> | devs&data=02%7C01%7Csimonpj%40microsoft.com%7C9d78fd2d16994ade4d9008d5 >> | 5f2007c3%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C6365195135360471 >> <(513)%20536-0471> >> | 87&sdata=voUEz%2BKTp0p3CtwP1Hx6xA3cXN0qoYONLPd9T7xRve8%3D&reserved=0 >> _______________________________________________ >> ghc-devs mailing list >> [email protected] >> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs >> > >
_______________________________________________ ghc-devs mailing list [email protected] http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
