BSD3 licensed by Carlo Hamalainen
Maintained by carlo@carlo-hamalainen.net

Module documentation for 0.3.0.6

ghc-imported-from

For a given Haskell source file, determine the path to the Haddock documentation for a symbol at a particular line/col location.

Example: on the file src/Main.hs,

ghc-imported-from src/Main.hs Main strOption 18 17

says

SUCCESS: file:///home/carlo/.stack/snapshots/x86_64-linux/lts-5.8/7.10.3/doc/optparse-applicative-0.12.1.0/Options-Applicative-Builder.html

since the usage of `strOption at line 18, column 17, is from the Options.Applicative.Builder` module.

Difficulties arise in resolving names because some symbols are exported from a certain package but defined in another, for example `String` is defined in

`GHC.Base` but is exported from the standard prelude, the module

`Prelude`. There are other cases to deal with including qualified imports, selective imports, imports with hidden components, etc.

Using with Stack

Stack makes everything easier.

Build ghc-imported-from:

git clone https://github.com/carlohamalainen/ghc-imported-from
cd ghc-imported-from
stack build

then add

`pwd`/.stack-work/install/x86_64-linux/lts-5.8/7.10.3/bin

or similar to your `$PATH`.

Then in a project that you are working on:

cd my-project
stack build
stack haddock # Must do this!
ghc-imported-from some/file/Blah.hs Blah f 100 3

Tests

Run the tests using Stack:

stack test

ghcimportedfrom-vim

For Vim users, follow the instructions at https://github.com/carlohamalainen/ghcimportedfrom-vim to install the Vim plugin.

ghc-imported-from-el

For Emacs users, David Christiansen has written ghc-imported-from-el.

Usage

See the `tests` subdirectory for some examples. Or load your favourite Haskell project and hit F4.

Or watch the screencast (be sure to set 720p HD and then fullscreen):

https://www.youtube.com/watch?v=7yO_VGCWMu8

Notes

`ghc-imported-from` uses both GHC and ghc-pkg, which accept arguments in differing formats. For example GHC takes

`-package-db while ghc-pkg takes --package-db=`. For more details: http://www.vex.net/~trebla/haskell/sicp.xhtml

Debugging

To see the GHC options that have been automatically detected, change into your project's directory and run:

$ cd ~/ghc-imported-from
$ cabal repl --with-ghc=fake-ghc-for-ghc-imported-from
Preprocessing library ghc-imported-from-0.2.0.2...
--interactive -fbuilding-cabal-package -O0 -outputdir dist/build -odir dist/build -hidir dist/build -stubdir dist/build -i -idist/build -i. -idist/build/autogen -Idist/build/autogen -Idist/build -optP-include -optPdist/build/autogen/cabal_macros.h -package-name ghc-imported-from-0.2.0.2 -hide-all-packages -no-user-package-db -package-db /home/user/ghc-imported-from/.cabal-sandbox/x86_64-linux-ghc-7.6.3-packages.conf.d -package-db dist/package.conf.inplace -package-id Cabal-1.16.0-c6e09e008cd04cf255c1ce0c59aba905 -package-id base-4.6.0.1-8aa5d403c45ea59dcd2c39f123e27d57 -package-id containers-0.5.0.0-ab1dae9a94cd3cc84e7b2805636ebfa2 -package-id directory-1.2.0.1-91a788fd88acd7f149f0f10f5f1e23f2 -package-id filepath-1.3.0.1-b12cbe18566fe1532a1fda4c85e31cbe -package-id ghc-7.6.3-18957ddbb817289f604552aa2da2e879 -package-id ghc-mod-4.1.0-a87501f2667239b3f0bef3e0f3753496 -package-id ghc-paths-0.1.0.9-3817f31ae510ed3b58554933ea527b74 -package-id ghc-syb-utils-0.2.1.2-bf72c1e71339c52f0af404a12449c9d2 -package-id mtl-2.2.0.1-ef91e0abcf7a4fb581ecb7fe83cdcba1 -package-id process-1.1.0.2-76e05340eb66705981411022731ca84a -package-id safe-0.3.4-ba52ca348aecad429ba90450e3aba4c4 -package-id syb-0.4.1-9469ffdd9c6a7ebbf035421c915a08ee -package-id transformers-0.4.1.0-42810d723884ebf2a2dd638e5b22e523 -XHaskell2010 Language.Haskell.GhcImportedFrom Language.Haskell.GhcImportedFrom.UtilsFromGhcMod Language.Haskell.GhcImportedFrom.Types -Wall

Alternatives

As far as I know the only alternative is the `fpco/hoogle-doc` function in https://www.fpcomplete.com/page/api. Or try Ctrl-i in the web version of FP Complete.

Changes

2016-06-01 v0.3.0.6

  • Bugfix - remove duplicates from result of qualifiedNames.

2016-04-12 v0.3.0.5

  • Remove upper bound on pipes-transduce.

2016-04-05 v0.3.0.4

  • Bugfix: upper bound on pipes-transduce to fix a build error.

2016-04-04 v0.3.0.3

  • Bugfix: was parsing stderr instead of stdout for some 'stack path' commands.
  • Build against process-streaming-0.9.1.0 instead of process-streaming-0.7.2.2.

2016-03-30 v0.3.0.2

  • Bugfix to the bugfix.

2016-03-30 v0.3.0.1

  • Bugfix: use process-streaming to avoid deadlock on Fedora 23.

2016-03-26 v0.3.0.0

  • New heuristics for resolving symbols.
  • Compatability with Stack!

2016-01-20 v0.2.1.1

  • Builds against ghc-mod-5.5.0.0.

2016-01-20 v0.2.1.0

  • Builds on GHC 7.10.3 with the latest version of ghc-mod that is available on Hackage.

2015-08-17 v0.2.0.7

  • Added a fall-back case when our resolved qualified name does not match anything.

2014-07-05 v0.2.0.6

  • Use optparse-applicative for argument parsing.
  • Allow digits and underscores in module names.

2014-06-01 v0.2.0.5

  • Version bound on ghc-mod.

2014-05-22 v0.2.0.4

  • Speedup: factor out calls to getGhcOptionsViaCabalRepl.
  • Bug fix: filter out haskell module names from the cabal options list.

2014-05-19 v0.2.0.3

  • Fixed test cases.
  • Added alternative heuristic for lookup.

2014-05-16 v0.2.0.2

  • Catch GHC panics.
  • Verbose debug output.
  • Handle case where source file may not have a validly define module name but parses correctly regardless. https://github.com/carlohamalainen/ghc-imported-from/issues/15

2014-05-15 v0.2.0.1

  • Link to changelog.md.

2014-05-15 v0.2.0.0

  • Builds with GHC 7.6.3 and 7.8.2.
  • Reduced dependencies on ghc-mod and Cabal internals.
  • GHC option discovery using a fake GHC binary.
  • Various tidyups via hlint.
  • Removed cabal constraints file.

2014-05-02 v0.1.0.4

  • Fix for hashed directory in sandbox dist/build; see also https://github.com/carlohamalainen/ghc-imported-from/issues/10

2014-03-03 v0.1.0.3

  • Fix build failure by pinning all package dependencies.

2014-01-26 v0.1.0.2

  • Use more of ghc-mod's API to set the correct GHC command line arguments.

2014-01-24 v0.1.0.1

  • Change module layout to Language.Haskell.GhcImportedFrom to comply with hackage.haskell.org guidelines.

2014-01-21 v0.1.0.0

  • First version on hackage.haskell.org
comments powered byDisqus