name:                semantic
version:             0.4.0
synopsis:            Framework and service for analyzing and diffing untrusted code.
description:         Please see README.md
homepage:            http://github.com/github/semantic#readme
author:              Rob Rix, Josh Vera
maintainer:          rob.rix@github.com
copyright:           2016 GitHub
category:            Web
build-type:          Simple
-- extra-source-files:
cabal-version:       >=1.10

flag release
  description: Build with optimizations on (for CI or deployment builds)
  default:     False

library
  hs-source-dirs:      src
  exposed-modules:
                     -- Analyses & term annotations
                       Analysis.Abstract.Caching
                     , Analysis.Abstract.Collecting
                     , Analysis.Abstract.Dead
                     , Analysis.Abstract.Graph
                     , Analysis.Abstract.Tracing
                     , Analysis.ConstructorName
                     , Analysis.CyclomaticComplexity
                     , Analysis.Decorator
                     , Analysis.Declaration
                     , Analysis.PackageDef
                     -- Semantic assignment
                     , Assigning.Assignment
                     , Assigning.Assignment.Deterministic
                     , Assigning.Assignment.Table
                     -- Control structures & interfaces for abstract interpretation
                     , Control.Abstract
                     , Control.Abstract.Configuration
                     , Control.Abstract.Context
                     , Control.Abstract.Environment
                     , Control.Abstract.Evaluator
                     , Control.Abstract.Heap
                     , Control.Abstract.Hole
                     , Control.Abstract.Matching
                     , Control.Abstract.Modules
                     , Control.Abstract.Primitive
                     , Control.Abstract.PythonPackage
                     , Control.Abstract.Roots
                     , Control.Abstract.TermEvaluator
                     , Control.Abstract.Value
                     -- Datatypes for abstract interpretation
                     , Data.Abstract.Address.Hole
                     , Data.Abstract.Address.Located
                     , Data.Abstract.Address.Monovariant
                     , Data.Abstract.Address.Precise
                     , Data.Abstract.BaseError
                     , Data.Abstract.Cache
                     , Data.Abstract.Configuration
                     , Data.Abstract.Declarations
                     , Data.Abstract.Environment
                     , Data.Abstract.Evaluatable
                     , Data.Abstract.Exports
                     , Data.Abstract.FreeVariables
                     , Data.Abstract.Heap
                     , Data.Abstract.Live
                     , Data.Abstract.Module
                     , Data.Abstract.ModuleTable
                     , Data.Abstract.Name
                     , Data.Abstract.Number
                     , Data.Abstract.Package
                     , Data.Abstract.Path
                     , Data.Abstract.Ref
                     , Data.Abstract.Value.Abstract
                     , Data.Abstract.Value.Concrete
                     , Data.Abstract.Value.Type
                     -- General datatype definitions & generic algorithms
                     , Data.Algebra
                     , Data.AST
                     , Data.Blob
                     , Data.Diff
                     , Data.Duration
                     , Data.Error
                     , Data.Functor.Both
                     , Data.Functor.Classes.Generic
                     , Data.Graph
                     , Data.Graph.ControlFlowVertex
                     , Data.Graph.TermVertex
                     , Data.Graph.DiffVertex
                     , Data.History
                     , Data.JSON.Fields
                     , Data.Language
                     , Data.Map.Monoidal
                     , Data.Proto.DiffTree
                     , Data.Proto.ParseTree
                     , Data.Patch
                     , Data.Project
                     , Data.Quieterm
                     , Data.Range
                     , Data.Record
                     , Data.Reprinting.Errors
                     , Data.Reprinting.Token
                     , Data.Reprinting.Splice
                     , Data.Semigroup.App
                     , Data.Scientific.Exts
                     , Data.Source
                     , Data.Span
                     , Data.SplitDiff
                     -- À la carte syntax types
                     , Data.Syntax
                     , Data.Syntax.Comment
                     , Data.Syntax.Declaration
                     , Data.Syntax.Directive
                     , Data.Syntax.Expression
                     , Data.Syntax.Literal
                     , Data.Syntax.Statement
                     , Data.Syntax.Type
                     , Data.Term
                     -- Diffing algorithms & interpretation thereof
                     , Diffing.Algorithm
                     , Diffing.Algorithm.RWS
                     , Diffing.Algorithm.RWS.FeatureVector
                     , Diffing.Algorithm.SES
                     , Diffing.Interpreter
                     -- Language-specific grammar/syntax types, & assignments
                     , Language.Markdown.Assignment
                     , Language.Markdown.Syntax
                     , Language.Go.Grammar
                     , Language.Go.Assignment
                     , Language.Go.Syntax
                     , Language.Go.Type
                     , Language.Haskell.Grammar
                     , Language.Haskell.Assignment
                     , Language.Haskell.Syntax
                     , Language.JSON.Grammar
                     , Language.JSON.Assignment
                     , Language.JSON.PrettyPrint
                     , Language.MiniRuby.Assignment
                     , Language.MiniPython.Assignment
                     , Language.Ruby.Grammar
                     , Language.Ruby.Assignment
                     , Language.Ruby.PrettyPrint
                     , Language.Ruby.Syntax
                     , Language.TypeScript.Assignment
                     , Language.TypeScript.Grammar
                     , Language.TypeScript.Resolution
                     , Language.TypeScript.Syntax
                     , Language.TypeScript.Syntax.JavaScript
                     , Language.TypeScript.Syntax.JSX
                     , Language.TypeScript.Syntax.TypeScript
                     , Language.PHP.Assignment
                     , Language.PHP.Grammar
                     , Language.PHP.Syntax
                     , Language.Python.Assignment
                     , Language.Python.Grammar
                     , Language.Python.PrettyPrint
                     , Language.Python.Syntax
                     , Language.Java.Assignment
                     , Language.Java.Grammar
                     , Language.Java.Syntax
                     , Matching.Core
                     , Numeric.Exts
                     -- Parser glue
                     , Parsing.CMark
                     , Parsing.Parser
                     , Parsing.TreeSitter
                     , Paths_semantic
                     -- Rendering formats
                     , Rendering.Graph
                     , Rendering.JSON
                     , Rendering.Renderer
                     , Rendering.Symbol
                     , Rendering.TOC
                     , Reprinting.Tokenize
                     , Reprinting.Translate
                     , Reprinting.Typeset
                     , Reprinting.Pipeline
                     -- High-level flow & operational functionality (logging, stats, etc.)
                     , Semantic.AST
                     , Semantic.CLI
                     , Semantic.Config
                     , Semantic.Diff
                     , Semantic.Distribute
                     , Semantic.Env
                     , Semantic.Graph
                     , Semantic.IO
                     , Semantic.Parse
                     , Semantic.REPL
                     , Semantic.Resolution
                     , Semantic.Task
                     , Semantic.Telemetry
                     , Semantic.Telemetry.AsyncQueue
                     , Semantic.Telemetry.Haystack
                     , Semantic.Telemetry.Log
                     , Semantic.Telemetry.Stat
                     , Semantic.Timeout
                     , Semantic.Util
                     , Semantic.Util.Rewriting
                     , Semantic.Version
                     -- Serialization
                     , Serializing.DOT
                     , Serializing.Format
                     , Serializing.SExpression
                     -- Custom Prelude
                     , Prologue
  build-depends:       base >= 4.8 && < 5
                     , aeson
                     , algebraic-graphs
                     , ansi-terminal
                     , array
                     , async
                     , attoparsec
                     , bifunctors
                     , bytestring
                     , cmark-gfm
                     , containers
                     , cryptohash
                     , directory
                     , directory-tree
                     , effects
                     , fastsum
                     , filepath
                     , free
                     , freer-cofreer
                     , ghc-prim
                     , gitrev
                     , Glob
                     , hashable
                     , haskeline
                     , hscolour
                     , http-client
                     , http-client-tls
                     , http-types
                     , kdt
                     , machines
                     , mersenne-random-pure64
                     , mtl
                     , network
                     , network-uri
                     , optparse-applicative
                     , parallel
                     , parsers
                     , prettyprinter
                     , pretty-show
                     , recursion-schemes
                     , reducers
                     , scientific
                     , semigroupoids
                     , semilattices
                     , split
                     , stm-chans
                     , template-haskell
                     , text >= 1.2.1.3
                     , these
                     , time
                     , unix
                     , unordered-containers
                     , vector
                     , proto3-suite
                     , proto3-wire
                     , haskell-tree-sitter
                     , tree-sitter-go
                     , tree-sitter-haskell
                     , tree-sitter-json
                     , tree-sitter-php
                     , tree-sitter-python
                     , tree-sitter-ruby
                     , tree-sitter-typescript
                     , tree-sitter-java
  default-language:    Haskell2010
  default-extensions:  DataKinds
                     , DeriveFoldable
                     , DeriveFunctor
                     , DeriveGeneric
                     , DeriveTraversable
                     , FlexibleContexts
                     , FlexibleInstances
                     , MultiParamTypeClasses
                     , OverloadedStrings
                     , RecordWildCards
                     , StandaloneDeriving
                     , StrictData
                     , TypeApplications
  if flag(release)
    ghc-options:       -Wall -Werror -Wmissing-export-lists -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -fno-warn-name-shadowing -O1 -j
  else
    ghc-options:       -Wall -Wmissing-export-lists -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -fno-warn-name-shadowing -O0 -j
  ghc-prof-options:    -fprof-auto

