Table of Contents
cl-lib
-
In order to make company-ghc work,
ghc-comp-initneeds 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-initis called before using company-ghc.
- hoogle command and its database (
hoogle data) for doc-buffer support and hoogle search completion.
2.3 Setup from MELPA
Install from MELPA
M-x package-install RET company-ghc RETAdd
company-ghctocompany-backendsafter loading company-mode and ghc-mod(add-to-list 'company-backends 'company-ghc)
Install from Git:
git clone https://github.com/iquiw/company-ghc.git
Add
company-ghctocompany-backendsafter loading company-mode and ghc-mod(add-to-list 'load-path "/path/to/company-ghc") (add-to-list 'company-backends 'company-ghc)
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.
Type info of completion candidate is displayed in minibuffer, given by
ghc-modi browse -d.Only when
ghc-modi browse -ddoes not provide type info,company-ghc-show-info(t,onelineornomodule) is used to determine how type info given byghc-modi infois displayed.Default value of
company-ghc-show-infois nil since whenghc-modi infois called, ghc-mod pops up error if the current buffer contains error.
- Module name is displayed as completion annotation
if
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 fromghc-mod info, and works only whencompany-ghc-show-infois non-nil.
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
company-ghc-hoogle-search-limit(default 20).
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 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.
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.
Licensed under the GPL 3+ license.