Atom LSP plugin for HIE (Haskell IDE Engine)
Clone or download
lexi-lambda and Tehnix Improve wrapper to better handle stack projects
The previous wrapper code performed some basic detection of stack
projects, but did not handle hie installed using `stack build
--copy-compiler-tool` unless atom was started using `stack exec --
atom`. This commit adjusts the wrapper script to launch hie using `stack
exec` when a stack project is detected, with the added benefit of
ensuring all executables on the project’s path are on the PATH when hie
runs.

Additionally, this commit makes some minor changes to the way custom
wrappers are handled, treating them closer to the way the default
wrapper is handled. Primarily, this means passing the actual arguments
that should be passed to HIE instead of passing a single empty string
argument (which was not terribly useful).
Latest commit 2657d54 Sep 11, 2018

README.md

Atom plugin for HIE LSP server

Rudimentary support for HIE, relies on atom-ide-ui for displaying LSP interactions, and language-haskell to identify Haskell files. Internatlly uses atom-languageclient for the LSP client, and HIE as the LSP server.

To get hie to automatically detect the correct hie version to use based on your projects GHC version, enable the experimental flag 'Use hie-wrapper', and make sure to build your project using the Makefile in the HIE repository (builds multiple versions of hie).

Installation

You can install ide-haskell-hie by using apm.

apm install ide-haskell-hie

Or via Atom > Settings view > Install Packages > Search packages > ide-haskell-hie

From source

To contribute to ide-haskell-hie you might want to install it from source:

# Get source from `ide-haskell-hie` repository
git clone git@github.com:Tehnix/ide-haskell-hie.git
cd ide-haskell-hie
# install dependencies
npm install
# link local version in `dev` mode
apm link --dev
# start Atom in `dev` mode
atom --dev
# To unlink local version of `ide-haskell-hie` run
apm unlink --dev

For more information about apm and link check Contributing to Official Atom Packages.

Configuration

The plugin should work out-the-box, but your environment may differ for many reasons, and the following are some configurations that might help you get it working.

  • Absolute path to hie executable will set the path to hie, in case it's not on your $PATH.
  • Use hie wrapper makes Atom use the hie-wrapper.sh file to start hie through. This does assume that you built the hie executable using make build, but will fall back to plain hie.
  • Use custom hie wrapper enables you to use your own custom hie wrapper script, if the standard one doesn't suit your need (e.g. to use with nix).
  • The path to your custom hie wrapper specifies the path to the custom wrapper, and is required for it to take effect.
  • Turn on debugging output passes the --debug flag to hie (although not if using a custom wrapper, then you're on your own).
  • Log to a file (if debugging is on) will set the log file that debug writes to.

For additional debugging (e.g. stderr), you can enable Settings -> Core -> Debug L S P or add debugLSP: true to the core section in Debug -> Config... -> config.cson, and then view the output in the Atom Developer Console.

A few screenshots of the working things

Type/Datatips information on hover & Definitions/Hyperclick

Definitions/Hypercick support

Linter/diagnostics on save

Linter Errors

Outline view & Highlighting

Outline view on the right side and highlight of anotherFunc

Code actions

Code actions being applied

Code format

No screenshot really necessary here.

Not implemented

Miscellaneous

The code for the providers that HIE supports can be found here (permanent link here).