
#14709: Extend the plugin mechanism to access program representation -------------------------------------+------------------------------------- Reporter: lazac | Owner: (none) Type: feature request | Status: new Priority: normal | Milestone: Component: GHC API | Version: 8.2.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | https://phabricator.haskell.org/D4342 https://ghc.haskell.org/trac/ghc/wiki/ExtendedPluginsProposal| -------------------------------------+------------------------------------- Comment (by lazac): Replying to [comment:5 bgamari]:
Writing down a few motivating examples of applications of the new plugin types may be a good place to start.
Some of these tools exist using external libraries, but by using GHC as the backend they may be applied to more complex projects. I'm mostly interested in editing and code transformation tools, so here is a few example: - **Auto-complete**: Records the names available in a scope using interface files and type checked AST. - **Semantics aware formatting**: Auto-formatter that uses fixity information to break up complex operator expressions. Uses parsed and type checked representation. - **Semantics aware syntax highlight**: Check interfaces for recording extra information about names and use this in an editor to enhance highlighting names. - **Code generator**: Generating pattern matches and expressions in a dependent-typed fashion. - **Auto-correct**: Automatic fix common errors. Uses `-fdefer-*` flags, extracts type-checked representation. Also checks interfaces files. - **Refactoring tool**: Building a project database of syntactic and semantic information to rewrite source code. Uses all versions of syntax tree, splices, interfaces. My suggestion for recompilation checking is: - `-fplugin` change -> recompile - The hash of used plugin changes -> recompile - `-fplugin-opt` change -> ask the plugin for each module whether recompilation is needed -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14709#comment:9 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler