ghc-imported-from
Find the Haddock documentation for a symbol.
https://github.com/carlohamalainen/ghc-imported-from
| Version on this page: | 0.3.0.5 |
| 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.5@sha256:b1ccbfc5e1fc5352f8fcf12489b015b8e1afad77d665b18c20387d73719b0f75,4261Module documentation for 0.3.0.5
- 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-04-12 v0.3.0.5
- Remove upper bound on pipes-transduce.
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