ghc-tags-plugin: A compiler plugin which generates tags file from GHC syntax tree.

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

A compiler source plugin which takes parsed Haskell syntax tree and saves tags file to disk, leaving the parsed tree untouched.

[Skip to Readme]


Change log
Dependencies attoparsec (>= && <0.14), base (>= && <4.13), bytestring (>=0.10 && <0.11), containers (>=0.6 && <0.7), directory (>=1.3 && <1.4), ghc (>=8.4 && <8.9), ghc-tags-plugin, gitrev (>=1.3 && <1.4) [details]
License MPL-2.0
Copyright (c) 2020, Marcin Szamotulski
Author Marcin Szamotulski
Category Development
Home page
Bug tracker
Source repo head: git clone
Uploaded by coot at 2020-03-03T20:34:37Z


[Index] [Quick Jump]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Readme for ghc-tags-plugin-

[back to package description]

Ghc Tags Compiler Plugin

A Ghc Compiler Plugin which generates tags for each compiled module or component.

vim configuration

Each generated tags file is put next to the corresponding *.cabal file. If you just have a repo with a cabal file in the main directory vim default tags setting will work, if you have some modules in subdirectories you will need to set:

:set tags+=*/tags

Plugin usage

Configuration of this plugin requires some familiarity with ghc packages. Check out documentation how to use -plugin-package or -plugin-package-id. In the examples below we us -plugin-package=ghc-tags-plugin but specifying version -package=ghc-tags-plugin- (where is the version you installed), might work better. You can use ghc-pkg latest (likely with appropriate --package-db flag) to check which version is available.


ghc -plugin-package=ghc-tags-plugin -fplugin=Plugin.GhcTags


Install the ghc-tags-plugin to cabal store with:

cabal install ghc-tags-plugin

In cabal.project.local file add package stanza for every local package :

project some-project
    ghc-options: -package-db=PACKAGE_DB

PACKAGE_DB is likely to be something like (for ghc-8.6.5) '${HOME}/.cabal/store/ghc-8.6.5/package.db' (all environment variables must be expanded).


Install ghc-tags-plugin

stack install ghc-tags-plugin

In stack.yaml file add:

    some-project: -package-db=PACKAGE_DB

where PACKAGE_DB is the package db where ghc-tags-plugin was installed by stack.

modifying cabal files

You can always add ghc-tags-plugin as a build dependency in a cabal file (for each component). You should hide it behind a flag and then use cabal or stack to enable it (or cabal.project.local or stack.yaml files for that purpose).

Security implications of compiler plugins

Such plugins can:

This plugin only reads & writes to tags file (and updates a shared mutable state) as of IO, and does not modify/ the syntax tree.