diff --git a/.hlint.yaml b/.hlint.yaml new file mode 100644 index 000000000..7d65e6170 --- /dev/null +++ b/.hlint.yaml @@ -0,0 +1,6 @@ +# Ignore some builtin hints +- ignore: + name: "Reduce duplication" + within: + - Data.Aeson.Types.ToJSON +- ignore: {name: "Eta reduce" } diff --git a/Data/Aeson/Parser/Internal.hs b/Data/Aeson/Parser/Internal.hs index c7e97b002..d3327ce71 100644 --- a/Data/Aeson/Parser/Internal.hs +++ b/Data/Aeson/Parser/Internal.hs @@ -41,6 +41,7 @@ import Control.Applicative ((<|>)) import Control.Monad (void, when) import Data.Aeson.Types.Internal (IResult(..), JSONPath, Result(..), Value(..)) import Data.Attoparsec.ByteString.Char8 (Parser, char, decimal, endOfInput, isDigit_w8, signed, string) +import Data.Functor.Compat (($>)) import Data.Scientific (Scientific) import Data.Text (Text) import Data.Vector as Vector (Vector, empty, fromListN, reverse) @@ -174,9 +175,9 @@ value = do DOUBLE_QUOTE -> A.anyWord8 *> (String <$> jstring_) OPEN_CURLY -> A.anyWord8 *> object_ OPEN_SQUARE -> A.anyWord8 *> array_ - C_f -> string "false" *> pure (Bool False) - C_t -> string "true" *> pure (Bool True) - C_n -> string "null" *> pure Null + C_f -> string "false" $> Bool False + C_t -> string "true" $> Bool True + C_n -> string "null" $> Null _ | w >= 48 && w <= 57 || w == 45 -> Number <$> scientific | otherwise -> fail "not a valid json value" @@ -192,9 +193,9 @@ value' = do return (String s) OPEN_CURLY -> A.anyWord8 *> object_' OPEN_SQUARE -> A.anyWord8 *> array_' - C_f -> string "false" *> pure (Bool False) - C_t -> string "true" *> pure (Bool True) - C_n -> string "null" *> pure Null + C_f -> string "false" $> Bool False + C_t -> string "true" $> Bool True + C_n -> string "null" $> Null _ | w >= 48 && w <= 57 || w == 45 -> do !n <- scientific diff --git a/Data/Aeson/TH.hs b/Data/Aeson/TH.hs index 8bb4081ab..487f7ba22 100644 --- a/Data/Aeson/TH.hs +++ b/Data/Aeson/TH.hs @@ -159,8 +159,6 @@ import qualified Data.Text as T (Text, pack, unpack) import qualified Data.Vector as V (unsafeIndex, null, length, create, empty) import qualified Data.Vector.Mutable as VM (unsafeNew, unsafeWrite) -{-# ANN module "Hlint: ignore Reduce duplication" #-} - -------------------------------------------------------------------------------- -- Convenience -------------------------------------------------------------------------------- diff --git a/Data/Aeson/Types/Class.hs b/Data/Aeson/Types/Class.hs index 5767dd783..9dd92bd5e 100644 --- a/Data/Aeson/Types/Class.hs +++ b/Data/Aeson/Types/Class.hs @@ -6,7 +6,6 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE TypeSynonymInstances #-} -- | -- Module: Data.Aeson.Types.Class diff --git a/Data/Aeson/Types/FromJSON.hs b/Data/Aeson/Types/FromJSON.hs index 47e124f83..a67673239 100644 --- a/Data/Aeson/Types/FromJSON.hs +++ b/Data/Aeson/Types/FromJSON.hs @@ -11,7 +11,6 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeOperators #-} -{-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE ViewPatterns #-} diff --git a/Data/Aeson/Types/Generic.hs b/Data/Aeson/Types/Generic.hs index 7d25afef0..fdf6c3dc8 100644 --- a/Data/Aeson/Types/Generic.hs +++ b/Data/Aeson/Types/Generic.hs @@ -5,7 +5,6 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE KindSignatures #-} -{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeOperators #-} diff --git a/Data/Aeson/Types/ToJSON.hs b/Data/Aeson/Types/ToJSON.hs index e11093726..6d93dee54 100644 --- a/Data/Aeson/Types/ToJSON.hs +++ b/Data/Aeson/Types/ToJSON.hs @@ -5,7 +5,6 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE GADTs #-} -{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} @@ -13,7 +12,6 @@ {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeOperators #-} -{-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE UndecidableInstances #-} #if __GLASGOW_HASKELL__ >= 706 @@ -147,8 +145,6 @@ import qualified Data.ByteString.Internal as S import qualified Data.ByteString.Lazy.Internal as L #endif -{-# ANN module ("HLint: ignore Reduce duplication"::String) #-} - toJSONPair :: (a -> Value) -> (b -> Value) -> (a, b) -> Value toJSONPair a b = liftToJSON2 a (listValue a) b (listValue b) {-# INLINE toJSONPair #-} diff --git a/HLint.hs b/HLint.hs deleted file mode 100644 index 390c8276b..000000000 --- a/HLint.hs +++ /dev/null @@ -1,12 +0,0 @@ -module HLint.HLint where - -import "hint" HLint.Default -import "hint" HLint.Builtin.All -import "hint" HLint.Dollar - -ignore "Avoid lambda" -ignore "Eta reduce" -ignore "Functor law" -ignore "Use >=>" -ignore "Use lambda-case" -ignore "Use $>" diff --git a/benchmarks/Compare/JsonBench.hs b/benchmarks/Compare/JsonBench.hs index 907e2a2a4..f58a72f21 100644 --- a/benchmarks/Compare/JsonBench.hs +++ b/benchmarks/Compare/JsonBench.hs @@ -68,10 +68,10 @@ instance NFData Gender where rnf !_ = () instance NFData Fruit where rnf !_ = () instance NFData Friend where - rnf Friend {..} = rnf fId `seq` rnf fName `seq` () + rnf Friend {..} = rnf fId `seq` rnf fName instance NFData User where - rnf User {..} = rnf uId `seq` rnf uIndex `seq` rnf uGuid `seq` rnf uIsActive `seq` rnf uBalance `seq` rnf uPicture `seq` rnf uAge `seq` rnf uEyeColor `seq` rnf uName `seq` rnf uGender `seq` rnf uCompany `seq` rnf uEmail `seq` rnf uPhone `seq` rnf uAddress `seq` rnf uAbout `seq` rnf uRegistered `seq` rnf uLatitude `seq` rnf uLongitude `seq` rnf uTags `seq` rnf uFriends `seq` rnf uGreeting `seq` rnf uFavouriteFruit `seq` () + rnf User {..} = rnf uId `seq` rnf uIndex `seq` rnf uGuid `seq` rnf uIsActive `seq` rnf uBalance `seq` rnf uPicture `seq` rnf uAge `seq` rnf uEyeColor `seq` rnf uName `seq` rnf uGender `seq` rnf uCompany `seq` rnf uEmail `seq` rnf uPhone `seq` rnf uAddress `seq` rnf uAbout `seq` rnf uRegistered `seq` rnf uLatitude `seq` rnf uLongitude `seq` rnf uTags `seq` rnf uFriends `seq` rnf uGreeting `seq` rnf uFavouriteFruit eyeColorTable :: [(Text, EyeColor)] eyeColorTable = [("brown", Brown), ("green", Green), ("blue", Blue)] diff --git a/benchmarks/CompareWithJSON.hs b/benchmarks/CompareWithJSON.hs index 7c3e605e3..fa7903a04 100644 --- a/benchmarks/CompareWithJSON.hs +++ b/benchmarks/CompareWithJSON.hs @@ -27,7 +27,7 @@ instance (NFData v) => NFData (J.JSObject v) where instance NFData J.JSValue where rnf J.JSNull = () rnf (J.JSBool b) = rnf b - rnf (J.JSRational a b) = rnf a `seq` rnf b `seq` () + rnf (J.JSRational a b) = rnf a `seq` rnf b rnf (J.JSString s) = rnf (J.fromJSString s) rnf (J.JSArray lst) = rnf lst rnf (J.JSObject o) = rnf o diff --git a/benchmarks/JsonParse.hs b/benchmarks/JsonParse.hs index 6b746980e..cd1dd10f5 100644 --- a/benchmarks/JsonParse.hs +++ b/benchmarks/JsonParse.hs @@ -17,7 +17,7 @@ import Text.JSON instance NFData JSValue where rnf JSNull = () rnf (JSBool b) = rnf b - rnf (JSRational b r) = rnf b `seq` rnf r `seq` () + rnf (JSRational b r) = rnf b `seq` rnf r rnf (JSString s) = rnf (fromJSString s) rnf (JSArray vs) = rnf vs rnf (JSObject kvs) = rnf (fromJSObject kvs) diff --git a/stack-lts12.yaml b/stack-lts12.yaml index 78ec4181f..9db7f9482 100644 --- a/stack-lts12.yaml +++ b/stack-lts12.yaml @@ -1,4 +1,4 @@ -resolver: lts-12.10 +resolver: lts-12.26 packages: - '.' - attoparsec-iso8601 diff --git a/stack-nightly.yaml b/stack-nightly.yaml index b0eac1d84..19b3b2ffe 100644 --- a/stack-nightly.yaml +++ b/stack-nightly.yaml @@ -1,4 +1,4 @@ -resolver: nightly-2018-09-26 +resolver: nightly-2019-05-13 packages: - '.' - attoparsec-iso8601 @@ -7,3 +7,5 @@ flags: fast: true attoparsec-iso8601: fast: true +extra-deps: +- hlint-2.1.18