2013-10-08 8 views
13

내가 단위 테스트 파일이 literal` :하스켈 : hlint을 말하는 방법하지에`경고 : 사용 문자열

module X04PatMatTest where 

import AssertError 
import Test.HUnit 
import X04PatMat 

... 

및 hlint는 불평 : 여러 가지 이유로

X04PatMatTest.hs:15:69: Warning: Use string literal 
Found: 
    ['a', 'b', 'd'] 
Why not: 
    "abd" 

, 정말 테스트 코드에 ['a', 'b', 'd']을 넣고 싶습니다.

나는 Warningwarn에 변경, X04... 대신 이름 module으로, 모듈 선언 한 후, 파일의 첫 번째 행으로 프라그를 바르지

{-# ANN X04PatMatTest "HLint: ignore Warning: Use string literal" #-} 

의 다양한 permuatations을 시도 ...

마법이란 무엇입니까?

답변

16

다른 방법으로 pragma를 작성해야합니다. 약간의 시행 착오 후에 나는 다음과 같은 내놓았다 : 당신이

+1

그게 효과가 있습니다 - 고마워요. HLint 문서는 이에 대해 명확하지 않습니다. 함수의 pragma에 대해서는'{- # ANN myFunction "HLint :"# -}'를 무시합니다. 모듈의 pragma에 대해서는 다음과 같이 쓰여 있습니다 :'{- # ANN module "HLint : Eta를 무시하면"# -} "가 줄어들 기 때문에'module' 또는'myModule'과 같은 것을 써야할지 분명하지 않습니다. – haroldcarr

+0

@haroldcarr 명시 적으로 언급 한 것이 아닙니다. 첫 문자는 소문자이고 모듈 이름은 대문자로 시작한다는 사실을 어떻게 든 알 수 있습니다. 추신 내 대답을 받아 들일 수 있다면 좋을거야. – MoFu

+4

이 모듈의 모든 감소 옵션을 무시하십시오. (모듈 이름이 아닌 모듈을 그대로 사용하십시오) : - # ANN module "HLint : Eta reduce"# -} - . 그것들은 자식이지만 문서 링크는 여전히 당신을 구식 darcs로 안내합니다. 나는 그것을 해결하기 위해 버그를 제기했습니다. –

1

이 MoFu의 솔루션 @ 동의 모듈의 이름을 "module"를 작성해야하지

module Test where 

import Data.Char(toUpper) 

{-# ANN module "HLint: ignore Use string literal" #-} 
main :: IO() 
main = putStrLn ['a','b','c'] 

메모를.

hlint도 인수를 사용하여 특정 경고를 무시합니다.

hlint -i 'Use string literal' [filename] 

이 내용을 인수 또는 별칭에 추가하므로이 경고는 무시하고 코드를 중단하지 마십시오.

그건 그렇고, synatastic 지원 인수.

+0

감사합니다. 나는 에일과 함께 vim에서 hlint를 사용하고 있으며 중복에 대한 경고를 무시하고 싶습니다. 그래서 다음과 같이했습니다 :'let g : ale_linters = { 'haskell': [ 'hlint -i "Reduce duplication" . –