<div dir="ltr"><p>Welcome Haskell IDE Engine (future) users,</p>
<p>Haskell IDE Engine progress report for November 2015.</p>
<h3>What is Haskell IDE Engine?</h3>
<p>Not an IDE.</p>
<p>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.</p>
<h3>Important developments</h3>
<p>The first commit to this project took place on 22 October. In a
little over a month we have had 290 commits, 116 PRs, and 114 issues.</p>
<p>We have 14 contributors, 16 forks, 155 stars and 36 watchers.</p>
<p>So it is safe to say we are actively working on the project.</p>
<p>At this point we have an initial implementation of the architecture,
which allows for different front end transport implementations to
interface with the IDE. The current supported transports are JSON over
stdio and JSON over HTTP. The architecture allows for other data
encodings or interface protocols, so long as the <code>hie</code> side can read and write to <code>TChan</code>s.</p>
<p>We have a <code>PluginDescriptor</code> type which captures
information about a given plugin, which is loaded into the main
dispatcher in a namespace per plugin. The commands exposed by a plugin
can run in synchronous or async mode, if they are long running, or must
coordinate with backend infrastructure.</p>
<p>The initial plugins under development provide access to</p>
<ul><li>ghc-mod</li><li>HaRe</li><li>base plugin, allowing plugin introspection</li><li>example plugin</li></ul>
<p>A ghci-ng plugin is on hold pending the Remote GHCi work Simon Marlow is doing.</p>
<p>We have initial integrations to emacs, and to leksah.</p>
<h3>Current project focus</h3>
<p>The current project focus is on getting our collective heads straight
on what actually needs to be done, and to provide working integrations
to at least 2 IDEs to get a better feel for what is needed.</p>
<p>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.</p>
<h3>Issues closed in November</h3>
<ul><li>Do plugins the same way as GHC <a href="https://github.com/haskell/haskell-ide-engine/issues/1">#1</a></li><li>Use Idris's protocol? <a href="https://github.com/haskell/haskell-ide-engine/issues/3">#3</a></li><li>What would the smallest useful haskell-ide look like <a href="https://github.com/haskell/haskell-ide-engine/issues/4">#4</a></li><li>Loose comments from editor (emacs) perspective <a href="https://github.com/haskell/haskell-ide-engine/issues/5">#5</a></li><li>Name of project module hierarchy root question <a href="https://github.com/haskell/haskell-ide-engine/issues/9">#9</a></li><li>Proposition: setup the same label and milestones system as in stack repo <a href="https://github.com/haskell/haskell-ide-engine/issues/22">#22</a></li><li>The command "./travis_long stack +RTS -N2 -RTS build --test --pedantic" exited with 1 <a href="https://github.com/haskell/haskell-ide-engine/issues/28">#28</a></li><li>Travis build should be deterministic <a href="https://github.com/haskell/haskell-ide-engine/issues/30">#30</a></li><li>HIE should start web server only on demand <a href="https://github.com/haskell/haskell-ide-engine/issues/31">#31</a></li><li>Make all ToJSON instances clearly visible <a href="https://github.com/haskell/haskell-ide-engine/issues/32">#32</a></li><li>make jsonHttpListener only start via a CLI flag <a href="https://github.com/haskell/haskell-ide-engine/issues/33">#33</a></li><li>Add the balance of commands to the HaRe plugin <a href="https://github.com/haskell/haskell-ide-engine/issues/36">#36</a></li><li>Extend the dispatcher to validate commands before calling worker <a href="https://github.com/haskell/haskell-ide-engine/issues/37">#37</a></li><li>Decide on package name for the plugin API / plugin packages <a href="https://github.com/haskell/haskell-ide-engine/issues/39">#39</a></li><li>Remove Context from IdeRequest <a href="https://github.com/haskell/haskell-ide-engine/issues/40">#40</a></li><li>Consume invalid input <a href="https://github.com/haskell/haskell-ide-engine/issues/43">#43</a></li><li>Encourage stateless programming style <a href="https://github.com/haskell/haskell-ide-engine/issues/45">#45</a></li><li>Worker function parameter passing <a href="https://github.com/haskell/haskell-ide-engine/issues/54">#54</a></li><li>Bring in async processing <a href="https://github.com/haskell/haskell-ide-engine/issues/67">#67</a></li><li>Define Emacs menu <a href="https://github.com/haskell/haskell-ide-engine/issues/68">#68</a></li><li>Add references to hsimport, hlint-refactor, haskdogs, etc. <a href="https://github.com/haskell/haskell-ide-engine/issues/84">#84</a></li><li>struggling with ghci-ng <a href="https://github.com/haskell/haskell-ide-engine/issues/86">#86</a></li><li>Different behavior between launch stack exec hie and hie directly <a href="https://github.com/haskell/haskell-ide-engine/issues/87">#87</a></li><li>PluginDescriptor should not be serialisable <a href="https://github.com/haskell/haskell-ide-engine/issues/92">#92</a></li><li>Add user visible info to PluginDescriptor <a href="https://github.com/haskell/haskell-ide-engine/issues/98">#98</a></li><li>Consider switching back to aeson-generated json serialization? <a href="https://github.com/haskell/haskell-ide-engine/issues/109">#109</a></li></ul>
<h3>Pull requests merged in November</h3>
<ul><li>Fix badges <a href="https://github.com/haskell/haskell-ide-engine/pull/15">#15</a></li><li>Add argon to Tools <a href="https://github.com/haskell/haskell-ide-engine/pull/17">#17</a></li><li>(RFC) [list of tools] add more tools, add links, add short descriptions, group tools <a href="https://github.com/haskell/haskell-ide-engine/pull/18">#18</a></li><li>fixed typo <a href="https://github.com/haskell/haskell-ide-engine/pull/21">#21</a></li><li>[RFC] New readme for the project <a href="https://github.com/haskell/haskell-ide-engine/pull/23">#23</a></li><li>Fix spelling of ‘supersede’ in README <a href="https://github.com/haskell/haskell-ide-engine/pull/24">#24</a></li><li>Fix minor typos <a href="https://github.com/haskell/haskell-ide-engine/pull/26">#26</a></li><li>Add Emacs process communication layer <a href="https://github.com/haskell/haskell-ide-engine/pull/27">#27</a></li><li>Improve wire protocol <a href="https://github.com/haskell/haskell-ide-engine/pull/34">#34</a></li><li>Handwrite ToJSON instances, fix #32 <a href="https://github.com/haskell/haskell-ide-engine/pull/35">#35</a></li><li>Introduce cmdFileExtensions for the CommandDescriptor <a href="https://github.com/haskell/haskell-ide-engine/pull/41">#41</a></li><li>Make web interface optional and port configurable <a href="https://github.com/haskell/haskell-ide-engine/pull/42">#42</a></li><li>Remove Context, simplifying IdeRequest <a href="https://github.com/haskell/haskell-ide-engine/pull/44">#44</a></li><li>Implement testing framework for Emacs (plus some fixes) <a href="https://github.com/haskell/haskell-ide-engine/pull/46">#46</a></li><li>Remove state cwd <a href="https://github.com/haskell/haskell-ide-engine/pull/47">#47</a></li><li>Dispatcher validation <a href="https://github.com/haskell/haskell-ide-engine/pull/51">#51</a></li><li>Improve console <a href="https://github.com/haskell/haskell-ide-engine/pull/53">#53</a></li><li>Error structure with code <a href="https://github.com/haskell/haskell-ide-engine/pull/55">#55</a></li><li>Use a GADT parametrized by param type, fixes #54 <a href="https://github.com/haskell/haskell-ide-engine/pull/56">#56</a></li><li>Ghcmod commands <a href="https://github.com/haskell/haskell-ide-engine/pull/57">#57</a></li><li>Expect json input separated by STX, fix #43 <a href="https://github.com/haskell/haskell-ide-engine/pull/59">#59</a></li><li>fixed typo ParamDescription <a href="https://github.com/haskell/haskell-ide-engine/pull/60">#60</a></li><li>Add the rest of the commands to HaRe plugin <a href="https://github.com/haskell/haskell-ide-engine/pull/62">#62</a></li><li>Short cut sleeping when result is available <a href="https://github.com/haskell/haskell-ide-engine/pull/63">#63</a></li><li>Typed responses <a href="https://github.com/haskell/haskell-ide-engine/pull/64">#64</a></li><li>Enrich plugins call <a href="https://github.com/haskell/haskell-ide-engine/pull/65">#65</a></li><li>Implement STX <a href="https://github.com/haskell/haskell-ide-engine/pull/69">#69</a></li><li>Fall back to emacs if there is no emacs24 binary <a href="https://github.com/haskell/haskell-ide-engine/pull/70">#70</a></li><li>Async dispatch <a href="https://github.com/haskell/haskell-ide-engine/pull/72">#72</a></li><li>Remove invalid input even if not handled <a href="https://github.com/haskell/haskell-ide-engine/pull/73">#73</a></li><li>Handle end-of-file <a href="https://github.com/haskell/haskell-ide-engine/pull/74">#74</a></li><li>Properly handle STX delimited message <a href="https://github.com/haskell/haskell-ide-engine/pull/75">#75</a></li><li>[WIP] Initial stab at hie-mode <a href="https://github.com/haskell/haskell-ide-engine/pull/76">#76</a></li><li>Rename sub-packages to be hie-* <a href="https://github.com/haskell/haskell-ide-engine/pull/77">#77</a></li><li>added fast-tags <a href="https://github.com/haskell/haskell-ide-engine/pull/80">#80</a></li><li>Simplify json <a href="https://github.com/haskell/haskell-ide-engine/pull/85">#85</a></li><li>Support commands that only require a context <a href="https://github.com/haskell/haskell-ide-engine/pull/88">#88</a></li><li>Add plugin name to commandDetail response <a href="https://github.com/haskell/haskell-ide-engine/pull/90">#90</a></li><li>Ghc mod dir <a href="https://github.com/haskell/haskell-ide-engine/pull/91">#91</a></li><li>PluginDescriptor no longer serialisable. <a href="https://github.com/haskell/haskell-ide-engine/pull/93">#93</a></li><li>Adapt elisp to plugins response changes <a href="https://github.com/haskell/haskell-ide-engine/pull/94">#94</a></li><li>Json enhancements <a href="https://github.com/haskell/haskell-ide-engine/pull/96">#96</a></li><li>Use hierarchical menus instead of a flat one <a href="https://github.com/haskell/haskell-ide-engine/pull/97">#97</a></li><li>Create elisp functions for all commands <a href="https://github.com/haskell/haskell-ide-engine/pull/99">#99</a></li><li>Rename haskell-ide-engine to hie <a href="https://github.com/haskell/haskell-ide-engine/pull/100">#100</a></li><li>Update irc channel for travis <a href="https://github.com/haskell/haskell-ide-engine/pull/101">#101</a></li><li>Insert dash between plugin and command name <a href="https://github.com/haskell/haskell-ide-engine/pull/102">#102</a></li><li>Use dash.el <a href="https://github.com/haskell/haskell-ide-engine/pull/103">#103</a></li><li>nicer parameters and command return type <a href="https://github.com/haskell/haskell-ide-engine/pull/105">#105</a></li><li>Install dash.el for tests and require it <a href="https://github.com/haskell/haskell-ide-engine/pull/106">#106</a></li><li>docs: mention apply-refact, hsimport, haskdogs <a href="https://github.com/haskell/haskell-ide-engine/pull/110">#110</a></li><li>add ShortName and Overview to PluginDescriptor <a href="https://github.com/haskell/haskell-ide-engine/pull/111">#111</a></li><li>Extract the first type of a type info response <a href="https://github.com/haskell/haskell-ide-engine/pull/113">#113</a></li></ul>
<h3>Contributors active in November</h3>
<p>Aaron Wolf,
Alan Zimmerman,
Daniel Bergey,
Daniel Gröber,
Gracjan Polak,
JP Moresmau,
Jochen Görtler,
Joe Hillenbrand,
Justin Wood,
Michael Sloan,
Moritz Kiefer,
Rory O’Kane,
Rémi Vion,
jpmoresmau</p>
<h3>Thanks</h3>
<p>A special thanks to Gracjan Polak for running his report scripts on this repo.</p>
<h3>Contributing</h3>
<p>Haskell IDE Engine needs volunteers like any other open source project.
For more information see:</p>
<p><a href="https://github.com/haskell/haskell-ide-engine">https://github.com/haskell/haskell-ide-engine</a></p>
<p>Also drop by our IRC channel: #haskell-ide-engine at <a href="http://irc.freenode.net">irc.freenode.net</a>.</p>
<p>Thanks!</p><p> Alan<br></p></div>