executable semantic
  hs-source-dirs:      app
  main-is:             Main.hs
  if flag(release)
    ghc-options:       -threaded -rtsopts "-with-rtsopts=-N -A4m -n2m" -static -j -O1 -j
  else
    ghc-options:       -threaded -rtsopts "-with-rtsopts=-N -A4m -n2m" -static -j -O0 -j
  cc-options:          -DU_STATIC_IMPLEMENTATION=1
  cpp-options:         -DU_STATIC_IMPLEMENTATION=1
  build-depends:       base
                     , semantic
  default-language:    Haskell2010
  default-extensions:  FlexibleInstances, OverloadedStrings, RecordWildCards

test-suite test
  type:                exitcode-stdio-1.0
  hs-source-dirs:      test
  main-is:             Spec.hs
  other-modules:       Analysis.Go.Spec
                     , Analysis.PHP.Spec
                     , Analysis.Python.Spec
                     , Analysis.Ruby.Spec
                     , Analysis.TypeScript.Spec
                     , Assigning.Assignment.Spec
                     , Control.Abstract.Evaluator.Spec
                     , Data.Abstract.Path.Spec
                     , Data.Diff.Spec
                     , Data.Functor.Classes.Generic.Spec
                     , Data.Functor.Listable
                     , Data.Mergeable
                     , Data.Scientific.Spec
                     , Data.Source.Spec
                     , Data.Term.Spec
                     , Diffing.Algorithm.RWS.Spec
                     , Diffing.Algorithm.SES.Spec
                     , Diffing.Interpreter.Spec
                     , Graphing.Calls.Spec
                     , Integration.Spec
                     , Matching.Go.Spec
                     , Numeric.Spec
                     , Proto3.Roundtrip
                     , Reprinting.Spec
                     , Rendering.TOC.Spec
                     , Semantic.Spec
                     , Semantic.CLI.Spec
                     , Semantic.IO.Spec
                     , Semantic.Stat.Spec
                     , SpecHelpers
                     , Test.Hspec.LeanCheck
  build-depends:       aeson
                     , algebraic-graphs
                     , async
                     , base
                     , bifunctors
                     , bytestring
                     , containers
                     , effects
                     , fastsum
                     , filepath
                     , free
                     , Glob
                     , hashable
                     , haskell-tree-sitter
                     , hspec >= 2.4.1
                     , hspec-core
                     , hspec-expectations-pretty-diff
                     , HUnit
                     , leancheck
                     , machines
                     , mtl
                     , network
                     , proto3-suite
                     , proto3-wire
                     , recursion-schemes >= 4.1
                     , semilattices
                     , semantic
                     , text >= 1.2.1.3
                     , these
  ghc-options:       -threaded -rtsopts -with-rtsopts=-N -j
  default-language:    Haskell2010
  default-extensions:  DataKinds
                     , DeriveFunctor
                     , DeriveGeneric
                     , FlexibleContexts
                     , FlexibleInstances
                     , MultiParamTypeClasses
                     , OverloadedStrings
                     , RecordWildCards
                     , StandaloneDeriving
                     , TypeApplications

