| CARVIEW |
ghc-tags: Utility for generating ctags and etags with GHC API.
Utility for generating etags (Emacs) and ctags (Vim and other editors) with GHC API for efficient project navigation.
[Skip to Readme]
Flags
Manual Flags
| Name | Description | Default |
|---|---|---|
| ghc-lib | Use ghc-lib even when compiling with compatible GHC version. | Disabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- ghc-tags-1.10.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
| Versions [RSS] | 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 1.10 |
|---|---|
| Change log | CHANGELOG.md |
| Dependencies | aeson (>=2.0.0.0), async (>=2.2.5), attoparsec, base (>=4.19 && <4.22), bytestring, containers, deepseq, directory, filepath, ghc, ghc-boot, ghc-lib (>=9.12 && <9.13), ghc-paths, optparse-applicative, process, stm, temporary, text, time, vector, yaml [details] |
| Tested with | ghc ==9.8.4 || ==9.10.3 || ==9.12.2 |
| License | MPL-2.0 |
| Copyright | Andrzej Rybczak |
| Author | Andrzej Rybczak |
| Maintainer | andrzej@rybczak.net |
| Uploaded | by arybczak at 2025-11-19T04:24:50Z |
| Category | Development |
| Home page | https://github.com/arybczak/ghc-tags |
| Bug tracker | https://github.com/arybczak/ghc-tags/issues |
| Source repo | head: git clone https://github.com/arybczak/ghc-tags |
| Distributions | NixOS:1.10 |
| Executables | ghc-tags |
| Downloads | 1431 total (32 in the last 30 days) |
| Rating | (no votes yet) [estimated by Bayesian average] |
| Your Rating |
|
| Status | Docs not available [build log] Last success reported on 2025-11-19 [all 1 reports] |
Readme for ghc-tags-1.10
[back to package description]ghc-tags
A command line tool that generates etags (Emacs) and ctags (Vim, VSCode with ctagsx etc.) for efficient code navigation (jump to definition).
Main features:
- Leverages GHC API to obtain accurate information.
- Uses multiple CPU cores when processing source files.
- Supports fast incremental updates.
Supported file extensions:
.hs.hs-boot.lhs.x(requiresalex).hsc(requireshsc2hs)
Usage
For simple projects, i.e. the ones that don't use C pre-processor in non-trivial
ways nor include any C sources it should be enough to execute ghc-tags -e (for
etags) or ghc-tags -c (for ctags) in the root directory of the project.
For more complicated projects you need to create the configuration file
(ghc-tags.yaml by default). It can contain the following keys:
source_paths- a list of paths forghc-tagsto process. Directories are traversed recursively.exclude_paths- a list of paths forghc-tagsto exclude from processing.language- the flavour of Haskell, eitherHaskell98orHaskell2010.extensions- a list of GHC language extensions to enable when parsing. Note that GHC needs much less extensions for parsing alone, so you should almost never need to override this.cpp_includes- include paths for the C pre-processor.cpp_options- other options for the C pre-processor, e.g. defines (usually undefinedMIN_VERSION_xmacros will go here).
If any of these keys is not specified, an appropriate default value will be
picked instead. You can inspect the defaults by executing ghc-tags --default.
Note: it is possible to specify multiple project configurations in the
configuration file by separating them with ---. For example, here is a
configuration for GHC on Linux (compiler, utils and base):
source_paths:
- compiler
cpp_includes:
- _build/stage1/compiler/build
- compiler
- includes/dist-derivedconstants/header
---
source_paths:
- libraries/base
exclude_paths:
- libraries/base/GHC/Conc/POSIX/Const.hsc
- libraries/base/GHC/Event/Windows.hsc
- libraries/base/GHC/Event/Windows/ConsoleEvent.hsc
- libraries/base/GHC/Event/Windows/FFI.hsc
- libraries/base/GHC/IO/Windows/Handle.hsc
- libraries/base/System/CPUTime/Windows.hsc
- libraries/base/tests
cpp_includes:
- _build/stage1/libraries/base/build/include
- includes
- libraries/base/include
---
source_paths:
- libraries/ghc-bignum
exclude_paths:
- libraries/ghc-bignum/src/GHC/Num/Backend/Selected.hs
cpp_includes:
- libraries/ghc-bignum/include
---
source_paths:
- libraries/ghc-boot
- libraries/ghc-boot-th
- libraries/ghc-compact
- libraries/ghc-heap
- libraries/ghc-prim
exclude_paths:
- libraries/ghc-compact/tests
- libraries/ghc-heap/tests
- libraries/ghc-prim/tests
Acknowledgments
Thanks to Marcin Szamotulski for his work on
ghc-tags-plugin ghc-tags is based on.