Simple Haskell support using only GHCi.
Get vscode-ghc-simple from the Visual Studio Marketplace or run the following in Quick Open:
ext install dramforever.vscode-ghc-simple
Alternatively, if you want the latest and greatest, you can download vsix
files from Circle CI. Pick the latest build, and check out the 'Artifacts' tab.
This VSCode extension provides editing enhancements for Haskell development.
Currently implemented features:
-
Diagnostics: Basic squiggles and error messages. Automatic re-checking on save.
-
Completion: Crude completion with GHCi's
:complete
command, with:info
lookup. Works okay with imported and top level identifiers. -
Type: View types by selecting in the code. The minimal expression covering the selection will have its type shown. Implemented with
:all-types
. -
Inline REPL: Add REPL blocks to your code with haddock syntax, either using no spaces before
>>>
or put it in a comment like-- >>>
. Click on the code lens or typeShift+Enter
to run a single block, or typeShift+Alt+Enter
to run all blocks in a file. -
Definition and usages: See definitions amd references of identifiers. Supports both module level and local identifiers. Implemented with
:loc-at
anduses
. Does not yet support identifiers imported from packages.
Since around GHC 8, the compiler GHC and its interactive REPL GHCi has gained various tooling-related features. These allow for more tooling that communicate with the compiler using text IO and files, instead of a Haskell API. This project aims to explore the possibilities provided by said features, by implementing Haskell tooling within the editor VSCode.
Install the extension from the marketplace or using the Quick Open command ext install dramforever.vscode-ghc-simple
. Open individual Haskell source files or projects, and vscode-ghc-simple will auto-detect the appropriate way to start a GHCi and communicate with it to provide editor tooling. Configuration options can be used to tweak the (see below).
Please note that projects should be opened so that the top-level configuration file (stack.yaml
or *.cabal
) is at the workspace root. This way the extension can detect the project.
Also note that when the project configuration is changed, the Restart GHCi sessions
command needs to be issued manually for changes to take place. Again, see below.
The full log of interaction between GHCi and this extension can be found in Output tab for GHC as shown below:
When reporting an issue please also attach relevant log output, ideally (but not necessarily) from a fresh start (Developer: Reload Window
command) to reproduction of the bug. You can also check there when things go unexpectedly to see.
-
vscode-ghc-simple.restart
: Restart GHCi sessionsvscode-ghc-simple currently lacks a way of detecting changes of critical configuration files such as
stack.yaml
or*.cabal
. Run this command whenever, had you been running GHCi manually, you would restart it.
-
ghcSimple.feature.*
: Feature switchesSome users might want only a subset of the features provided in vscode-ghc-simple. These options can be used to disabled unneeded features.
-
ghcSimple.workspaceType
: This option is deprecated. SeeghcSimple.replCommand
andghcSimple.replScope
. -
ghcSimple.replCommand
: The command used to start GHCi.Configure this to change the command used to start GHCi.
$stack_ide_targets
will be replaced by the output ofstack ide targets
. Leave blank for auto detection. When set, overrides the deprecatedghcSimple.workspaceType
. If you set this, please also setghcSimple.replScope
to an appropriate value. -
ghcSimple.replScope
: The scope of each GHCi sessionWhether GHCi should be started for a project or individual files. Note: This option has no effect when
ghcSimple.replCommand
is set to empty string for auto detection. -
ghcSimple.startupCommands.*
: GHCi Startup commandsCommands to run at GHCi startup. Configures some common options.
Two of the command lists are semantically meant to configure GHCi for use by vscode-ghc-simple:
all
: Commands for all workspacesbare
: Commands for standalone files (bare workspaces)
If you need to add more commands, it's suggested that you do so using the following command list, so that the previous to can be updated as needed in newer versions of vscode-ghc-simple:
custom
: Custom commands for all workspaces
Change the options in workspace settings instead of user settings if you want to apply the settings to a workspace locally.
-
ghcSimple.useObjectCode
: Speed up GHCi reloads using-fobject-code
Enabled by default. Load everything with
-fobject-code
first before loading needed files with-fbyte-code
. This way only changed files need to be recompiled, which greatly speeds up GHCi on large projects. -
ghcSimple.maxCompletions
: Maximum number of completion items to show. -
ghcSimple.inlineRepl.codeLens
: Show code lens for GHCi REPL blocksDisable this if you don't like 'Run in GHCi' code lens littered around your files. If you disable the inline repl feature using
ghcSimple.feature.inlineRepl
you will also not see code lens.