1
1
mirror of https://github.com/github/semantic.git synced 2024-12-01 09:15:01 +03:00
semantic/semantic.cabal

426 lines
18 KiB
Plaintext
Raw Normal View History

2019-06-13 21:20:22 +03:00
cabal-version: 2.4
2018-02-26 21:16:56 +03:00
name: semantic
2019-06-10 22:03:47 +03:00
version: 0.6.0.0
synopsis: Framework and executable for analyzing and diffing untrusted code.
description: Semantic is a library for parsing, analyzing, and comparing source code across many languages.
homepage: http://github.com/github/semantic#readme
author: The Semantic authors
maintainer: opensource+semantic@github.com
license: MIT
license-file: LICENSE
2019-02-19 22:20:33 +03:00
copyright: (c) 2016-2019 GitHub, Inc.
2015-11-18 01:44:16 +03:00
category: Web
2017-07-23 17:34:30 +03:00
build-type: Simple
2019-02-19 22:20:33 +03:00
stability: alpha
2015-11-18 01:44:16 +03:00
tested-with: GHC == 8.6.4
flag release
description: Build with optimizations on (for CI or deployment builds)
default: False
2019-02-19 21:54:14 +03:00
-- GHC extensions shared between targets
common haskell
default-language: Haskell2010
default-extensions: DataKinds
, DeriveFoldable
, DeriveFunctor
, DeriveGeneric
, DeriveTraversable
, FlexibleContexts
, FlexibleInstances
, MonadFailDesugaring
, MultiParamTypeClasses
, OverloadedStrings
, RecordWildCards
, StandaloneDeriving
, StrictData
, TypeApplications
-- Except in case of vendored dependencies, these deps should be expressed
-- as caret-operator bounds relative to a version in Stackage.
-- These are currently pinned to lts-13.13.
2019-02-19 22:20:33 +03:00
common dependencies
build-depends: base >= 4.12 && < 5
, aeson ^>= 1.4.2.0
, algebraic-graphs ^>= 0.3
, async ^>= 2.2.1
, bifunctors ^>= 5.5
, bytestring ^>= 0.10.8.2
, containers ^>= 0.6.0.1
, directory ^>= 1.3.3.0
, fastsum ^>= 0.1.1.0
, filepath ^>= 1.4.2.1
, free ^>= 5.1
, fused-effects ^>= 0.4.0.0
, fused-effects-exceptions ^>= 0.1.1.0
, hashable ^>= 1.2.7.0
, tree-sitter ^>= 0.1.0.0
, machines ^>= 0.6.4
, mtl ^>= 2.2.2
, network ^>= 2.8.0.0
, process ^>= 1.6.3.0
, recursion-schemes ^>= 5.1
, scientific ^>= 0.3.6.2
, safe-exceptions ^>= 0.1.7.0
, semilattices ^>= 0.0.0.3
, shelly >= 1.5 && <2
, text ^>= 1.2.3.1
, these >= 0.7 && <1
, unix ^>= 2.7.2.2
2019-02-19 22:20:33 +03:00
, proto3-suite
, proto3-wire
2019-02-19 22:31:16 +03:00
common executable-flags
ghc-options: -threaded -rtsopts "-with-rtsopts=-N -A4m -n2m"
2019-06-14 16:35:18 +03:00
common ghc-warnings
ghc-options: -Wall -Wmissing-export-lists -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -Wno-name-shadowing
2015-11-18 01:44:16 +03:00
library
2019-06-14 16:35:18 +03:00
import: haskell, dependencies, ghc-warnings
2015-11-18 01:44:16 +03:00
hs-source-dirs: src
exposed-modules:
2017-11-27 22:32:13 +03:00
-- Analyses & term annotations
Analysis.Abstract.Caching.FlowInsensitive
, Analysis.Abstract.Caching.FlowSensitive
, Analysis.Abstract.Collecting
, Analysis.Abstract.Dead
, Analysis.Abstract.Graph
, Analysis.Abstract.Tracing
, Analysis.ConstructorName
, Analysis.CyclomaticComplexity
, Analysis.TOCSummary
2018-11-02 00:49:35 +03:00
, Analysis.Decorator
, Analysis.HasTextElement
, Analysis.PackageDef
-- Semantic assignment
2017-11-27 22:32:13 +03:00
, Assigning.Assignment
, Assigning.Assignment.Deterministic
, Assigning.Assignment.Table
-- Control structures & interfaces for abstract interpretation
, Control.Abstract
, Control.Abstract.Context
, Control.Abstract.Evaluator
, Control.Abstract.Heap
2018-05-28 22:09:10 +03:00
, Control.Abstract.Hole
, Control.Abstract.Modules
2018-05-18 17:11:19 +03:00
, Control.Abstract.Primitive
, Control.Abstract.PythonPackage
, Control.Abstract.Roots
2018-09-11 01:50:40 +03:00
, Control.Abstract.ScopeGraph
2018-03-02 22:45:56 +03:00
, Control.Abstract.Value
-- Effects
, Control.Effect.Interpose
, Control.Effect.REPL
2018-09-14 19:47:21 +03:00
, Control.Rewriting
-- Datatypes for abstract interpretation
, Data.Abstract.Address.Hole
2018-08-10 20:31:55 +03:00
, Data.Abstract.Address.Monovariant
, Data.Abstract.Address.Precise
2018-08-08 02:50:55 +03:00
, Data.Abstract.BaseError
2018-04-25 22:44:44 +03:00
, Data.Abstract.Declarations
, Data.Abstract.Evaluatable
, Data.Abstract.FreeVariables
2019-01-15 23:27:09 +03:00
, Data.Abstract.AccessControls.Class
, Data.Abstract.AccessControls.Instances
2018-03-15 03:42:59 +03:00
, Data.Abstract.Heap
2017-12-01 21:57:15 +03:00
, Data.Abstract.Live
2018-03-22 00:59:16 +03:00
, Data.Abstract.Module
, Data.Abstract.ModuleTable
2018-05-18 19:43:28 +03:00
, Data.Abstract.Name
2018-03-14 17:36:56 +03:00
, Data.Abstract.Number
, Data.Abstract.Package
, Data.Abstract.Path
2018-08-29 20:47:44 +03:00
, Data.Abstract.ScopeGraph
, Data.Abstract.Value.Abstract
, Data.Abstract.Value.Concrete
, Data.Abstract.Value.Type
-- General datatype definitions & generic algorithms
, Data.Algebra
, Data.AST
2017-06-24 17:00:40 +03:00
, Data.Blob
, Data.Blob.IO
2017-09-27 19:41:41 +03:00
, Data.Diff
, Data.Duration
2017-08-06 19:29:28 +03:00
, Data.Error
, Data.Flag
, Data.Functor.Both
, Data.Functor.Classes.Generic
2018-05-11 19:04:26 +03:00
, Data.Graph
2018-09-07 01:12:12 +03:00
, Data.Graph.ControlFlowVertex
, Data.Handle
, Data.History
2018-11-17 00:09:11 +03:00
, Data.ImportPath
2017-09-09 19:15:22 +03:00
, Data.JSON.Fields
2017-11-27 22:17:48 +03:00
, Data.Language
, Data.Location
2018-03-07 20:22:52 +03:00
, Data.Map.Monoidal
2017-09-27 19:29:07 +03:00
, Data.Patch
, Data.Project
, Data.Quieterm
2017-06-24 16:46:28 +03:00
, Data.Range
, Data.Reprinting.Errors
, Data.Reprinting.Fragment
, Data.Reprinting.Operator
, Data.Reprinting.Scope
, Data.Reprinting.Splice
, Data.Reprinting.Token
2018-03-21 23:40:56 +03:00
, Data.Semigroup.App
, Data.Scientific.Exts
, Data.Source
, Data.Span
-- À la carte syntax types
, Data.Syntax
2017-03-26 22:34:44 +03:00
, Data.Syntax.Comment
2017-03-27 00:31:10 +03:00
, Data.Syntax.Declaration
, Data.Syntax.Directive
, Data.Syntax.Expression
, Data.Syntax.Literal
2017-03-27 00:31:50 +03:00
, Data.Syntax.Statement
2017-03-29 23:23:02 +03:00
, Data.Syntax.Type
, Data.Tag
2017-09-27 19:37:37 +03:00
, Data.Term
-- Diffing algorithms & interpretation thereof
2017-11-27 19:41:50 +03:00
, Diffing.Algorithm
2017-11-27 19:51:39 +03:00
, Diffing.Algorithm.RWS
, Diffing.Algorithm.RWS.FeatureVector
2017-11-27 19:48:39 +03:00
, Diffing.Algorithm.SES
, Diffing.Interpreter
-- Language-specific grammar/syntax types, & assignments
2017-10-11 01:24:25 +03:00
, Language.Markdown.Assignment
, Language.Markdown.Syntax
2017-10-11 20:12:32 +03:00
, Language.Go.Assignment
, Language.Go.Syntax
2017-11-21 23:48:29 +03:00
, Language.Go.Type
, Language.Haskell.Assignment
, Language.Haskell.Syntax
, Language.Haskell.Syntax.Constructor
, Language.Haskell.Syntax.Haskell
, Language.Haskell.Syntax.Identifier
, Language.Haskell.Syntax.Pattern
, Language.Haskell.Syntax.QuasiQuote
, Language.Haskell.Syntax.Type
2017-10-11 01:14:57 +03:00
, Language.JSON.Assignment
2018-08-22 02:15:08 +03:00
, Language.JSON.PrettyPrint
2017-10-11 01:36:09 +03:00
, Language.Ruby.Assignment
2018-08-22 02:15:08 +03:00
, Language.Ruby.PrettyPrint
2018-08-28 19:12:44 +03:00
, Language.Ruby.Syntax
, Language.TSX.Assignment
, Language.TSX.Syntax
, Language.TSX.Syntax.JSX
2017-10-11 01:55:42 +03:00
, Language.TypeScript.Assignment
2018-07-20 00:05:44 +03:00
, Language.TypeScript.Resolution
, Language.TypeScript.Syntax
2018-10-18 20:50:07 +03:00
, Language.TypeScript.Syntax.Import
, Language.TypeScript.Syntax.JavaScript
, Language.TypeScript.Syntax.TypeScript
2018-10-18 20:50:07 +03:00
, Language.TypeScript.Syntax.Types
2017-12-15 22:14:08 +03:00
, Language.PHP.Assignment
, Language.PHP.Syntax
2017-10-11 01:26:29 +03:00
, Language.Python.Assignment
, Language.Python.PrettyPrint
2017-05-12 02:45:05 +03:00
, Language.Python.Syntax
2018-03-16 00:57:06 +03:00
, Language.Java.Assignment
, Language.Java.Syntax
, Numeric.Exts
-- Parser glue
2017-11-27 21:24:45 +03:00
, Parsing.CMark
, Parsing.Parser
2017-11-27 21:24:45 +03:00
, Parsing.TreeSitter
-- Rendering formats
, Rendering.Graph
2017-11-27 21:30:38 +03:00
, Rendering.JSON
, Rendering.TOC
, Reprinting.Tokenize
, Reprinting.Translate
2018-08-03 19:47:54 +03:00
, Reprinting.Typeset
2018-07-31 19:44:20 +03:00
, Reprinting.Pipeline
-- High-level flow & operational functionality (logging, stats, etc.)
, Semantic.Analysis
-- API
, Semantic.Api
2019-03-01 23:27:13 +03:00
, Semantic.Api.Bridge
2019-04-12 21:40:03 +03:00
, Semantic.Api.Diffs
, Semantic.Api.LegacyTypes
, Semantic.Api.Symbols
, Semantic.Api.Terms
, Semantic.Api.TOCSummaries
, Semantic.Api.V1.CodeAnalysisPB
, Semantic.AST
, Semantic.CLI
2018-06-08 20:48:38 +03:00
, Semantic.Config
2018-04-04 18:23:21 +03:00
, Semantic.Distribute
2018-06-07 02:17:44 +03:00
, Semantic.Env
2019-04-12 21:40:03 +03:00
, Semantic.Git
2018-04-09 20:57:12 +03:00
, Semantic.Graph
2017-11-27 21:09:03 +03:00
, Semantic.IO
, Semantic.REPL
, Semantic.Resolution
2017-05-29 20:11:17 +03:00
, Semantic.Task
, Semantic.Task.Files
, Semantic.Telemetry
2018-06-14 02:39:13 +03:00
, Semantic.Telemetry.AsyncQueue
, Semantic.Telemetry.Error
2018-06-14 02:39:13 +03:00
, Semantic.Telemetry.Log
, Semantic.Telemetry.Stat
2018-09-14 00:20:42 +03:00
, Semantic.Timeout
, Semantic.Util
, Semantic.Util.Pretty
, Semantic.Version
-- Serialization
, Serializing.Format
, Serializing.SExpression
2018-10-31 18:34:38 +03:00
, Tags.Taggable
, Tags.Tagging
-- Custom Prelude
2018-05-23 21:04:15 +03:00
, Prologue
2019-06-10 22:03:47 +03:00
autogen-modules: Paths_semantic
other-modules: Paths_semantic
build-depends: base >= 4.12 && < 5
, ansi-terminal >= 0.8.2 && <1
, array ^>= 0.5.3.0
, attoparsec ^>= 0.13.2.2
, cmark-gfm == 0.1.8
, cryptohash ^>= 0.11.9
, deepseq ^>= 1.4.4.0
, directory-tree ^>= 0.12.1
, generic-monoid ^>= 0.1.0.0
, ghc-prim ^>= 0.5.3
, gitrev ^>= 1.3.1
, haskeline ^>= 0.7.5.0
, hostname ^>= 1.0
, hscolour ^>= 1.24.4
, http-client ^>= 0.6.2
, http-client-tls ^>= 0.3.5.3
, http-types ^>= 0.12.3
, http-media ^>= 0.7.1.3
, kdt ^>= 0.2.4
, lens ^>= 4.17
, mersenne-random-pure64 ^>= 0.2.2.0
, network-uri ^>= 2.6.1.0
, optparse-applicative ^>= 0.14.3.0
, parallel ^>= 3.2.2.0
, parsers ^>= 0.12.9
, prettyprinter ^>= 1.2.1
, pretty-show ^>= 1.9.5
, profunctors ^>= 5.3
, reducers ^>= 3.12.3
, semigroupoids ^>= 5.3.2
, servant ^>= 0.15
, split ^>= 0.2.3.3
, stm-chans ^>= 3.0.0.4
, template-haskell ^>= 2.14
, time ^>= 1.8.0.2
, unliftio-core ^>= 0.1.2.0
, unordered-containers ^>= 0.2.9.0
, vector ^>= 0.12.0.2
, tree-sitter-go ^>= 0.1.0.0
, tree-sitter-haskell ^>= 0.1.0.0
, tree-sitter-json ^>= 0.1.0.0
, tree-sitter-php ^>= 0.1.0.0
, tree-sitter-python ^>= 0.1.0.1
, tree-sitter-ruby ^>= 0.1.0.0
, tree-sitter-typescript ^>= 0.1.0.0
, tree-sitter-tsx ^>= 0.1.0.0
, tree-sitter-java ^>= 0.1.0.0
if flag(release)
2019-02-11 23:08:24 +03:00
cpp-options: -DCOMPUTE_GIT_SHA
else
2019-06-10 22:03:47 +03:00
ghc-options: +RTS -A128m -n2m -RTS
2015-11-18 01:44:16 +03:00
2017-04-03 19:28:53 +03:00
executable semantic
2019-02-19 22:31:16 +03:00
import: haskell, dependencies, executable-flags
2016-10-06 02:17:46 +03:00
hs-source-dirs: app
main-is: Main.hs
if flag(release)
cpp-options: -DCOMPUTE_GIT_SHA
2016-10-06 02:17:46 +03:00
build-depends: base
2018-02-26 21:16:56 +03:00
, semantic
2016-10-06 02:17:46 +03:00
2016-09-15 00:12:06 +03:00
test-suite test
2019-06-14 16:35:18 +03:00
import: haskell, dependencies, executable-flags, ghc-warnings
2015-11-18 01:44:16 +03:00
type: exitcode-stdio-1.0
hs-source-dirs: test
main-is: Spec.hs
2018-05-07 21:20:56 +03:00
other-modules: Analysis.Go.Spec
, Analysis.PHP.Spec
, Analysis.Python.Spec
2018-03-14 02:19:26 +03:00
, Analysis.Ruby.Spec
2018-03-10 02:54:52 +03:00
, Analysis.TypeScript.Spec
2018-05-07 21:20:56 +03:00
, Assigning.Assignment.Spec
2018-05-07 21:21:05 +03:00
, Control.Abstract.Evaluator.Spec
, Data.Abstract.Path.Spec
2018-10-31 20:19:43 +03:00
, Data.Abstract.Name.Spec
2018-07-20 16:52:43 +03:00
, Data.Diff.Spec
, Data.Functor.Classes.Generic.Spec
, Data.Functor.Listable
2018-10-31 19:20:38 +03:00
, Data.Graph.Spec
2018-07-20 16:52:43 +03:00
, Data.Mergeable
2018-10-31 19:46:52 +03:00
, Data.Range.Spec
, Data.Scientific.Spec
2018-10-31 22:47:30 +03:00
, Data.Semigroup.App.Spec
2017-11-27 21:49:52 +03:00
, Data.Source.Spec
2017-11-27 22:02:03 +03:00
, Data.Term.Spec
2017-11-27 21:48:43 +03:00
, Diffing.Algorithm.RWS.Spec
2017-11-27 21:51:05 +03:00
, Diffing.Algorithm.SES.Spec
2017-11-27 22:03:45 +03:00
, Diffing.Interpreter.Spec
2018-07-16 18:07:40 +03:00
, Graphing.Calls.Spec
2017-11-27 22:06:12 +03:00
, Integration.Spec
, Numeric.Spec
, Parsing.Spec
2018-07-31 17:43:46 +03:00
, Reprinting.Spec
2018-12-12 01:21:39 +03:00
, Rewriting.Go.Spec
2018-12-12 01:36:42 +03:00
, Rewriting.JSON.Spec
2018-12-13 20:04:06 +03:00
, Rewriting.Python.Spec
2017-11-27 22:04:58 +03:00
, Rendering.TOC.Spec
2017-11-27 22:00:53 +03:00
, Semantic.Spec
2017-11-27 21:57:25 +03:00
, Semantic.CLI.Spec
2017-11-27 21:52:48 +03:00
, Semantic.IO.Spec
2017-11-27 21:58:23 +03:00
, Semantic.Stat.Spec
2018-11-02 23:55:30 +03:00
, Tags.Spec
, SpecHelpers
, Test.Hspec.LeanCheck
, Generators
2019-02-19 22:20:33 +03:00
build-depends: semantic
, tree-sitter-json
2019-06-12 19:37:40 +03:00
, Glob ^>= 0.10.0
, hedgehog ^>= 1
, hspec >= 2.6 && <3
, hspec-core >= 2.6 && <3
, hspec-expectations ^>= 0.8.2
, tasty ^>= 1.2.3
, tasty-golden ^>= 2.3.2
, tasty-hedgehog ^>= 1.0.0.1
, tasty-hspec ^>= 1.1.5.1
, HUnit ^>= 1.6.0.0
, leancheck >= 0.8 && <1
2019-06-12 19:37:40 +03:00
, temporary ^>= 1.3
if flag(release)
2019-02-19 22:31:16 +03:00
ghc-options: -dynamic
2015-11-18 01:44:16 +03:00
test-suite parse-examples
import: haskell, dependencies, executable-flags
type: exitcode-stdio-1.0
hs-source-dirs: test
main-is: Examples.hs
2019-02-19 22:20:33 +03:00
build-depends: semantic
2019-04-12 22:54:12 +03:00
, Glob
2019-06-12 19:37:40 +03:00
, hspec
, hspec-core
, hspec-expectations
2018-03-08 03:34:20 +03:00
benchmark evaluation
2019-02-19 22:31:16 +03:00
import: haskell, executable-flags
Add NFData instances to enable more accurate benchmarking. Because we're getting serious about benchmarking in the run-up to Windrose, it's time to bring in the `deepseq` package to ensure that benchmarks can fully evaluate the result of a test case. The `deepseq` package provides an `NFData` typeclass: ``` class NFData a where rnf :: a -> () ``` Instances use the `seq` combinator to ensure that the argument to `rnf` is fully evaluated, returning (). If there is a `Generic` instance for `a`, the implementation can be omitted. This patch adds NFData for every syntax node, graph vertex, environment data structures, and exceptions. It is long, but the work is very straightforward, so don't panick. The benchmark suite (`stack bench`) now produces more accurate results. The benchmarks previously mimicked `rnf` by calling `show` on the result of an evaluation or graph construction; now that we have actual `NFData` instances we can use the `nfIO` combinator from criterion. This has sped up the evaluation benchmarks and reduced their memory consumption, while it has slowed down the call graph benchmarks, as those benchmarks weren't evaluating the whole of the graph. Unfortunately, this patch increases compile times, as we have to derive a few more Generic instances. I wish this weren't the case, but there's little we can do about it now. In the future I have some plans for how to reduce compile time, and I bet that those gains will at least nullify the speed hit from this patch. Now that we have NFData instances for every data type, we can start benchmarking assignments, in preparation for fixing #2205. This patch also pulls in updates to `effects` and `fastsum` that add appropriate NFData instances for the data they vend.
2018-10-17 21:08:47 +03:00
hs-source-dirs: bench/evaluation
2018-05-21 18:17:11 +03:00
type: exitcode-stdio-1.0
main-is: Main.hs
2019-06-10 22:03:47 +03:00
ghc-options: -static
2018-05-21 18:17:11 +03:00
build-depends: base
2019-06-12 19:37:40 +03:00
, criterion ^>= 1.5
2018-05-21 18:17:11 +03:00
, semantic
2018-03-08 03:34:20 +03:00
2015-11-18 01:44:16 +03:00
source-repository head
type: git
2018-02-26 21:16:56 +03:00
location: https://github.com/github/semantic