Table of Contents
- 1 Overview
- 2 Installation
- 3 Feature
- 4 Note
- 5 Diagnostic
- 6 License
In order to make company-ghc work,
ghc-comp-initneeds to be called once. It is called by
ghc-init, so if you follow ghc-mod manual, there is nothing else to do about it. Otherwise (if you don't want to call
ghc-comp-initis called before using company-ghc.
- hoogle command and its database (
hoogle data) for doc-buffer support and hoogle search completion.
Install from MELPAM-x package-install RET company-ghc RET
(add-to-list 'company-backends 'company-ghc)
Install from Git:
git clone https://github.com/iquiw/company-ghc.git
(add-to-list 'load-path "/path/to/company-ghc") (add-to-list 'company-backends 'company-ghc)
The following completions are available.
Pragma names. (
Language extensions. (
GHC option flags. (
Import module names. (
Variables and functions in import spec. (
Qualified imported keywords.
Keywords from imported modules.
Type info of completion candidate is displayed in minibuffer, given by
ghc-modi browse -d.
ghc-modi browse -ddoes not provide type info,
nomodule) is used to determine how type info given by
ghc-modi infois displayed.
Default value of
company-ghc-show-infois nil since when
ghc-modi infois called, ghc-mod pops up error if the current buffer contains error.
- Module name is displayed as completion annotation
company-ghc-show-moduleis non-nil (default) as in the above images.
If hoogle is installed and its database is prepared, then pressing displays hoogle searched documentation in the doc-buffer.
- When a function in the local project is selected as completion candidate,
pressing C-w (
company-show-location) shows its source. It uses information from
ghc-mod info, and works only when
In-module completion (M-x company-ghc-complete-in-module)
It takes a module name in minibuffer, and provides candidates from keywords defined in the specified module. You can use this as an alternative to
:browsecommand of GHCi.
Hoogle search completion (M-x company-ghc-complete-by-hoogle)
It takes a query text in minibuffer, and provide candidates from hoogle search results. For example, candidates is like the following if the query is
(a -> b) -> (f a -> f b).
If you want to get more search results at a time, increase the value of
Currently, company-ghc treats all symbols as completion prefix unless it starts from line beginning. This means other back-ends after company-ghc have no chance to provide completion candidates in haskell-mode.
As of now, if you want to use other back-ends with company-ghc, use grouped back-end like below.
(add-to-list 'company-backends '(company-ghc :with company-dabbrev-code))
company-ghc add automatic scan module function to local
after-save-hook. It might cause serious problem if there is a bug in it. If you have any trouble at save, turn off autoscan by M-x company-ghc-turn-off-autoscan.
If customized variable
company-ghc-autoscanis nil, autoscan won't be added to local
If scan module is not performed in the buffer, completion by company-ghc does not work properly. scan module can be invoked by M-x company-ghc-scan-modules.
company-ghc does not try to browse keywords in a module if the module failed to be browsed once.
If you want company-ghc to browse failed modules again, use M-x company-ghc-clear-failed-cache.
To make all modules browsed again, use M-x company-ghc-clear-all-cache.
There are some cases that completion by company-ghc does not work. If there is something wrong, run M-x company-ghc-diagnose, which shows diagnostic info like the following:
* company-ghc backend found: company-ghc * automatic scan module is enabled * ghc-boot process has been done Module Alias Candidates ------------------------------------------------------------------------------- Data.Maybe - 12 Data.Map M 111 Data.Attoparsec.ByteString.Char8 - 76 Control.Applicative - 22 Prelude - 212
The first item shows if
company-ghc is added to
company-backends or not.
The second item shows if company-ghc auto scan is enabled or not.
The third item shows if
ghc-boot has been processed properly.
The table shows rows of imported module in the current buffer, its qualified import alias and number of candidates in the module.
company-ghc-autoscan is non-nil but company-ghc auto scan is disabled,
it is possibly initialization step of
company-ghc is not performed by some reason.
Check company-ghc configuration. For workaround, run M-x company-ghc-turn-on-autoscan manually.
ghc-boot process has not been done or failed to run,
check ghc-mod configuration (Ref. ghc-mod manual) or whether
ghc-mod boot command from shell or command prompt succeeds in the project directory.
If some module is not in the table, it is possibly bug of company-ghc.
Number of candidates is nil initially, and gets filled when completion for the corresponding module is performed.
If number of candidates is 0 or nil after completion, it might be problem related to
Try again with setting
t and see if there is any error in
*GHC Debug* buffer.
Licensed under the GPL 3+ license.