22

我有一个单元测试文件:

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" #-}

就像将 pragma 作为文件的第一行,在模块声明之后,使用名称module而不是X04...,将 更改Warningwarn...

什么是魔法?

4

3 回答 3

24

您需要以另一种方式编写编译指示。经过一些试验和错误,我想出了以下内容:

module Test where

import Data.Char(toUpper)

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

请注意,您必须写"module"而不是模块的名称

于 2013-10-08T04:37:00.667 回答
2

同意@MoFu 的解决方案。

hlint 还支持使用参数忽略特定警告。

hlint -i 'Use string literal' [filename]

将此添加到参数或别名中,因此请忽略此警告,但不要破坏您的代码。

顺便说一句,synatastic 支持论点。

于 2015-11-07T09:51:58.620 回答
1

使用最近 (>2019) 的 hlint,您可以使用更简单的语法{- HLINT ignore "some hint" -}

module Test where

import Data.Char(toUpper)

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

与 不同ANN的是,它可以放在文件中的任何位置,不需要像String使用一样进行注释OverloadedStrings,也不会导致编译时间增加。

于 2021-06-28T09:16:58.687 回答