https://github.com/serokell/importify
:space_invader: Importi.fy — it's like Uber, but for Haskell modules.
https://github.com/serokell/importify
haskell imports refactoring-tools
Last synced: 9 months ago
JSON representation
:space_invader: Importi.fy — it's like Uber, but for Haskell modules.
- Host: GitHub
- URL: https://github.com/serokell/importify
- Owner: serokell
- License: mit
- Archived: true
- Created: 2017-05-27T20:28:32.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2018-09-02T06:25:52.000Z (over 7 years ago)
- Last Synced: 2024-10-03T00:47:54.923Z (over 1 year ago)
- Topics: haskell, imports, refactoring-tools
- Language: Haskell
- Homepage:
- Size: 349 KB
- Stars: 104
- Watchers: 33
- Forks: 9
- Open Issues: 19
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
README
# importify — manage Haskell imports quickly
[](https://travis-ci.org/serokell/importify)
[](https://hackage.haskell.org/package/importify)
[](http://stackage.org/nightly/package/importify)
[](http://stackage.org/lts/package/importify)
[](https://codeclimate.com/github/serokell/importify)
[](https://opensource.org/licenses/MIT)
## _Importify_ in a nutshell.
`importify` tool helps you to manage the import section of your Haskell project modules.
GHC compiler can warn you about unused imports, and it's a good practice to remove such
imports immediately. But this becomes tedious, especially if you use explicit import lists.
_Importify_ can remove unused imports automatically.
Before importify | After importify
:---------------:|:-----------------:
 | 
You can use [`stylish-haskell`](https://github.com/jaspervdj/stylish-haskell) after `importify` to prettify imports.
In the future, we plan for _Importify_ to be able to:
+ Add missing imports automatically, so you won't have to manage
imports manually at all.
+ Implement a cache server with the following features:
+ Download caches for Hackage packages to speed up _Importify_ runs.
+ Upload your caches for yet-to-be-published FOSS projects to
make it easier to collaborate.
+ Query mappings from any module of every package to symbols
exported by it to write your refactoring tools.
+ Convert imports between _implicit_ and _explicit_, and between
_qualified_ and _unqualified_ forms.
+ Resolve merge conflicts in import section automatically. See an
example of [such conflict](http://i.imgur.com/97YVCFk.png).
## Installation
Installation process assumes that you have already installed and configured `stack`
build tool. Currently `importify` works only with projects built with `stack`.
### Installing from Stackage
Install just as every usual package.
```bash
stack install importify
```
### Installing from source
Perform the next steps before driving:
```bash
git clone https://github.com/serokell/importify.git # 1. Clone repository locally
cd importify # 2. Step into folder
stack install importify\:exe\:importify # 3. Copy executable under ~/.local/bin
```
## Usage
In short:
```bash
$ cd my-project-which-build-with-stack
$ importify cache
$ importify file path/to/File/With/Unused/Imports.hs
```
`importify` has several commands. Most important is
```
importify --help
```
Before removing redundant imports run `importify cache`
command. Importify stores local cache for the project under the
`.importify` folder inside your project. This cache stores exported
entities for each module for every dependency and for all your local
packages. Make sure to re-run `importify cache` if you change the list
of exported functions and types in your project modules. Cache is
built incrementally; it builds dependencies only once. But if you add
dependencies or use other versions of them (for instance, because of
bumping stack lts) you need to run `importify cache` again. You can
always perform `rm -rf .importify` before caching if you face any
troubles.
After the cache is built, you can use `importify file PATH_TO_FILE`
command from your project root directory. This command runs
_Importify_ on the file and prints the result in the terminal. If you
want to change a file in-place use the following command:
```
importify file -i PATH_TO_FILE
```