Company GHC
Table of Contents
1 Overview
2 Installation
2.1 Depends
cl-lib
-
In order to make company-ghc work,
ghc-comp-init
needs to be called once. It is called byghc-init
, so if you follow ghc-mod manual, there is nothing else to do about it. Otherwise (if you don't want to callghc-init
), ensureghc-comp-init
is called before using company-ghc.
2.2 Optional Dependency
- hoogle command and its database (
hoogle data
) for doc-buffer support and hoogle search completion.
MELPA
2.3 Setup fromInstall from MELPA
M-x package-install RET company-ghc RETAdd
company-ghc
tocompany-backends
after loading company-mode and ghc-mod(add-to-list 'company-backends 'company-ghc)
2.4 Setup from Git
Install from Git:
git clone https://github.com/iquiw/company-ghc.git
Add
company-ghc
tocompany-backends
after loading company-mode and ghc-mod(add-to-list 'load-path "/path/to/company-ghc") (add-to-list 'company-backends 'company-ghc)
3 Feature
3.1 Completion
The following completions are available.
Pragma names. (
ghc-pragma-names
)Language extensions. (
ghc-language-extensions
)GHC option flags. (
ghc-options-flags
)Import module names. (
ghc-modules-names
)Variables and functions in import spec. (
ghc-module-keyword
)Qualified imported keywords.
Keywords from imported modules.
3.2 Show type info in minibuffer
Type info of completion candidate is displayed in minibuffer, given by
ghc-modi browse -d
.Only when
ghc-modi browse -d
does not provide type info,company-ghc-show-info
(t
,oneline
ornomodule
) is used to determine how type info given byghc-modi info
is displayed.Default value of
company-ghc-show-info
is nil since whenghc-modi info
is called, ghc-mod pops up error if the current buffer contains error.
3.3 Show module name as annotation
- Module name is displayed as completion annotation
if
company-ghc-show-module
is non-nil (default) as in the above images.
3.4 Display Hoogle document as doc-buffer
If hoogle is installed and its database is prepared, then pressing displays hoogle searched documentation in the doc-buffer.
3.5 Locate source
- When a function in the local project is selected as completion candidate,
pressing C-w (
company-show-location
) shows its source. It uses information fromghc-mod info
, and works only whencompany-ghc-show-info
is non-nil.
3.6 Special completion command
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
:browse
command 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
company-ghc-hoogle-search-limit
(default 20).
4 Note
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-autoscan
is nil, autoscan won't be added to localafter-save-hook
.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.
5 Diagnostic
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.
If 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.
If 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 ghc-mod
.
Try again with setting ghc-debug
to t
and see if there is any error in *GHC Debug*
buffer.
6 License
Licensed under the GPL 3+ license.