A Sublime Text 3 plugin for Haskell. Features cabal building, error and warning highlighting, smart completion and ghc-mod integration.
B. Scott Michel
B. Scott Michel release 2.1.32
on_query_context should return a value.
Latest commit 1c054d9 Mar 23, 2018
Permalink
Failed to load latest commit information.
Commands Make REPL Great Again! Dec 2, 2017
Completions more functionality for ghc-mod Jun 1, 2017
Icons ERRORS storage rewritten, now can autofix by hovering hint Sep 24, 2016
Keymaps minor enhancements May 1, 2017
Menus repl tweaking Dec 8, 2017
Messages release 2.1.32 Mar 23, 2018
Settings hlint_opts -> lint_opts Mar 23, 2018
Snippets Added OPTIONS_GHC snippet Oct 7, 2016
Syntaxes "sublime-syntax" highlighter: the beginning Jan 31, 2018
Themes issue 408: cubicle theme missing sublimehaskell.marker scopes Feb 21, 2018
doc more wip May 23, 2017
ghcmod remove duplicative functions Jan 26, 2018
hsdev yell about mismatched hsdev versions Jan 29, 2018
internals hlint_opts -> lint_opts Mar 23, 2018
scripts update script's directories Jan 29, 2018
.gitignore release docs Jun 7, 2017
.hgignore Ignore Sublime files. Apr 5, 2012
.no-sublime-package Unzip this package Aug 25, 2013
.pylintrc Merge branch 'master' into backend_refactor May 2, 2017
LICENSE.txt Renamed the license file, which was inexplicably called README. Mar 3, 2012
README.md 2.0.1 force commit #2 Sep 27, 2017
SubHaskEditing.md more documentation twiddling. Apr 10, 2017
SublimeHaskell.sublime-build issue 364: can't run tests Oct 29, 2017
__init__.py pylint, Unicode and settings fixes Mar 23, 2017
add_import.py make fly mode great again Dec 20, 2017
autocomplete.py fly-check stability Jan 4, 2018
backend_cmds.py update cabal project status whenever backend changes Dec 8, 2017
build.py remove duplicative functions Jan 26, 2018
cabal.py rework status line Dec 8, 2017
check_lint.py hlint_opts -> lint_opts Mar 23, 2018
cmdwin_types.py hsdev client receiver and callback rework. Jan 3, 2018
commands.py remove duplicative functions Jan 26, 2018
dependencies.json pylint code audit Apr 5, 2017
event_common.py 2.1.22: Fix fly mode, fix bad merge Jan 21, 2018
fly_check.py 2.1.22: Fix fly mode, fix bad merge Jan 21, 2018
indenters.py remove duplicative functions Jan 26, 2018
info_popup.py issue 416 (follow-on): XML error diag in new sublime color schemes Mar 19, 2018
messages.json release 2.1.32 Mar 23, 2018
parseoutput.py remove duplicative functions Jan 26, 2018
repl.py fix issues 404, 407 Feb 13, 2018
subhask.sublime-project clean up 'SublimeHaskell: Run', remove 'SublimeHaskell: Stack Exec' Nov 10, 2017
sublime_haskell_common.py fix issues 404, 407 Feb 13, 2018
symbols.py pylint cleanups Nov 15, 2017
types.py make fly mode great again Dec 20, 2017
zzplugin.py on_query_context needs to return a value Mar 23, 2018

README.md

README

Package Control Join the chat at https://gitter.im/SublimeHaskell/SublimeHaskell PayPal Flattr this git repo

look

Quick link ==> SublimeHaskell's Documentation

Setup

Required (Before You Install SublimeHaskell)

You will need to install the GHC Haskell compiler, the cabal build tool and a backend before you install SublimeHaskell.

  • The Glorious Haskell Computer (ghc). Preferably, you should install the Haskell Platform if you don't already have a Haskell development and hacking environment set up.
  • cabal. Under normal circumstances, cabal should come pre-installed with your Haskell environment, e.g., if you installed the Haskell Platform.
  • A backend. SublimeHaskell communicates with the backend to support the interesting editing features. The preferred backend is hsdev. You can use one of the deprecated backends, but know that support for these backends may be dropped or removed in a future SublimeHaskell release.
    • hsdev cabal package (cabal install hsdev) for inspection, enhanced completion, goto, symbol info etc.
    • Deprecated backends
      • ghc-mod (for import and LANGUAGE completions and type inference, cabal install ghc-mod, not used if hsdev enabled, ghc-mod is used by hsdev as a library)

