-- Initial hpython.cabal generated by cabal init.  For further 
-- documentation, see http://haskell.org/cabal/users-guide/

name:                hpython
version:             0.1
synopsis:            Python language tools
description:
  `hpython` provides an abstract syntax tree for Python 3.5, along with a parser,
  printer, and syntax checker. It also contains optics for working with the AST,
  and a DSL for writing Python programs directly in Haskell.
  .
  For a high-level overview of the library, see the @Language.Python@ module.
  .
  For code examples, see the [examples directory on GitHub](https://github.com/qfpl/hpython/tree/master/example).
  .
  For general information about the project, see the [project readme](https://github.com/qfpl/hpython/blob/master/README.md).
license:             BSD3
license-file:        LICENCE
author:              Isaac Elliott
maintainer:          isaace71295@gmail.com
copyright:           Copyright (c) 2017-2018, Commonwealth Scientific and Industrial Research Organisation (CSIRO) ABN 41 687 119 230.
category:            Language
build-type:          Simple
extra-source-files:  ChangeLog.md
                     benchmarks/pypy.py
                     test/files/ansible.py
                     test/files/asyncstatements.py
                     test/files/comments.py
                     test/files/decorators.py
                     test/files/dictcomp.py
                     test/files/django.py
                     test/files/django2.py
                     test/files/imaginary.py
                     test/files/indent_optics_in.py
                     test/files/indent_optics_out.py
                     test/files/indent_optics_in2.py
                     test/files/indent_optics_out2.py
                     test/files/joblib.py
                     test/files/joblib2.py
                     test/files/mypy.py
                     test/files/mypy2.py
                     test/files/numpy.py
                     test/files/numpy2.py
                     test/files/pandas.py
                     test/files/pandas2.py
                     test/files/pypy.py
                     test/files/pypy2.py
                     test/files/regex.py
                     test/files/requests.py
                     test/files/requests2.py
                     test/files/set.py
                     test/files/string.py
                     test/files/sqlalchemy.py
                     test/files/test.py
                     test/files/typeann.py
                     test/files/weird.py
                     test/files/weird2.py

cabal-version:       >=1.10
tested-with:           GHC == 8.0.2
                     , GHC == 8.2.2
                     , GHC == 8.4.4
                     , GHC == 8.6.1


source-repository    head
  type:              git
  location:          git@github.com/qfpl/hpython.git

flag development
  default: False
  manual: True

library
  exposed-modules:     Data.Type.Set
                     , Data.Validate.Monadic
                     , Language.Python
                     , Language.Python.DSL
                     , Language.Python.Internal.Lexer
                     , Language.Python.Internal.Parse
                     , Language.Python.Internal.Render
                     , Language.Python.Internal.Render.Correction
                     , Language.Python.Internal.Token
                     , Language.Python.Internal.Syntax.IR
                     , Language.Python.Optics
                     , Language.Python.Optics.Indents
                     , Language.Python.Optics.Newlines
                     , Language.Python.Optics.Validated
                     , Language.Python.Parse
                     , Language.Python.Parse.Error
                     , Language.Python.Render
                     , Language.Python.Syntax
                     , Language.Python.Syntax.AugAssign
                     , Language.Python.Syntax.CommaSep
                     , Language.Python.Syntax.Comment
                     , Language.Python.Syntax.Expr
                     , Language.Python.Syntax.Ident
                     , Language.Python.Syntax.Import
                     , Language.Python.Syntax.Module
                     , Language.Python.Syntax.Operator.Binary
                     , Language.Python.Syntax.Operator.Unary
                     , Language.Python.Syntax.ModuleNames
                     , Language.Python.Syntax.Numbers
                     , Language.Python.Syntax.Punctuation
                     , Language.Python.Syntax.Raw
                     , Language.Python.Syntax.Statement
                     , Language.Python.Syntax.Strings
                     , Language.Python.Syntax.Types
                     , Language.Python.Syntax.Whitespace
                     , Language.Python.Validate
                     , Language.Python.Validate.Error
                     , Language.Python.Validate.Scope
                     , Language.Python.Validate.Scope.Error
                     , Language.Python.Validate.Syntax
                     , Language.Python.Validate.Syntax.Error
                     , Language.Python.Validate.Indentation
                     , Language.Python.Validate.Indentation.Error
  build-depends:       base >=4.9 && <5
                     , bifunctors >= 0.1 && < 5.6
                     , bytestring >= 0.10 && < 0.11
                     , digit >=0.7 && < 0.8
                     , dlist >=0.8 && <0.9
                     , lens >= 4 && < 4.18
                     , parsers >= 0.10 && < 0.13
                     , megaparsec >=6.3 && <7
                     , fingertree >=0.1 && <0.2
                     , mtl >= 2.1 && < 2.3
                     , containers >=0.5.7.1 && <0.7
                     , deriving-compat >=0.4 && <0.6
                     , semigroupoids >=5.2.2 && <5.4
                     , text >=1.2 && <1.3
                     , these >=0.7.4 && <0.8
                     , validation >= 1 && < 1.1
                     , parsers-megaparsec >=0.1 && <0.2
  hs-source-dirs:      src
  default-language:    Haskell2010
  ghc-options:         -Wall
                       -Wincomplete-patterns
                       -Wincomplete-record-updates
                       -Wunused-imports
                       -fno-warn-name-shadowing
  if flag(development)
    ghc-options:       -Werror

executable example
  main-is:             Main.hs
  other-modules:       Indentation
                     , FixMutableDefaultArguments
                     , OptimizeTailRecursion
                     , Programs
                     , Validation
  hs-source-dirs:      example
  build-depends:       base >=4.9 && <5, lens, hpython, text
  default-language:    Haskell2010
  ghc-options:         -Wincomplete-patterns
                       -Wincomplete-record-updates
                       -Wunused-imports
  if flag(development)
    ghc-options:       -Werror


benchmark bench
  main-is:             Main.hs
  type:                exitcode-stdio-1.0
  hs-source-dirs:      benchmarks
  build-depends:       base >=4.9 && <5
                     , hpython
                     , megaparsec >=6.3 && < 7
                     , criterion >= 1 && < 1.6
                     , deepseq
                     , text
                     , validation >= 1 && < 1.1
  default-language:    Haskell2010
  ghc-options:         -Wall
                       -Wincomplete-patterns
                       -Wincomplete-record-updates
                       -Wunused-imports
  if flag(development)
    ghc-options:       -Werror


test-suite hpython-tests
  main-is:             Main.hs
  type:                exitcode-stdio-1.0
  other-modules:       DSL
                     , Helpers
                     , LexerParser
                     , Optics
                     , Parser
                     , Roundtrip
                     , Scope
                     , Syntax
  hs-source-dirs:      test
  build-depends:       base >=4.9 && <5
                     , filepath
                     , hpython
                     , hedgehog >= 0.5 && < 0.7
                     , lens >= 4 && < 4.18
                     , text >=1.2 && <1.3
                     , megaparsec >=6.3 && < 7
                     , validation >= 1 && < 1.1
  default-language:    Haskell2010
  ghc-options:         -Wall
                       -Wincomplete-patterns
                       -Wincomplete-record-updates
                       -Wunused-imports
                       -fno-warn-name-shadowing
  if flag(development)
    ghc-options:       -Werror