2013-10-08 33 views
13

我有一個單元測試文件:哈斯克爾:如何告訴hlint不是:`警告:字符串literal`

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']

我已經試過的

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

各種permuatations喜歡把編譯作爲文件的第一行,模塊聲明之後,名爲module而不是X04...,改變Warningwarn ......

什麼是魔術?

回答

16

您需要以另一種方式編寫雜注。一些試驗和錯誤後,我想出了以下內容:

module Test where 

import Data.Char(toUpper) 

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

注意,你必須寫"module"而不是模塊

+1

這工作 - 謝謝。 HLint的文件不清楚。對於函數上的編譯指示,它表示:'{ - #ANN myFunction「HLint:忽略」# - }'。對於模塊上的編譯指示,它說:'{ - #ANN module「HLint:忽略Eta reduce」# - }'所以我不清楚是否應該寫'module'或類似'myModule'的東西。 – haroldcarr

+0

@haroldcarr沒有明確說明,沒錯。你可以通過某種方式推導出來,第一個字母是小寫,模塊名稱以大寫字母開頭。附:如果你能接受我的答案,那會很好。 – MoFu

+4

我已將文檔更新爲:\t { - #ANN module「HLint:ignore Eta reduce」# - } - 忽略此模塊中的所有eta減少建議(使用模塊從字面上看,不是模塊的名稱) 。他們在git中,但文檔鏈接仍然會將您帶到過時的darcs。我提出了一個錯誤來解決這個問題。 –

1

與@同意末伏的解決方案的名稱。

hlint也支持忽略帶參數的特定警告。

hlint -i 'Use string literal' [filename] 

將此添加到參數或別名,因此忽略此警告,但不會破壞您的代碼。

順便說一下,synatastic支持參數。

+0

感謝您的支持。我在ale中使用了hlint,我想忽略關於重複的警告,所以我做了這樣的事情:'let g:ale_linters = {'haskell':['hlint -i「減少重複」'],}' 。 –