test-suite lint
  type:                exitcode-stdio-1.0
  hs-source-dirs:      test
  main-is:             Lint.hs
  default-language:    Haskell2010
  ghc-options:         -dynamic -threaded -j
  build-depends:       base
                     , hlint

test-suite parse-examples
  type:                exitcode-stdio-1.0
  hs-source-dirs:      test
  main-is:             Examples.hs
  default-language:    Haskell2010
  ghc-options:         -threaded -rtsopts -with-rtsopts=-N -j
  build-depends:       base
                     , bytestring
                     , directory
                     , fastsum
                     , filepath
                     , Glob
                     , hspec >= 2.4.1
                     , hspec-core
                     , hspec-expectations-pretty-diff
                     , process
                     , semantic
  default-extensions:  RecordWildCards

test-suite doctests
  type:                exitcode-stdio-1.0
  hs-source-dirs:      test
  main-is:             Doctests.hs
  default-language:    Haskell2010
  ghc-options:         -dynamic -threaded -j
  build-depends:       base
                     , doctest

benchmark evaluation
  hs-source-dirs:      bench
  type:                exitcode-stdio-1.0
  main-is:             Main.hs
  ghc-options:         -threaded -rtsopts "-with-rtsopts=-N -A4m -n2m -T" -static -j -O1
  cc-options:          -DU_STATIC_IMPLEMENTATION=1
  cpp-options:         -DU_STATIC_IMPLEMENTATION=1
  default-language:    Haskell2010
  build-depends:       base
                     , criterion
                     , semantic

source-repository head
  type:     git
  location: https://github.com/github/semantic