Install SublimeHaskell

  1. Get Sublime Text: http://www.sublimetext.com/
  2. Install the Sublime Package Control package: http://wbond.net/sublime_packages/package_control/installation
  3. Use Package Control to install SublimeHaskell

Open a Haskell source file, cabal builder file or a stack.yaml builder and have a productive Haskell development session!

Optional Tools

  • stack. The Haskell Tool Stack. If you installed the Haskell Platform, you already have this installed. stack is a companion Haskell build tool that supplements cabal.
  • SublimeREPL package for REPL support, if you want to interact with GHCI from within SublimeText.
  • Code prettifier:

Tool Installation Location

Tools (cabal, hsdev, ghc-mod, ghc, etc.) are usually installed in a directory that is already added to your PATH environment variable. SublimeHaskell will also look for these tools in several "Haskell standard" places. These places include:

Builder *nix Platforms Windows
stack $HOME/.local/bin %APPDATA%/local/bin
cabal user $HOME/.cabal/bin %APPDATA/cabal/bin
cabal global /usr/local/bin %PROGRAMFILES%/Haskell/bin

More advanced users can configure cabal's user and global install paths in $HOME/.cabal/config. SublimeHaskell will use these values if configured and if the directories to which they refer exist.

If you have a non-standard installation location for your tools, you can configure this in SublimeHaskell's "User Settings" by adjusting add_to_PATH. You will have to restart SublimeText after you save your preferences.

SublimeHaskell Theme

There is a special theme with enhanced Haskell entities and marks (errors, warnings and hints) coloring. Note different coloring for types and constructors (in import list, data declaration etc.), special coloring of generic variables in types, pragmas and module imports

compare

Quickstart

  • Open the SublimeText Command Palette ( Ctrl-Shift-P or Option-Command-P on OS X) and type haskell to explore SublimeHaskell's goodness.

  • When editing Haskell source files, automatic error highlighting and enhanced auto-completion is available.

  • Each time you save, any errors in your program will be listed at the bottom of the window and highlighted in the source code.

  • All source files in the project are scanned on change. Any symbols that they export are provided in the auto-complete suggestions.

  • Stylish-haskell can be used to stylish file or selected text.

  • Use F12 to go to declaration and ctrl+k ctrl+i to show symbol info with documentation. These commands are also available through context menu with right-click.

  • To show inferred types use Show type (ctrl-k ctrl-h ctrl-t) command.

  • To insert inferred type use Insert type (ctrl-k ctrl-h ctrl-i).

  • You can jump between the errors and warnings with alt+d alt+e and alt+shift+d alt+shift+e.

  • To show hidden error output, use command Show error panel (ctrl-alt-e)

Features and SublimeHaskell Goodness

Stack support

Build commands such as Build, Clean, Install, Rebuild uses stack if there is stack.yaml near .cabal. If you don't want to use stack, set haskell_build_tool setting to cabal.

hsdev uses stack to build dependencies and to get corresponding package-dbs. Since 0.1.7.2 it passes --compiler and --arch options to stack to get package-dbs built with hsdev-compatible compiler.

Enhanced completion

Works in export list (showing symbols in scope), import list, expressions. Completes after module qualifier (several modules can be import qualified as with same qualifier). Takes into account module reexports for sources. Autocompletion

