• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

mpickering/apply-refact: Refactor Haskell source files

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称(OpenSource Name):

mpickering/apply-refact

开源软件地址(OpenSource Url):

https://github.com/mpickering/apply-refact

开源编程语言(OpenSource Language):

Haskell 100.0%

开源软件介绍(OpenSource Introduction):

apply-refact applies refactorings specified by the refact package. It is currently integrated into HLint to enable the automatic application of suggestions.

apply-refact 0.10.x supports GHC 9.2, and 0.9.x supports GHC 8.6 through 9.0.

Install

cabal install apply-refact

Alternatively, clone the repo and run cabal install.

You can also install from Nix:

nix-env -iA nixpkgs.haskellPackages.apply-refact

Executable name is refactor.

Hlint Integration example

hlint src/Main.hs --refactor --refactor-options="--inplace"

Example Usage

# test.hs

foo = (x)

# hlint.refact -- produced by hlint --serialise
[("test.hs:1:7: Warning: Redundant bracket\nFound:\n  (x)\nWhy not:\n
x\n",[Replace {rtype = Expr, pos = SrcSpan {startLine = 1, startCol = 7, endLine
= 1, endCol = 10}, subts = [("x",SrcSpan {startLine = 1, startCol = 8, endLine =
1, endCol = 9})], orig = "x"}])]

> refactor test.hs --refact-file hlint.refact
foo = x

One of either the input file or --refact-file must be specified on the command line. If an input file is specified but not --refact-file then refactor will accept refactorings from stdin and vice versa.

The -i option can be specified to perform the refactoring inplace overwriting the input file. This option is ignored when input is read from stdin.

The -s option can be specified to perform a stepwise evaluation of the refact file. The user is prompted whether to perform each hint before it is performed.

The --pos option is intended to be used by tooling in order to specify which specific hint should be performed.

Multiple -X options may be provided to specify additional default language pragmas which might affect parsing, such as -XLambdaCase or -XRankNTypes.

Refact Files

Refact files should be the result of show on a value of type [(String, [Refactoring SrcSpan])]. The string is a description of the refactoring, one description can have many associated refactoring steps.

Library Structure

The executable is provide so that libraries can use apply-refact without depending on the package. The implementation relies on ghc-exactprint which depends itself on GHC. A transitive dependancy that most developers wish to avoid!

Reporting Bugs

If the program produces a syntactically incorrect result then this is a bug. Please open an issue on the issue tracker with precise instructions about how to reproduce it.

  1. The input file
  2. The refact file
  3. The command used to invoke refactor

There are some known problems with CPP processing. If your library contains CPP directives other than #ifdef it is quite likely that the result will be unexpected.

Debugging

There are also two hidden flags which can be useful for debugging.

--debug

Outputs the GHC AST.

--roundtrip

Performs no refactoring operations on the file but is useful to test whether unexpected formatting is due to ghc-exactprint or the refactoring.

Contributing

Contributions are welcome. You can run the tests via cabal test.




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap