ghc-imported-from
Find the Haddock documentation for a symbol.
https://github.com/carlohamalainen/ghc-imported-from
LTS Haskell 6.35: | 0.3.0.6 |
Stackage Nightly 2016-05-25: | 0.3.0.5 |
Latest on Hackage: | 0.3.0.6 |
ghc-imported-from-0.3.0.6@sha256:897be10f4b7a4eb05e4f8cbe876eb6ea197382e577cf980569b87b2af0df2f28,4261
Module documentation for 0.3.0.6
- Language
- Language.Haskell
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