Popups

  • Show popup with symbol info and with error/warning/hint details. Requires SublimeText 3 dev build > 3116 (https://forum.sublimetext.com/t/dev-build-3116/21148). Hover

  • It also shows inferred type when possible HoverTypes

  • And you can autofix warnings/hints on popup for warnings/hints AutoFixHover

Commands:

  • SublimeHaskell: Insert import for symbol — add import for declaration InsertImport
  • SublimeHaskell: Find declarations — find declarations in installed packages and in projects
  • SublimeHaskell: Search declarations everywhere — search declarations in hayoo too
  • SublimeHaskell: Browse module — get declarations for module BrowseModule
  • SublimeHaskell: Browse declarations — get declarations in scope of current file
  • SublimeHaskell: Show symbol info — get help for symbol, ctrl+k ctrl+i
  • SublimeHaskell: Toggle symbol info panel — toggle continuout symbol info panel, which show info about symbol under cursor. Useful when reading code. SymbolInfo
  • SublimeHaskell: Go to module — go to module, ctrl+k ctrl+p GoToModule
  • SublimeHaskell: Go to declaration — overrides default, f12
  • Ctrl+R, Ctrl+Shift+R — overrides default, goto symbol and goto symbol in project
  • SublimeHaskell: Show type — show type/types for current expression, ctrl-k ctrl-h ctrl-t
  • SublimeHaskell: Expand selection to Expression — expand selection to expression, ctrl+shift+y
  • SublimeHaskell: Show/hide all types — get all types and highlight while selection modifies, ctrl+t, h Types
  • SublimeHaskell: Insert type — insert type for selected expression, ctrl-k ctrl-h ctrl-i
  • SublimeHaskell: Hayoo — search in hayoo
  • SublimeHaskell: Auto fix — auto fix some of warnings and/or errors (for now redundant imports and hlint hints) AutoFix
  • SublimeHaskell: Stylish — stylish source with stylish-haskell
  • SublimeHaskell: Scan docs and infer types — as long as scanning docs for sources and inferring types is long process, it's disabled by default, but this command can be used to scan docs and infer types for currently opened view
  • SublimeHaskell: Check & Lint — check/lint/check & lint opened file. Enable option check_lint_fly to check & lint on idle, rescanning actual source, so that completions are updated
  • Eval commands — see animation
    • SublimeHaskell: Eval selection — eval selected expression, for example
      • [1..10][1,2,3,4,5,6,7,8,9,10]
      • replicate 10 'a'aaaaaaaaaa (note no double quotes for string result)
    • SublimeHaskell: Apply to selection — same as above, but applies function to each selection
      • foobarreverseraboof
      • [1..10]reverse[10,9,8,7,6,5,4,3,2,1]
      • 1, 2, 3succ2, 3, 4
      • [1..3]intercalate ", " . map (\i -> "foo" ++ show i)foo1, foo2, foo3
    • SublimeHaskell: Apply to selection list — applies function to list made from selections
      • foo, bar, bazreversebaz, bar, foo
      • foo, bar, bazsortbar, baz, foo
  • Repl commands (uses SublimeREPL package)
    • SublimeHaskell Repl: GHCi — runs ghci
    • SublimeHaskell Repl: GHCi current file — runs ghci and loads current file
    • SublimeHaskell Repl: Cabal Repl — runs cabal repl for current project
    • SublimeHaskell Repl: Load — loads current file or project in repl
  • Context menu commands
    • Open package on Hackage — works within symbol info panel, opens Hackage page
    • Open module on Hackage — words in symbol info panel and in sources, opens Hackage page for selected module
  • Build commands
    • Build, Typecheck build (no codegen), Clean, Configure, Rebuild, Install, Test, Run
  • Error commands:
    • SublimeHaskell: Go to next error — go to next error in file, alt+d alt+e
    • SublimeHaskell: Go to previous error — go to previous error in file, alt+shift+d alt+shift+e
    • SublimeHaskell: Show error panel — show error panel if it was hidden, ctrl+alt+e

Inside and outside your project: codex

codex allows you to use ctags to jump to definitions that are declared in your cabal dependencies.

  • cabal install codex
  • Run codex set format sublime, that updates your ~/.codex file to Sublime's Ctags plugin's format
  • Change ~/.codex to tagsFileName: .tags
  • In your project, codex cache clean && codex update
  • You can now jump to the source code of definitions outside of your project.
  • The commands CTags: Show Symbols and CTags: Rebuild Tags currently don't work with codex

Credits

Icons from FlatIcon.

Error icon by Eleonor Wang
Warning icon by Freepik
Hint icon by Gregor Cresnar
Wrench icon by Gregor Cresnar