language-ninja 0.1.0 → 0.2.0
raw patch · 14 files changed
+281/−203 lines, 14 filesdep +semigroupsdep ~template-haskelldep ~transformersPVP ok
version bump matches the API change (PVP)
Dependencies added: semigroups
Dependency ranges changed: template-haskell, transformers
API changes (from Hackage documentation)
- Language.Ninja.AST.Build: instance Test.QuickCheck.Arbitrary.Arbitrary ann => Test.QuickCheck.Arbitrary.Arbitrary (Language.Ninja.AST.Build.Build ann)
- Language.Ninja.AST.Deps: instance Test.QuickCheck.Arbitrary.Arbitrary ann => Test.QuickCheck.Arbitrary.Arbitrary (Language.Ninja.AST.Deps.Deps ann)
- Language.Ninja.AST.Expr: instance Test.QuickCheck.Arbitrary.Arbitrary ann => Test.QuickCheck.Arbitrary.Arbitrary (Language.Ninja.AST.Expr.Expr ann)
- Language.Ninja.AST.Ninja: instance Test.QuickCheck.Arbitrary.Arbitrary ann => Test.QuickCheck.Arbitrary.Arbitrary (Language.Ninja.AST.Ninja.Ninja ann)
- Language.Ninja.AST.Rule: instance Test.QuickCheck.Arbitrary.Arbitrary ann => Test.QuickCheck.Arbitrary.Arbitrary (Language.Ninja.AST.Rule.Rule ann)
+ Language.Ninja.AST.Build: instance (Test.QuickCheck.Arbitrary.Arbitrary ann, Language.Ninja.AST.Build.BuildConstraint Test.QuickCheck.Arbitrary.Arbitrary ann) => Test.QuickCheck.Arbitrary.Arbitrary (Language.Ninja.AST.Build.Build ann)
+ Language.Ninja.AST.Deps: instance (Test.QuickCheck.Arbitrary.Arbitrary ann, Language.Ninja.AST.Deps.DepsConstraint Test.QuickCheck.Arbitrary.Arbitrary ann) => Test.QuickCheck.Arbitrary.Arbitrary (Language.Ninja.AST.Deps.Deps ann)
+ Language.Ninja.AST.Expr: instance (Test.QuickCheck.Arbitrary.Arbitrary ann, Language.Ninja.AST.Expr.ExprConstraint Test.QuickCheck.Arbitrary.Arbitrary ann) => Test.QuickCheck.Arbitrary.Arbitrary (Language.Ninja.AST.Expr.Expr ann)
+ Language.Ninja.AST.Ninja: instance (Test.QuickCheck.Arbitrary.Arbitrary ann, Language.Ninja.AST.Ninja.NinjaConstraint Test.QuickCheck.Arbitrary.Arbitrary ann) => Test.QuickCheck.Arbitrary.Arbitrary (Language.Ninja.AST.Ninja.Ninja ann)
+ Language.Ninja.AST.Rule: instance (Test.QuickCheck.Arbitrary.Arbitrary ann, Language.Ninja.AST.Rule.RuleConstraint Test.QuickCheck.Arbitrary.Arbitrary ann) => Test.QuickCheck.Arbitrary.Arbitrary (Language.Ninja.AST.Rule.Rule ann)
Files
- CHANGELOG.md +5/−0
- language-ninja.cabal +46/−21
- library/Language/Ninja/AST/Build.hs +18/−18
- library/Language/Ninja/AST/Deps.hs +16/−16
- library/Language/Ninja/AST/Env.hs +16/−17
- library/Language/Ninja/AST/Expr.hs +23/−22
- library/Language/Ninja/AST/Ninja.hs +22/−22
- library/Language/Ninja/AST/Rule.hs +18/−18
- library/Language/Ninja/Lexer.hs +3/−0
- library/Language/Ninja/Parser.hs +3/−0
- library/Language/Ninja/Tutorial.hs +4/−4
- tests/Tests.hs +81/−59
- tests/Tests/Lint.hs +25/−5
- tests/Tests/Orphans.hs +1/−1
CHANGELOG.md view
@@ -1,5 +1,10 @@ # CHANGELOG +## Version 0.2.0++- Removed dependency on `quickcheck-instances`.+- It now compiles under GHC 7.10.3!+ ## Version 0.1.0 This is the first release of `language-ninja`!
language-ninja.cabal view
@@ -1,7 +1,7 @@ -------------------------------------------------------------------------------- name: language-ninja-version: 0.1.0+version: 0.2.0 stability: Experimental build-type: Custom cabal-version: >= 1.10@@ -21,7 +21,8 @@ the "Language.Ninja" module. extra-source-files: README.md , CHANGELOG.md-tested-with: GHC == 8.0.1+tested-with: GHC == 7.10.3+ , GHC == 8.0.2 -------------------------------------------------------------------------------- @@ -32,7 +33,7 @@ source-repository this type: git- tag: release-0.1.0+ tag: release-0.2.0 location: https://github.com/awakesecurity/language-ninja.git --------------------------------------------------------------------------------@@ -58,11 +59,11 @@ , mtl >= 2.2 && < 2.3 , lens >= 4.15 && < 4.16 , QuickCheck >= 2.9 && < 2.10- , quickcheck-instances >= 0.3 && < 0.4+ , semigroups >= 0.18 && < 0.19 , smallcheck >= 1.1 && < 1.2 , system-filepath >= 0.4 && < 0.5 , text >= 1.2 && < 1.3- , transformers >= 0.5 && < 0.6+ , transformers >= 0.4 && < 0.6 , unordered-containers >= 0.2 && < 0.3 , versions >= 3.1.1 && < 3.2 exposed-modules: Language.Ninja@@ -99,7 +100,8 @@ , Language.Ninja.Misc.Path , Language.Ninja.Misc.Positive default-language: Haskell2010- other-extensions: ConstraintKinds+ other-extensions: CPP+ , ConstraintKinds , DeriveDataTypeable , DeriveFoldable , DeriveFunctor@@ -118,7 +120,8 @@ , RecordWildCards , ScopedTypeVariables , UndecidableInstances- ghc-options: -Wcompat -Weverything+ if impl(ghc >= 8.0)+ ghc-options: -Wcompat -Weverything -fno-warn-unsafe -fno-warn-safe -fno-warn-implicit-prelude@@ -126,6 +129,8 @@ -fno-warn-missed-specialisations -fno-warn-all-missed-specialisations -g+ else+ ghc-options: -Wall -g -------------------------------------------------------------------------------- @@ -144,15 +149,13 @@ , bytestring >= 0.10 && < 0.11 , containers >= 0.5 && < 0.6 , flow >= 1.0 && < 1.1- , ghc >= 7.4 && < 8.4- , haddock-api >= 2.17 && < 2.18- , haddock-library >= 1.4 && < 1.5 , hashable >= 1.2 && < 1.3 , lens >= 4.15 && < 4.16 , monad-mock >= 0.1 && < 0.2 , mtl >= 2.2 && < 2.3 , QuickCheck >= 2.9 && < 2.10 , quickcheck-instances >= 0.3 && < 0.4+ , semigroups >= 0.18 && < 0.19 , smallcheck >= 1.1 && < 1.2 , system-filepath >= 0.4 && < 0.5 , tasty >= 0.11 && < 0.12@@ -162,12 +165,17 @@ , tasty-quickcheck >= 0.8 && < 0.9 , tasty-smallcheck >= 0.8 && < 0.9 , text >= 1.2 && < 1.3- , transformers >= 0.5 && < 0.6+ , transformers >= 0.4 && < 0.6 , turtle >= 1.3 && < 1.4 , unordered-containers >= 0.2 && < 0.3 , versions >= 3.1.1 && < 3.2+ if impl(ghc >= 8.0)+ build-depends: ghc >= 7.4 && < 8.4+ , haddock-api >= 2.17 && < 2.18+ , haddock-library >= 1.4 && < 1.5 default-language: Haskell2010- other-extensions: FlexibleContexts+ other-extensions: CPP+ , FlexibleContexts , FlexibleInstances , GADTs , LambdaCase@@ -178,11 +186,11 @@ , RecordWildCards , ScopedTypeVariables , StandaloneDeriving- , TypeApplications , TypeFamilies , UndecidableInstances , ViewPatterns- ghc-options: -Wcompat -Weverything+ if impl(ghc >= 8.0)+ ghc-options: -Wcompat -Weverything -fno-warn-unsafe -fno-warn-safe -fno-warn-implicit-prelude@@ -190,17 +198,22 @@ -fno-warn-missed-specialisations -fno-warn-all-missed-specialisations -g -threaded+ else+ ghc-options: -Wall+ -g -threaded -------------------------------------------------------------------------------- test-suite doctests+ if impl(ghc < 8.0)+ buildable: False type: exitcode-stdio-1.0 hs-source-dirs: tests main-is: DocTests.hs build-depends: base >= 4.8 && < 5.0 , doctest >= 0.11 && < 0.12 , QuickCheck >= 2.9 && < 2.10- , template-haskell >= 2.11 && < 2.12+ , template-haskell >= 2.10 && < 2.12 -- TODO: this shouldn't need to be here -- remove this once https://git.io/vQp2m is merged , cabal-doctest >= 1.0.2 && < 1.1@@ -223,7 +236,7 @@ -- , prettyprinter >= 1.1 && < 1.2 -- , prettyprinter-ansi-terminal >= 1.1 && < 1.2 , text >= 1.2 && < 1.3- , transformers >= 0.5 && < 0.6+ , transformers >= 0.4 && < 0.6 default-language: Haskell2010 other-extensions: DataKinds , DeriveGeneric@@ -233,7 +246,8 @@ , OverloadedStrings , StandaloneDeriving , TypeOperators- ghc-options: -Wcompat -Weverything+ if impl(ghc >= 8.0)+ ghc-options: -Wcompat -Weverything -fno-warn-unsafe -fno-warn-safe -fno-warn-implicit-prelude@@ -241,6 +255,9 @@ -fno-warn-missed-specialisations -fno-warn-all-missed-specialisations -g -threaded+ else+ ghc-options: -Wall+ -g -threaded -------------------------------------------------------------------------------- @@ -258,7 +275,7 @@ -- , prettyprinter >= 1.1 && < 1.2 -- , prettyprinter-ansi-terminal >= 1.1 && < 1.2 , text >= 1.2 && < 1.3- , transformers >= 0.5 && < 0.6+ , transformers >= 0.4 && < 0.6 default-language: Haskell2010 other-extensions: DataKinds , DeriveGeneric@@ -268,7 +285,8 @@ , OverloadedStrings , StandaloneDeriving , TypeOperators- ghc-options: -Wcompat -Weverything+ if impl(ghc >= 8.0)+ ghc-options: -Wcompat -Weverything -fno-warn-unsafe -fno-warn-safe -fno-warn-implicit-prelude@@ -276,6 +294,9 @@ -fno-warn-missed-specialisations -fno-warn-all-missed-specialisations -g -threaded+ else+ ghc-options: -Wall+ -g -threaded -------------------------------------------------------------------------------- @@ -293,7 +314,7 @@ -- , prettyprinter >= 1.1 && < 1.2 -- , prettyprinter-ansi-terminal >= 1.1 && < 1.2 , text >= 1.2 && < 1.3- , transformers >= 0.5 && < 0.6+ , transformers >= 0.4 && < 0.6 default-language: Haskell2010 other-extensions: DataKinds , DeriveGeneric@@ -303,13 +324,17 @@ , OverloadedStrings , StandaloneDeriving , TypeOperators- ghc-options: -Wcompat -Weverything+ if impl(ghc >= 8.0)+ ghc-options: -Wcompat -Weverything -fno-warn-unsafe -fno-warn-safe -fno-warn-implicit-prelude -fno-warn-unused-do-bind -fno-warn-missed-specialisations -fno-warn-all-missed-specialisations+ -g -threaded+ else+ ghc-options: -Wall -g -threaded --------------------------------------------------------------------------------
library/Language/Ninja/AST/Build.hs view
@@ -48,30 +48,29 @@ , BuildConstraint ) where -import qualified Control.Lens as Lens+import qualified Control.Lens as Lens -import Flow ((.>), (|>))+import Flow ((.>), (|>)) -import Data.HashMap.Strict (HashMap)-import Data.Text (Text)+import Data.HashMap.Strict (HashMap)+import Data.Text (Text) -import Control.DeepSeq (NFData)-import Data.Hashable (Hashable)-import GHC.Generics (Generic)+import Control.DeepSeq (NFData)+import Data.Hashable (Hashable)+import GHC.Generics (Generic) -import qualified Test.QuickCheck as QC-import Test.QuickCheck.Instances ()+import qualified Test.QuickCheck as QC -import qualified Test.SmallCheck.Series as SC+import qualified Test.SmallCheck.Series as SC -import GHC.Exts (Constraint)+import GHC.Exts (Constraint) -import Data.Aeson ((.:), (.=))-import qualified Data.Aeson as Aeson+import Data.Aeson ((.:), (.=))+import qualified Data.Aeson as Aeson -import qualified Language.Ninja.AST.Deps as AST-import qualified Language.Ninja.AST.Env as AST-import qualified Language.Ninja.Misc as Misc+import qualified Language.Ninja.AST.Deps as AST+import qualified Language.Ninja.AST.Env as AST+import qualified Language.Ninja.Misc as Misc -------------------------------------------------------------------------------- @@ -174,8 +173,9 @@ -- | Reasonable 'QC.Arbitrary' instance for 'Build'. ----- @since 0.1.0-instance (QC.Arbitrary ann) => QC.Arbitrary (Build ann) where+-- @since 0.2.0+instance ( QC.Arbitrary ann, BuildConstraint QC.Arbitrary ann+ ) => QC.Arbitrary (Build ann) where arbitrary = MkBuild <$> QC.arbitrary <*> QC.arbitrary
library/Language/Ninja/AST/Deps.hs view
@@ -49,28 +49,27 @@ , DepsConstraint ) where -import qualified Control.Lens as Lens+import qualified Control.Lens as Lens -import Flow ((|>))+import Flow ((|>)) -import Data.HashSet (HashSet)-import Data.Text (Text)+import Data.HashSet (HashSet)+import Data.Text (Text) -import Control.DeepSeq (NFData)-import Data.Hashable (Hashable)-import GHC.Generics (Generic)+import Control.DeepSeq (NFData)+import Data.Hashable (Hashable)+import GHC.Generics (Generic) -import qualified Test.QuickCheck as QC-import Test.QuickCheck.Instances ()+import qualified Test.QuickCheck as QC -import qualified Test.SmallCheck.Series as SC+import qualified Test.SmallCheck.Series as SC -import GHC.Exts (Constraint)+import GHC.Exts (Constraint) -import Data.Aeson ((.:), (.=))-import qualified Data.Aeson as Aeson+import Data.Aeson ((.:), (.=))+import qualified Data.Aeson as Aeson -import qualified Language.Ninja.Misc as Misc+import qualified Language.Ninja.Misc as Misc -------------------------------------------------------------------------------- @@ -153,8 +152,9 @@ -- | Reasonable 'QC.Arbitrary' instance for 'Deps'. ----- @since 0.1.0-instance (QC.Arbitrary ann) => QC.Arbitrary (Deps ann) where+-- @since 0.2.0+instance ( QC.Arbitrary ann, DepsConstraint QC.Arbitrary ann+ ) => QC.Arbitrary (Deps ann) where arbitrary = MkDeps <$> QC.arbitrary <*> QC.arbitrary
library/Language/Ninja/AST/Env.hs view
@@ -62,33 +62,32 @@ , Key, Maps ) where -import Control.Applicative ((<|>))-import Control.Monad ((>=>))+import Control.Applicative ((<|>))+import Control.Monad ((>=>)) -import qualified Control.Lens as Lens+import qualified Control.Lens as Lens -import Data.Monoid (Endo (Endo, appEndo))+import Data.Monoid (Endo (Endo, appEndo)) -import Data.List.NonEmpty (NonEmpty ((:|)))-import qualified Data.List.NonEmpty as NE+import Data.List.NonEmpty (NonEmpty ((:|)))+import qualified Data.List.NonEmpty as NE -import Data.HashMap.Strict (HashMap)-import qualified Data.HashMap.Strict as HM+import Data.HashMap.Strict (HashMap)+import qualified Data.HashMap.Strict as HM -import Control.DeepSeq (NFData)-import Data.Hashable (Hashable)-import GHC.Generics (Generic)+import Control.DeepSeq (NFData)+import Data.Hashable (Hashable)+import GHC.Generics (Generic) -import qualified Test.QuickCheck as QC-import Test.QuickCheck.Instances ()+import qualified Test.QuickCheck as QC -import qualified Test.SmallCheck.Series as SC+import qualified Test.SmallCheck.Series as SC -import GHC.Exts (Constraint)+import GHC.Exts (Constraint) -import qualified Data.Aeson as Aeson+import qualified Data.Aeson as Aeson -import Flow ((.>), (|>))+import Flow ((.>), (|>)) --------------------------------------------------------------------------------
library/Language/Ninja/AST/Expr.hs view
@@ -53,36 +53,35 @@ , ExprConstraint ) where -import Control.Arrow (second)+import Control.Arrow (second) -import qualified Control.Lens as Lens+import qualified Control.Lens as Lens -import Data.Foldable (asum)-import Data.Maybe (fromMaybe)-import Data.Monoid (Endo (Endo, appEndo), (<>))+import Data.Foldable (asum)+import Data.Maybe (fromMaybe)+import Data.Monoid (Endo (Endo, appEndo), (<>)) -import Flow ((.>), (|>))+import Flow ((.>), (|>)) -import Data.Text (Text)-import qualified Data.Text as Text+import Data.Text (Text)+import qualified Data.Text as Text -import Control.DeepSeq (NFData)-import Data.Data (Data)-import Data.Hashable (Hashable)-import GHC.Generics (Generic)+import Control.DeepSeq (NFData)+import Data.Data (Data)+import Data.Hashable (Hashable)+import GHC.Generics (Generic) -import qualified Test.QuickCheck as QC-import Test.QuickCheck.Instances ()+import qualified Test.QuickCheck as QC -import qualified Test.SmallCheck.Series as SC+import qualified Test.SmallCheck.Series as SC -import GHC.Exts (Constraint)+import GHC.Exts (Constraint) -import Data.Aeson ((.:), (.=))-import qualified Data.Aeson as Aeson+import Data.Aeson ((.:), (.=))+import qualified Data.Aeson as Aeson -import qualified Language.Ninja.AST.Env as AST-import qualified Language.Ninja.Misc as Misc+import qualified Language.Ninja.AST.Env as AST+import qualified Language.Ninja.Misc as Misc -------------------------------------------------------------------------------- @@ -242,8 +241,10 @@ -- | Reasonable 'QC.Arbitrary' instance for 'Expr'. ----- @since 0.1.0-instance forall ann. (QC.Arbitrary ann) => QC.Arbitrary (Expr ann) where+-- @since 0.2.0+instance forall ann.+ ( QC.Arbitrary ann, ExprConstraint QC.Arbitrary ann+ ) => QC.Arbitrary (Expr ann) where arbitrary = QC.sized go where go :: Int -> QC.Gen (Expr ann)
library/Language/Ninja/AST/Ninja.hs view
@@ -55,37 +55,36 @@ , Outputs, Output ) where -import Control.Monad ((>=>))+import Control.Monad ((>=>)) -import qualified Control.Lens as Lens+import qualified Control.Lens as Lens -import Flow ((.>), (|>))+import Flow ((.>), (|>)) -import Data.HashMap.Strict (HashMap)-import qualified Data.HashMap.Strict as HM+import Data.HashMap.Strict (HashMap)+import qualified Data.HashMap.Strict as HM -import Data.HashSet (HashSet)+import Data.HashSet (HashSet) -import Data.Text (Text)+import Data.Text (Text) -import Control.DeepSeq (NFData)-import Data.Hashable (Hashable)-import GHC.Generics (Generic)+import Control.DeepSeq (NFData)+import Data.Hashable (Hashable)+import GHC.Generics (Generic) -import qualified Test.QuickCheck as QC-import Test.QuickCheck.Instances ()+import qualified Test.QuickCheck as QC -import qualified Test.SmallCheck.Series as SC+import qualified Test.SmallCheck.Series as SC -import GHC.Exts (Constraint)+import GHC.Exts (Constraint) -import Data.Aeson ((.:), (.=))-import qualified Data.Aeson as Aeson-import qualified Data.Aeson.Types as Aeson+import Data.Aeson ((.:), (.=))+import qualified Data.Aeson as Aeson+import qualified Data.Aeson.Types as Aeson -import qualified Language.Ninja.AST.Build as AST-import qualified Language.Ninja.AST.Rule as AST-import qualified Language.Ninja.Misc as Misc+import qualified Language.Ninja.AST.Build as AST+import qualified Language.Ninja.AST.Rule as AST+import qualified Language.Ninja.Misc as Misc -------------------------------------------------------------------------------- @@ -247,8 +246,9 @@ -- | Reasonable 'QC.Arbitrary' instance for 'Ninja'. ----- @since 0.1.0-instance (QC.Arbitrary ann) => QC.Arbitrary (Ninja ann) where+-- @since 0.2.0+instance ( QC.Arbitrary ann, NinjaConstraint QC.Arbitrary ann+ ) => QC.Arbitrary (Ninja ann) where arbitrary = MkNinja <$> QC.arbitrary <*> QC.arbitrary
library/Language/Ninja/AST/Rule.hs view
@@ -47,31 +47,30 @@ , RuleConstraint ) where -import qualified Control.Lens as Lens+import qualified Control.Lens as Lens -import Flow ((|>))+import Flow ((|>)) -import Data.HashMap.Strict (HashMap)-import qualified Data.HashMap.Strict as HM+import Data.HashMap.Strict (HashMap)+import qualified Data.HashMap.Strict as HM -import Data.Text (Text)+import Data.Text (Text) -import Control.DeepSeq (NFData)-import Data.Hashable (Hashable)-import GHC.Generics (Generic)+import Control.DeepSeq (NFData)+import Data.Hashable (Hashable)+import GHC.Generics (Generic) -import qualified Test.QuickCheck as QC-import Test.QuickCheck.Instances ()+import qualified Test.QuickCheck as QC -import qualified Test.SmallCheck.Series as SC+import qualified Test.SmallCheck.Series as SC -import GHC.Exts (Constraint)+import GHC.Exts (Constraint) -import Data.Aeson ((.:), (.=))-import qualified Data.Aeson as Aeson+import Data.Aeson ((.:), (.=))+import qualified Data.Aeson as Aeson -import qualified Language.Ninja.AST.Expr as AST-import qualified Language.Ninja.Misc as Misc+import qualified Language.Ninja.AST.Expr as AST+import qualified Language.Ninja.Misc as Misc -------------------------------------------------------------------------------- @@ -133,8 +132,9 @@ -- | Reasonable 'QC.Arbitrary' instance for 'Rule'. ----- @since 0.1.0-instance (QC.Arbitrary ann) => QC.Arbitrary (Rule ann) where+-- @since 0.2.0+instance ( QC.Arbitrary ann, RuleConstraint QC.Arbitrary ann+ ) => QC.Arbitrary (Rule ann) where arbitrary = MkRule <$> QC.arbitrary <*> QC.arbitrary -- | Default 'Hashable' instance via 'Generic'.
library/Language/Ninja/Lexer.hs view
@@ -37,6 +37,7 @@ {-# OPTIONS_GHC -fno-warn-unused-do-bind #-} +{-# LANGUAGE CPP #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-}@@ -103,7 +104,9 @@ import Data.Char (isSpace) import Data.Foldable (asum)+#if __GLASGOW_HASKELL__ >= 800 import Data.Functor ((<$))+#endif import Data.Maybe (catMaybes, fromMaybe) import Flow ((.>), (|>))
library/Language/Ninja/Parser.hs view
@@ -35,6 +35,7 @@ -- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +{-# LANGUAGE CPP #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}@@ -83,7 +84,9 @@ import qualified Control.Lens as Lens +#if __GLASGOW_HASKELL__ >= 800 import Data.Maybe (Maybe (Just, Nothing))+#endif import Data.Monoid (Endo (Endo, appEndo), (<>)) import qualified Data.ByteString.Char8 as BSC8
library/Language/Ninja/Tutorial.hs view
@@ -17,7 +17,7 @@ -- See the License for the specific language governing permissions and -- limitations under the License. -{-# OPTIONS_GHC -Wno-unused-imports #-}+{-# OPTIONS_GHC -fno-warn-unused-imports #-} -- | -- Module : Language.Ninja.Tutorial@@ -369,7 +369,7 @@ -- The command-line interface for @ninja-lex@ looks like this: -- -- > $ ninja-lex --help--- > ninja-lex version 0.1.0+-- > ninja-lex version 0.2.0 -- > -- > Usage: ninja-lex (process | pretty) -- >@@ -404,7 +404,7 @@ -- The command-line interface for @ninja-parse@ looks like this: -- -- > $ ninja-parse --help--- > ninja-parse version 0.1.0+-- > ninja-parse version 0.2.0 -- > -- > Usage: ninja-parse (process | pretty) -- >@@ -439,7 +439,7 @@ -- The command-line interface for @ninja-compile@ looks like this: -- -- > $ ninja-compile --help--- > ninja-compile version 0.1.0+-- > ninja-compile version 0.2.0 -- > -- > Usage: ninja-compile [--input FILEPATH] [--output FILEPATH] [--machine-readable] -- >
tests/Tests.hs view
@@ -23,7 +23,6 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} @@ -42,6 +41,8 @@ import qualified Data.Typeable as Ty +import Data.HashMap.Strict (HashMap)+import Data.HashSet (HashSet) import Data.Text (Text) import Control.Exception (displayException)@@ -120,25 +121,28 @@ ] aesonSC' :: (Eq x, Show x)- => SC.Series IO x+ => Ty.Proxy x+ -> SC.Series IO x -> (x -> Aeson.Value) -> (Aeson.Value -> Aeson.Parser x) -> TestTree-aesonSC' s toJ fromJ+aesonSC' _ s toJ fromJ = Test.SC.testProperty "parseJSON . toJSON ≡ₛ pure" (Test.SC.over s (\x -> Aeson.parseEither fromJ (toJ x) == Right x)) aesonSC :: forall x. ( Eq x, Show x, SC.Serial IO x, Aeson.ToJSON x, Aeson.FromJSON x ) => Ty.Proxy x -> TestTree-aesonSC _ = aesonSC' @x SC.series Aeson.toJSON Aeson.parseJSON+aesonSC _ = aesonSC' (Ty.Proxy :: Ty.Proxy x)+ SC.series Aeson.toJSON Aeson.parseJSON aesonQC' :: (Eq x, Show x)- => (QC.Gen x, x -> [x])+ => Ty.Proxy x+ -> (QC.Gen x, x -> [x]) -> (x -> Aeson.Value) -> (Aeson.Value -> Aeson.Parser x) -> TestTree-aesonQC' (gen, shrink) toJ fromJ+aesonQC' _ (gen, shrink) toJ fromJ = Test.QC.testProperty "parseJSON . toJSON ≡ₐ pure" (Test.QC.forAllShrink gen shrink (\x -> Aeson.parseEither fromJ (toJ x) === Right x))@@ -146,7 +150,8 @@ aesonQC :: forall x. ( Eq x, Show x, QC.Arbitrary x, Aeson.ToJSON x, Aeson.FromJSON x ) => Ty.Proxy x -> TestTree-aesonQC _ = aesonQC' @x (QC.arbitrary, QC.shrink) Aeson.toJSON Aeson.parseJSON+aesonQC _ = aesonQC' (Ty.Proxy :: Ty.Proxy x)+ (QC.arbitrary, QC.shrink) Aeson.toJSON Aeson.parseJSON parseTestNinja :: String -> IO (AST.Ninja ()) parseTestNinja name = do@@ -216,85 +221,85 @@ aesonTests = Test.testGroup "aeson" [ testModule "Language.Ninja.Lexer"- [ testAesonSC 2 (Ty.Proxy @(Lexer.Lexeme Bool))- , testAesonSC 4 (Ty.Proxy @(Lexer.LName Bool))- , testAesonSC 4 (Ty.Proxy @(Lexer.LFile Bool))- , testAesonSC 4 (Ty.Proxy @(Lexer.LBind Bool))- , testAesonSC 2 (Ty.Proxy @(Lexer.LBuild Bool))+ [ testAesonSC 2 (Ty.Proxy :: Ty.Proxy (Lexer.Lexeme Bool))+ , testAesonSC 4 (Ty.Proxy :: Ty.Proxy (Lexer.LName Bool))+ , testAesonSC 4 (Ty.Proxy :: Ty.Proxy (Lexer.LFile Bool))+ , testAesonSC 4 (Ty.Proxy :: Ty.Proxy (Lexer.LBind Bool))+ , testAesonSC 2 (Ty.Proxy :: Ty.Proxy (Lexer.LBuild Bool)) -- TODO: add Arbitrary instances so we can testAesonQC ] , testModule "Language.Ninja.IR.Build"- [ testAesonSC 2 (Ty.Proxy @IR.Build)+ [ testAesonSC 2 (Ty.Proxy :: Ty.Proxy IR.Build) -- TODO: add Arbitrary instances so we can testAesonQC ] , testModule "Language.Ninja.IR.Meta"- [ testAesonSC def (Ty.Proxy @IR.Meta)+ [ testAesonSC def (Ty.Proxy :: Ty.Proxy IR.Meta) -- TODO: add Arbitrary instances so we can testAesonQC ] , testModule "Language.Ninja.IR.Ninja"- [ testAesonSC 2 (Ty.Proxy @IR.Ninja)+ [ testAesonSC 2 (Ty.Proxy :: Ty.Proxy IR.Ninja) -- TODO: add Arbitrary instances so we can testAesonQC ] , testModule "Language.Ninja.IR.Pool"- [ testAesonSC def (Ty.Proxy @IR.Pool)- , testAesonSC def (Ty.Proxy @IR.PoolName)- , testAesonSC def (Ty.Proxy @IR.PoolDepth)+ [ testAesonSC def (Ty.Proxy :: Ty.Proxy IR.Pool)+ , testAesonSC def (Ty.Proxy :: Ty.Proxy IR.PoolName)+ , testAesonSC def (Ty.Proxy :: Ty.Proxy IR.PoolDepth) -- TODO: add Arbitrary instances so we can testAesonQC ] , testModule "Language.Ninja.IR.Rule"- [ testAesonSC 1 (Ty.Proxy @IR.Rule)- , testAesonSC def (Ty.Proxy @IR.SpecialDeps)- , testAesonSC def (Ty.Proxy @IR.ResponseFile)+ [ testAesonSC 1 (Ty.Proxy :: Ty.Proxy IR.Rule)+ , testAesonSC def (Ty.Proxy :: Ty.Proxy IR.SpecialDeps)+ , testAesonSC def (Ty.Proxy :: Ty.Proxy IR.ResponseFile) -- TODO: add Arbitrary instances so we can testAesonQC ] , testModule "Language.Ninja.IR.Target"- [ testAesonSC def (Ty.Proxy @IR.Target)- , testAesonSC def (Ty.Proxy @IR.Output)- , testAesonSC def (Ty.Proxy @IR.Dependency)- , testAesonSC def (Ty.Proxy @IR.DependencyType)+ [ testAesonSC def (Ty.Proxy :: Ty.Proxy IR.Target)+ , testAesonSC def (Ty.Proxy :: Ty.Proxy IR.Output)+ , testAesonSC def (Ty.Proxy :: Ty.Proxy IR.Dependency)+ , testAesonSC def (Ty.Proxy :: Ty.Proxy IR.DependencyType) -- TODO: add Arbitrary instances so we can testAesonQC ] , testModule "Language.Ninja.AST.Env"- [ testAesonSC def (Ty.Proxy @(AST.Env Text Text))- , testAesonQC (Ty.Proxy @(AST.Env Text Text))+ [ testAesonSC def (Ty.Proxy :: Ty.Proxy (AST.Env Text Text))+ , testAesonQC (Ty.Proxy :: Ty.Proxy (AST.Env Text Text)) ] , testModule "Language.Ninja.AST.Expr"- [ testAesonSC def (Ty.Proxy @(AST.Expr Bool))- , testAesonQC (Ty.Proxy @(AST.Expr Bool))+ [ testAesonSC def (Ty.Proxy :: Ty.Proxy (AST.Expr Bool))+ , testAesonQC (Ty.Proxy :: Ty.Proxy (AST.Expr Bool)) ] , testModule "Language.Ninja.AST.Rule"- [ testAesonSC def (Ty.Proxy @(AST.Rule Bool))- , testAesonQC (Ty.Proxy @(AST.Rule Bool))+ [ testAesonSC def (Ty.Proxy :: Ty.Proxy (AST.Rule Bool))+ , testAesonQC (Ty.Proxy :: Ty.Proxy (AST.Rule Bool)) ] , testModule "Language.Ninja.AST.Ninja" [ -- TODO: combinatorial explosion- testAesonSC 0 (Ty.Proxy @(AST.Ninja Bool))- -- , testAesonQC (Ty.Proxy @(AST.Ninja Bool))+ testAesonSC 0 (Ty.Proxy :: Ty.Proxy (AST.Ninja Bool))+ -- , testAesonQC (Ty.Proxy :: Ty.Proxy (AST.Ninja Bool)) ] , testModule "Language.Ninja.AST.Build" [ -- TODO: combinatorial explosion- testAesonSC 1 (Ty.Proxy @(AST.Build Bool))- -- , testAesonQC (Ty.Proxy @(AST.Build Bool))+ testAesonSC 1 (Ty.Proxy :: Ty.Proxy (AST.Build Bool))+ -- , testAesonQC (Ty.Proxy :: Ty.Proxy (AST.Build Bool)) ] , testModule "Language.Ninja.AST.Deps"- [ testAesonSC def (Ty.Proxy @(AST.Deps Bool))- , testAesonQC (Ty.Proxy @(AST.Deps Bool))+ [ testAesonSC def (Ty.Proxy :: Ty.Proxy (AST.Deps Bool))+ , testAesonQC (Ty.Proxy :: Ty.Proxy (AST.Deps Bool)) ] , testModule "Language.Ninja.Misc.Command"- [ testAesonSC def (Ty.Proxy @Misc.Command)+ [ testAesonSC def (Ty.Proxy :: Ty.Proxy Misc.Command) -- TODO: add Arbitrary instances so we can testAesonQC ] , testModule "Language.Ninja.Misc.Path"- [ testAesonSC def (Ty.Proxy @Misc.Path)+ [ testAesonSC def (Ty.Proxy :: Ty.Proxy Misc.Path) -- TODO: add Arbitrary instances so we can testAesonQC ] , testModule "Language.Ninja.Misc.Located"- [ testAesonSC def (Ty.Proxy @(Misc.Located Bool))- , testAesonSC def (Ty.Proxy @Misc.Position)+ [ testAesonSC def (Ty.Proxy :: Ty.Proxy (Misc.Located Bool))+ , testAesonSC def (Ty.Proxy :: Ty.Proxy Misc.Position) -- TODO: add Arbitrary instances so we can testAesonQC ] , testModule "Language.Ninja.Misc.IText"- [ testAesonSC def (Ty.Proxy @Misc.IText)+ [ testAesonSC def (Ty.Proxy :: Ty.Proxy Misc.IText) -- TODO: add Arbitrary instances so we can testAesonQC ] ]@@ -418,39 +423,56 @@ ] , testModule "Language.Ninja.AST.Expr" [ testType "Expr"- [ testPrism 4 "_Exprs" (AST._Exprs @Bool)- , testPrism 4 "_Lit" (AST._Lit @Bool)- , testPrism 4 "_Var" (AST._Var @Bool)+ [ testPrism 4 "_Exprs"+ (AST._Exprs :: Lens.Prism' (AST.Expr Bool) (Bool, [AST.Expr Bool]))+ , testPrism 4 "_Lit"+ (AST._Lit :: Lens.Prism' (AST.Expr Bool) (Bool, Text))+ , testPrism 4 "_Var"+ (AST._Var :: Lens.Prism' (AST.Expr Bool) (Bool, Text)) ] ] , testModule "Language.Ninja.AST.Rule" [ testType "Rule"- [ testLens 4 "ruleBind" (AST.ruleBind @Bool)+ [ testLens 4 "ruleBind"+ (AST.ruleBind :: Lens.Lens' (AST.Rule Bool) (HashMap Text (AST.Expr Bool))) ] ] , testModule "Language.Ninja.AST.Ninja" [ testType "Ninja" [] -- TODO: combinatorial explosion- -- [ testLens 1 "ninjaRules" (AST.ninjaRules @Bool)- -- , testLens 1 "ninjaSingles" (AST.ninjaSingles @Bool)- -- , testLens 1 "ninjaMultiples" (AST.ninjaMultiples @Bool)- -- , testLens 1 "ninjaPhonys" (AST.ninjaPhonys @Bool)- -- , testLens 1 "ninjaDefaults" (AST.ninjaDefaults @Bool)- -- , testLens 1 "ninjaSpecials" (AST.ninjaSpecials @Bool)+ -- [ testLens 1 "ninjaRules"+ -- (AST.ninjaRules :: Lens.Lens' (AST.Ninja Bool) (HashMap Text (AST.Rule Bool)))+ -- , testLens 1 "ninjaSingles"+ -- (AST.ninjaSingles :: Lens.Lens' (AST.Ninja Bool) (HashMap Text (AST.Build Bool)))+ -- , testLens 1 "ninjaMultiples"+ -- (AST.ninjaMultiples :: Lens.Lens' (AST.Ninja Bool) (HashMap (HashSet Text) (AST.Build Bool)))+ -- , testLens 1 "ninjaPhonys"+ -- (AST.ninjaPhonys :: Lens.Lens' (AST.Ninja Bool) (HashMap Text (HashSet Text)))+ -- , testLens 1 "ninjaDefaults"+ -- (AST.ninjaDefaults :: Lens.Lens' (AST.Ninja Bool) (HashSet Text))+ -- , testLens 1 "ninjaSpecials"+ -- (AST.ninjaSpecials :: Lens.Lens' (AST.Ninja Bool) (HashMap Text Text)) -- ] ] , testModule "Language.Ninja.AST.Build" [ testType "Build" [] -- TODO: combinatorial explosion- -- [ testLens 1 "buildRule" (AST.buildRule @Bool)- -- , testLens 1 "buildEnv" (AST.buildEnv @Bool)- -- , testLens 1 "buildDeps" (AST.buildDeps @Bool)- -- , testLens 1 "buildBind" (AST.buildBind @Bool)+ -- [ testLens 1 "buildRule"+ -- (AST.buildRule :: Lens.Lens' (AST.Build Bool) Text)+ -- , testLens 1 "buildEnv"+ -- (AST.buildEnv :: Lens.Lens' (AST.Build Bool) (AST.Env Text Text))+ -- , testLens 1 "buildDeps"+ -- (AST.buildDeps :: Lens.Lens' (AST.Build Bool) (AST.Deps Bool))+ -- , testLens 1 "buildBind"+ -- (AST.buildBind :: Lens.Lens' (AST.Build Bool) (HashMap Text Text)) -- ] ] , testModule "Language.Ninja.AST.Deps" [ testType "Deps"- [ testLens def "depsNormal" (AST.depsNormal @Bool)- , testLens def "depsImplicit" (AST.depsImplicit @Bool)- , testLens def "depsOrderOnly" (AST.depsOrderOnly @Bool)+ [ testLens def "depsNormal"+ (AST.depsNormal :: Lens.Lens' (AST.Deps Bool) (HashSet Text))+ , testLens def "depsImplicit"+ (AST.depsImplicit :: Lens.Lens' (AST.Deps Bool) (HashSet Text))+ , testLens def "depsOrderOnly"+ (AST.depsOrderOnly :: Lens.Lens' (AST.Deps Bool) (HashSet Text)) ] ] , testModule "Language.Ninja.Misc.Command"
tests/Tests/Lint.hs view
@@ -17,6 +17,7 @@ -- See the License for the specific language governing permissions and -- limitations under the License. +{-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-}@@ -45,6 +46,7 @@ , ComponentName, SinceException ) where +#if __GLASGOW_HASKELL__ >= 800 import Control.Applicative (empty) import Control.Arrow ((&&&)) import Control.Monad (forM)@@ -58,10 +60,6 @@ import qualified GHC import qualified Outputable as GHC -import qualified Data.Map.Lazy as LMap--import qualified Data.Text as Text- import qualified Documentation.Haddock as H import qualified Documentation.Haddock.Types as H @@ -69,20 +67,30 @@ -- import qualified Documentation.Haddock.Parser as H.Parser -- import qualified Documentation.Haddock.Parser.Monad as H.Parser -import qualified Test.Tasty as Test+import qualified Data.Map.Lazy as LMap++import qualified Data.Text as Text+ import qualified Test.Tasty.HUnit as Test import qualified Turtle+#endif +import qualified Test.Tasty as Test+ -------------------------------------------------------------------------------- -- | Generate and lint the Haddock documentation for this project. lintHaddock :: LintHaddockOptions -> IO Test.TestTree+#if __GLASGOW_HASKELL__ < 800+lintHaddock _ = pure (Test.testGroup "Haddock linting [skipped]" [])+#else lintHaddock options = do _ <- H.withGhc [] GHC.getSessionDynFlags buildHaddock mapM (lintInterfaceFile options) (componentNames options) |> fmap (Test.testGroup "Haddock linting")+#endif -------------------------------------------------------------------------------- @@ -145,6 +153,8 @@ -------------------------------------------------------------------------------- +#if __GLASGOW_HASKELL__ >= 800+ lintInterfaceFile :: LintHaddockOptions -> ComponentName -> IO Test.TestTree lintInterfaceFile options cn = readInterface ifaceFP@@ -202,8 +212,12 @@ docmap = H.instDocMap iface toIdent = MkIdent (H.instMod iface) +#endif+ -------------------------------------------------------------------------------- +#if __GLASGOW_HASKELL__ >= 800+ data Ident = MkIdent { _identModule :: !GHC.Module@@ -226,8 +240,12 @@ instance Show Ident where show = printIdent +#endif+ -------------------------------------------------------------------------------- +#if __GLASGOW_HASKELL__ >= 800+ class HasSince t where hasSince :: t -> Bool @@ -236,5 +254,7 @@ instance HasSince (H.Documentation name) where hasSince = H.documentationDoc .> maybe False hasSince++#endif --------------------------------------------------------------------------------
tests/Tests/Orphans.hs view
@@ -17,7 +17,7 @@ -- See the License for the specific language governing permissions and -- limitations under the License. -{-# OPTIONS_GHC -Wno-orphans #-}+{-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}