Welcome Haskell IDE Engine (future) users,
Not an IDE, still no release, it is a work in progress.
It is a common point to join together the effort of integrating tools into an IDE and the effort of writing tools for an IDE, by providing an API in the middle that each of these parties can work from and to.
This month has been mostly about turning ideas into practice, and dealing with the details that come out when things become concrete.
The more concrete things we have are:
One of the principles of HIE is that each plugin/command provides a PluginDescriptor
documenting the commands it provides, parameters they take and return types.
Moritz Kiefer has created a module[1] to take this information and generate API documentation[2]. The information is present, but help with styling / presentation will be gladly accepted.
- [1] https://github.com/haskell/haskell-ide-engine/tree/master/hie-docs-generator
- [2] https://haskell.github.io/haskell-ide-engine/
JP Moresmau has extended the Leksah integration[3][4] to now provide a context-specific menu providing available HIE commands. This includes the ability to invoke HaRe to do refactorings. To enable this we now have a specific hie-base[5] module with just the basic types which can be included in the IDE side if it is fortunate enough to use haskell.
- [3] https://github.com/JPMoresmau/leksah/tree/hie_integration
- [4] https://github.com/JPMoresmau/leksah-server/tree/hie_integration
- [5] https://github.com/haskell/haskell-ide-engine/tree/master/hie-base
The Emacs integration uses the PluginDescriptor
to generate a set of elisp functions corresponding to each plugin command.
- The macro generating these has been extended to populate the docstrings for these.
- It also handles the
HieDiff
return type which means it can apply the changes from a HaRe refactoring, or any other plugin generating a diff. - It prompts interactively for any additional parameters required.
- applyrefact is a wrapper around Matthew Pickering's library to apply hlint changes to source code.
- egasync is an example wrapper showing how a plugin can launch its own process in the server and stream output from it back to the IDE, if the transport used supports this. Otherwise the transport will batch it up when a request is received for the output.
The current project focus is still on getting our collective heads straight on what actually needs to be done, and providing working integrations to at least 2 IDEs to get a better feel for what is needed.
Both of these are well in hand, and if anyone would like to join in the discussion happens via the github issue tracker and docs section of the project, as well as IRC at #haskell-ide-engine on freenode.
- Decide on matching an existing IDE protocol or designing a new one #2
- Representation of arbitrary types for a plugin #14
- Plugin function definition #16
- Add QuickCheck tests for FromJSON / ToJSON instances #48
- Check PluginDescriptor on loading #52
- Add a signal handler to flush logs on exit #58
- Plugin startup / private data #83
- Create a diff type #95
- Replace logging package #112
- Split between haskell-ide-engine and haskell-plugin-api #118
- Document existence of
module-management
package and ghc-vis #124 - Provide ghc-modi transport? #125
- Sort out ghc-mod session management #127
- Git integration #128
- apply-refact plugin #131
- emacs: how to run hie with arguments / logging #134
- Change HieDiff to represent a standard patch format #138
- Detect plugin param name collisions #115
- Bring in a diff type, and introduce semantic types #116
- New logger #120
- Rework api split #122
- (elisp) Add log of hie process input / output #123
- Ghc mod session #130
- Apply refact plugin #133
- Ghc mod find #135
- Plugin state #137
- Change HieDiff to use a patch format #139
- Hare context #141
- Initial example async process plugin #143
- Base split #144
- Support more commands #145
- Add tests for hie-create-command #146
- Add integration test for hie-hare-rename #147
- Move to a plugin/command url scheme #148
- Documentation generator #149
Alan Zimmerman, Daniel Gröber, JP Moresmau, Michael Sloan, Moritz Kiefer, Tobias G. Waaler
A special thanks to Gracjan Polak for running his report scripts on this repo.
Haskell IDE Engine needs volunteers like any other open source project. For more information see:
https://github.com/haskell/haskell-ide-engine
Also drop by our IRC channel: #haskell-ide-engine at irc.freenode.net.
Thanks!