vim-hsimport: only consider modules of direct dependencies

Hi all, vim-hsimport[1] is a vim plugin that is able to automatically extend the import list of a haskell source file for the symbol under the cursor. It uses hdevtools[2] for finding the symbol in the modules of the installed packages and hsimport[3] for extending the import list. Until now vim-hsimport did consider all packages a project depends on, even if the package was only an indirect dependecy, not listed in the 'build-depends' field. So e.g. if a project directly and indirectly depends on the packages: base, containers, bytestring, binary, text and vector, and the modules for symbol 'foldl' have been requested, then the list of found modules might have been: Data.IntMap Data.IntMap.Lazy Data.IntMap.Strict Data.IntSet Data.Map Data.Map.Lazy Data.Map.Strict Data.Set Data.ByteString Data.ByteString.Char8 Data.ByteString.Lazy Data.ByteString.Lazy.Char8 Codec.Binary.UTF8.Generic Data.String.UTF8 Data.ByteString.UTF8 Data.ByteString.Lazy.UTF8 Data.Text Data.Text.Internal.Fusion.Common Data.Text.Lazy GHC.List Data.Foldable Data.List Prelude Data.Vector.Fusion.Stream.Monadic Data.Vector.Fusion.Stream Data.Vector.Generic Data.Vector.Primitive Data.Vector.Storable Data.Vector.Unboxed Data.Vector But if the project depends directly only on the packages: base and text, then only these modules are really relevant: Data.Text Data.Text.Internal.Fusion.Common Data.Text.Lazy GHC.List Data.Foldable Data.List Prelude This can be now achieved by using cabal-cargs[4] (>= 0.4) for the configuration of hdevtools. Please read the README[5] for detailed instructions. (One might argue, that even the modules Data.Text.Internal.Fusion.Common, GHC.List and Prelude might be left out, but that's another issue.) You might be also interested in a new feature of the 0.3 versions of hsimport and vim-hsimport. Before that version types have been always imported like: import SomeModule (Type) Now there's the option to choose between importing only the type or also importing all constructors/functions of the type: import SomeModule (Type(..)) If you're using hdevtools with the vim plugin syntastic[6] and have projects containing multiple sections (library/executable/testsuite ...) and each section has a separate 'hs-source-dirs', then you might get a more robust hdevtools behaviour by using this little change[7]. Happy Haskell hacking! :) Greetings, Daniel [1] https://github.com/dan-t/vim-hsimport [2] https://github.com/bitc/hdevtools [3] https://github.com/dan-t/hsimport [4] https://github.com/dan-t/cabal-cargs [5] https://github.com/dan-t/vim-hsimport/blob/master/README.md [6] https://github.com/scrooloose/syntastic [7] https://github.com/dan-t/syntastic/commit/7bd9b98342c93b7c7b06ddea1994923319...
participants (1)
-
Daniel Trstenjak