aboutsummaryrefslogtreecommitdiff
path: root/README.org
blob: a3c7475b44bc57c41e4d59fb9ecab4b1ae5ba7a4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#+title: hcel

hcel is an indexer and a server of Haskell package source code.  It
serves indexed packages through JSON API.

It is a fork of [[https://github.com/alexwl/haskell-code-explorer][Haskell Code Explorer]], and works with GHC-9.2.2 with
Cabal-3.6.2.0, and possibly other adjacent versions.

It also has an emacs client.

* Install

#+begin_src sh
cabal install
#+end_src

* Usage

You'll need to index a package before serving it.

A typical indexing workflow is as follows, take sqlite-simple as an
example:

#+begin_src sh
cabal unpack sqlite-simple
cd sqlite-simple-x.y.z.w
cabal configure --enable-testsuites --enable-benchmarks
cabal build all
haskell-code-indexer -p .
#+end_src

After indexing the ./dist-newstyle directory is no longer by hcel and
can be removed to save space.  To launch the server, run

#+begin_src sh
haskell-code-server -p /path/to/package1 -p /path/to/package2 ...
#+end_src

and it will be serving JSON at localhost:8080.

You can also hook up a local hoogle for documentation lookup:

#+begin_src sh
hoogle server
# configure a reverse proxy to hook it up with a domain say https://hoogle.localhost with self-signed cert, then run
haskell-code-server -p /path/to/package1 -p /path/to/package2 --use-hoogle-api --hoogle-api https://hoogle.localhost/ --disable-hoogle-api-cert-check
#+end_src

TODO: document the API endpoints.

* Emacs client
You may find an emacs client called hc.el at
 <https://g.ypei.me/hc.el.git>.

* Contact and Copyright

hcel is maintained by Yuchen Pei (id@ypei.org).

The original [[https://github.com/alexwl/haskell-code-explorer][haskell-code-explorer]] is under the [[https://www.gnu.org/licenses/license-list.html#Expat][expat license]], whereas
the changes are covered by [[https://www.gnu.org/licenses/agpl-3.0.en.html][GNU AGPLv3+]].  You may find the license text
in a file named COPYING.agpl3 in the project tree.  As a combination,
this work as a whole is covered by the terms of [[https://www.gnu.org/licenses/agpl-3.0.en.html][GNU AGPLv3+]] ([[https://www.gnu.org/licenses/gpl-faq.html#WhatDoesCompatMean][why?]]).