• Stars
    star
    124
  • Rank 288,207 (Top 6 %)
  • Language
    Emacs Lisp
  • Created over 10 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Company-mode completion back-end for haskell-mode via ghc-mod

Company GHC travis melpa

1   Overview

Company-mode completion back-end for haskell-mode via ghc-mod.
It runs when the major mode is derived from haskell-mode.

2   Installation

2.1   Depends

  • cl-lib

  • company-mode

  • ghc-mod

    In order to make company-ghc work, ghc-comp-init needs 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-init), ensure ghc-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.

2.3   Setup from MELPA

  1. Install from MELPA

    M-x package-install RET company-ghc RET
  2. Add company-ghc to company-backends after loading company-mode and ghc-mod

    (add-to-list 'company-backends 'company-ghc)

2.4   Setup from Git

  1. Install from Git:

    git clone https://github.com/iquiw/company-ghc.git
    
  2. Add company-ghc to company-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.

  1. Pragma names. (ghc-pragma-names)

    Completion for pragma
  2. Language extensions. (ghc-language-extensions)

    Completion for language extensions
  3. GHC option flags. (ghc-options-flags)

    Completion for GHC options
  4. Import module names. (ghc-modules-names)

    Completion for import modules
  5. Variables and functions in import spec. (ghc-module-keyword)

    Completion for import specs
  6. Qualified imported keywords.

    Completion for qualified imported keywords
  7. Keywords from imported modules.

    Completion for keywords of 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 or nomodule) is used to determine how type info given by ghc-modi info is displayed.

    Default value of company-ghc-show-info is nil since when ghc-modi info is called, ghc-mod pops up error if the current buffer contains error.

    Show info in minibuffer (``nomodule``)

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.

    Display documentation in docbuffer

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 from ghc-mod info, and works only when company-ghc-show-info is non-nil.

3.6   Special completion command

  1. 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.

    In-module completion
  2. 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).

    Hoogle search completion

    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 local after-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.

More Repositories

1

company-restclient

Company-mode completion back-end for restclient-mode
Emacs Lisp
60
star
2

cabal-delete

Command line tool to delete cabal library packages
Haskell
23
star
3

packer-fedora-coreos

Shell
21
star
4

company-cabal

Company-mode completion back-end for haskell-cabal-mode
Emacs Lisp
14
star
5

lsp-yaml

[DEPRECATED] YAML support for lsp-mode (YAML support is included in lsp-mode)
Emacs Lisp
11
star
6

scoop-bucket

My personal scoop bucket
PowerShell
10
star
7

smart-semicolon

Insert semicolon smartly
Emacs Lisp
10
star
8

aspell-binary

Aspell binary for Windows 64-bit
Shell
9
star
9

emacs-tree-sitter-module-dll

tree-sitter module DLLs for Emacs
Shell
7
star
10

ghc-NetBSD-patches

Collection of patches for ghc specific to NetBSD
Haskell
7
star
11

docker-alpine-emacs

Docker image for Emacs on Alpine Linux
Shell
7
star
12

docker-redmica

Docker image for RedMica
Shell
5
star
13

hunspell-binary

Hunspell binary for Windows 64-bit
5
star
14

hyai

Haskell Yet Another Indentation
Emacs Lisp
3
star
15

docker-pgroonga-on-postgres

Docker image for PGroonga based on Official PostgreSQL image
Dockerfile
3
star
16

packer-netbsd

Packer build NetBSD box for VirtualBox
Shell
3
star
17

emacs-Win32-IME

Emacs + IME patch from gnupack
Emacs Lisp
2
star
18

redbud

Burndown chart from Redmine version
JavaScript
2
star
19

properties-mode

Emacs major mode to edit Java properties file
Emacs Lisp
2
star
20

pinentry-w32-ncg-binary

pinentry-w32, no characters garbled
1
star
21

rsbin

Rust script runner
Rust
1
star
22

macipr

MAC IP printer
Rust
1
star
23

emacswrapper

Wrapper program of Emacs
Haskell
1
star
24

packer-coreos

Packer build CoreOS box for VirtualBox
Shell
1
star
25

jsonconfig-mode

Emacs major mode to edit JSON configuration
Emacs Lisp
1
star
26

ledger-binary

Ledger binary for Windows
1
star
27

xsrc

Conversion of NetBSD xsrc CVS repository by cvs2git
C
1
star
28

m5stickc-co2-monitor

CO2 monitor, M5StickC+MH-Z19C
C
1
star
29

docker-cli-binary

Build base for Docker CLI binary
1
star