2018-02-26 21:16:56 +03:00
|
|
|
name: semantic
|
2018-05-18 23:31:05 +03:00
|
|
|
version: 0.4.0
|
2018-09-17 18:21:21 +03:00
|
|
|
synopsis: Framework and service for analyzing and diffing untrusted code.
|
2015-11-18 01:44:16 +03:00
|
|
|
description: Please see README.md
|
2018-02-26 21:16:56 +03:00
|
|
|
homepage: http://github.com/github/semantic#readme
|
2015-11-18 01:44:16 +03:00
|
|
|
author: Rob Rix, Josh Vera
|
2015-11-18 01:52:41 +03:00
|
|
|
maintainer: rob.rix@github.com
|
2016-01-05 19:26:58 +03:00
|
|
|
copyright: 2016 GitHub
|
2015-11-18 01:44:16 +03:00
|
|
|
category: Web
|
2017-07-23 17:34:30 +03:00
|
|
|
build-type: Simple
|
2015-11-18 01:44:16 +03:00
|
|
|
-- extra-source-files:
|
|
|
|
cabal-version: >=1.10
|
|
|
|
|
2018-05-23 00:18:03 +03:00
|
|
|
flag release
|
|
|
|
description: Build with optimizations on (for CI or deployment builds)
|
|
|
|
default: False
|
|
|
|
|
2015-11-18 01:44:16 +03:00
|
|
|
library
|
|
|
|
hs-source-dirs: src
|
2017-11-27 22:28:28 +03:00
|
|
|
exposed-modules:
|
2017-11-27 22:32:13 +03:00
|
|
|
-- Analyses & term annotations
|
2018-09-18 17:27:47 +03:00
|
|
|
Analysis.Abstract.Caching.FlowInsensitive
|
|
|
|
, Analysis.Abstract.Caching.FlowSensitive
|
2017-12-01 03:35:35 +03:00
|
|
|
, Analysis.Abstract.Collecting
|
2017-12-01 02:49:19 +03:00
|
|
|
, Analysis.Abstract.Dead
|
2018-05-02 01:10:25 +03:00
|
|
|
, Analysis.Abstract.Graph
|
2017-12-01 02:57:56 +03:00
|
|
|
, Analysis.Abstract.Tracing
|
2017-12-01 01:16:26 +03:00
|
|
|
, Analysis.ConstructorName
|
2017-11-27 22:52:27 +03:00
|
|
|
, Analysis.CyclomaticComplexity
|
2018-11-08 19:33:26 +03:00
|
|
|
, Analysis.TOCSummary
|
2018-11-02 00:49:35 +03:00
|
|
|
, Analysis.Decorator
|
|
|
|
, Analysis.HasTextElement
|
2018-03-26 22:02:27 +03:00
|
|
|
, Analysis.PackageDef
|
2017-11-27 22:28:28 +03:00
|
|
|
-- Semantic assignment
|
2017-11-27 22:32:13 +03:00
|
|
|
, Assigning.Assignment
|
2018-06-27 21:27:15 +03:00
|
|
|
, Assigning.Assignment.Deterministic
|
2017-11-27 21:19:20 +03:00
|
|
|
, Assigning.Assignment.Table
|
2018-03-01 19:46:32 +03:00
|
|
|
-- Control structures & interfaces for abstract interpretation
|
2018-05-07 18:51:56 +03:00
|
|
|
, Control.Abstract
|
2018-05-07 19:14:14 +03:00
|
|
|
, Control.Abstract.Context
|
2018-03-01 19:46:32 +03:00
|
|
|
, Control.Abstract.Evaluator
|
2018-05-07 18:49:59 +03:00
|
|
|
, Control.Abstract.Heap
|
2018-05-28 22:09:10 +03:00
|
|
|
, Control.Abstract.Hole
|
2018-05-08 23:59:25 +03:00
|
|
|
, Control.Abstract.Modules
|
2018-05-18 17:11:19 +03:00
|
|
|
, Control.Abstract.Primitive
|
2018-08-02 01:18:33 +03:00
|
|
|
, Control.Abstract.PythonPackage
|
2018-05-07 18:58:30 +03:00
|
|
|
, 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
|
2018-10-29 16:52:48 +03:00
|
|
|
-- Effects
|
|
|
|
, Control.Effect.Interpose
|
2018-10-30 21:55:23 +03:00
|
|
|
, Control.Effect.REPL
|
2018-10-30 18:01:28 +03:00
|
|
|
-- Matching and rewriting DSLs
|
|
|
|
, Control.Matching
|
2018-09-14 19:47:21 +03:00
|
|
|
, Control.Rewriting
|
2018-03-01 19:47:21 +03:00
|
|
|
-- Datatypes for abstract interpretation
|
2018-08-13 16:35:37 +03:00
|
|
|
, Data.Abstract.Address.Hole
|
2018-08-10 20:31:55 +03:00
|
|
|
, Data.Abstract.Address.Located
|
|
|
|
, 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
|
2018-03-01 19:54:05 +03:00
|
|
|
, Data.Abstract.Evaluatable
|
2017-12-01 02:02:14 +03:00
|
|
|
, Data.Abstract.FreeVariables
|
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
|
2018-03-06 22:17:32 +03:00
|
|
|
, 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
|
2018-03-30 18:34:42 +03:00
|
|
|
, Data.Abstract.Package
|
2018-03-16 19:27:08 +03:00
|
|
|
, Data.Abstract.Path
|
2018-05-18 17:36:23 +03:00
|
|
|
, Data.Abstract.Ref
|
2018-08-29 20:47:44 +03:00
|
|
|
, Data.Abstract.ScopeGraph
|
2018-07-04 16:21:51 +03:00
|
|
|
, Data.Abstract.Value.Abstract
|
2018-07-03 21:22:26 +03:00
|
|
|
, Data.Abstract.Value.Concrete
|
2018-07-04 17:46:13 +03:00
|
|
|
, Data.Abstract.Value.Type
|
2018-03-01 19:47:21 +03:00
|
|
|
-- General datatype definitions & generic algorithms
|
2017-11-27 22:36:20 +03:00
|
|
|
, Data.Algebra
|
2017-11-27 21:45:37 +03:00
|
|
|
, Data.AST
|
2017-06-24 17:00:40 +03:00
|
|
|
, Data.Blob
|
2017-09-27 19:41:41 +03:00
|
|
|
, Data.Diff
|
2018-09-14 00:51:32 +03:00
|
|
|
, Data.Duration
|
2017-08-06 19:29:28 +03:00
|
|
|
, Data.Error
|
2018-10-23 22:28:21 +03:00
|
|
|
, Data.File
|
2016-02-29 05:29:59 +03:00
|
|
|
, Data.Functor.Both
|
2017-11-30 18:14:21 +03:00
|
|
|
, 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
|
2018-09-07 03:27:13 +03:00
|
|
|
, Data.Graph.TermVertex
|
|
|
|
, Data.Graph.DiffVertex
|
2018-10-23 22:28:21 +03:00
|
|
|
, Data.Handle
|
2018-08-02 20:03:55 +03:00
|
|
|
, 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
|
2018-09-21 23:46:25 +03:00
|
|
|
, Data.Location
|
2018-03-07 20:22:52 +03:00
|
|
|
, Data.Map.Monoidal
|
2018-09-11 20:32:29 +03:00
|
|
|
, Data.Proto.DiffTree
|
2018-09-10 21:43:42 +03:00
|
|
|
, Data.Proto.ParseTree
|
2017-09-27 19:29:07 +03:00
|
|
|
, Data.Patch
|
2018-05-16 18:38:00 +03:00
|
|
|
, Data.Project
|
2018-08-01 22:06:26 +03:00
|
|
|
, Data.Quieterm
|
2017-06-24 16:46:28 +03:00
|
|
|
, Data.Range
|
2018-08-22 21:30:03 +03:00
|
|
|
, Data.Reprinting.Errors
|
2018-09-18 18:38:10 +03:00
|
|
|
, Data.Reprinting.Fragment
|
2018-09-19 18:54:12 +03:00
|
|
|
, Data.Reprinting.Operator
|
|
|
|
, Data.Reprinting.Scope
|
2018-08-17 19:10:14 +03:00
|
|
|
, Data.Reprinting.Splice
|
2018-09-19 18:54:12 +03:00
|
|
|
, Data.Reprinting.Token
|
2018-03-21 23:40:56 +03:00
|
|
|
, Data.Semigroup.App
|
2018-04-04 00:02:56 +03:00
|
|
|
, Data.Scientific.Exts
|
2017-06-24 16:59:41 +03:00
|
|
|
, Data.Source
|
2017-06-24 16:41:51 +03:00
|
|
|
, Data.Span
|
2017-11-27 22:28:28 +03:00
|
|
|
-- À la carte syntax types
|
2017-03-26 19:02:40 +03:00
|
|
|
, Data.Syntax
|
2017-03-26 22:34:44 +03:00
|
|
|
, Data.Syntax.Comment
|
2017-03-27 00:31:10 +03:00
|
|
|
, Data.Syntax.Declaration
|
2018-04-26 23:43:49 +03:00
|
|
|
, Data.Syntax.Directive
|
2017-03-29 22:47:12 +03:00
|
|
|
, Data.Syntax.Expression
|
2017-03-26 22:30:33 +03:00
|
|
|
, 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
|
2017-09-27 19:37:37 +03:00
|
|
|
, Data.Term
|
2017-11-27 22:28:28 +03:00
|
|
|
-- 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
|
2017-11-27 19:45:08 +03:00
|
|
|
, Diffing.Interpreter
|
2017-11-27 22:28:28 +03:00
|
|
|
-- Language-specific grammar/syntax types, & assignments
|
2017-10-11 01:24:25 +03:00
|
|
|
, Language.Markdown.Assignment
|
2017-06-07 23:18:49 +03:00
|
|
|
, Language.Markdown.Syntax
|
2017-08-23 00:48:18 +03:00
|
|
|
, Language.Go.Grammar
|
2017-10-11 20:12:32 +03:00
|
|
|
, Language.Go.Assignment
|
2017-04-12 17:53:04 +03:00
|
|
|
, Language.Go.Syntax
|
2017-11-21 23:48:29 +03:00
|
|
|
, Language.Go.Type
|
2018-05-23 21:32:15 +03:00
|
|
|
, Language.Haskell.Grammar
|
|
|
|
, Language.Haskell.Assignment
|
|
|
|
, Language.Haskell.Syntax
|
2018-10-18 01:53:59 +03:00
|
|
|
, 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-07-17 19:52:50 +03:00
|
|
|
, Language.JSON.Grammar
|
2017-10-11 01:14:57 +03:00
|
|
|
, Language.JSON.Assignment
|
2018-08-22 02:15:08 +03:00
|
|
|
, Language.JSON.PrettyPrint
|
2018-08-28 01:06:51 +03:00
|
|
|
, Language.MiniRuby.Assignment
|
2018-08-28 19:12:29 +03:00
|
|
|
, Language.MiniPython.Assignment
|
2017-05-17 21:08:54 +03:00
|
|
|
, Language.Ruby.Grammar
|
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
|
2017-10-11 01:55:42 +03:00
|
|
|
, Language.TypeScript.Assignment
|
2017-08-08 18:19:42 +03:00
|
|
|
, Language.TypeScript.Grammar
|
2018-07-20 00:05:44 +03:00
|
|
|
, Language.TypeScript.Resolution
|
2017-04-12 17:51:31 +03:00
|
|
|
, Language.TypeScript.Syntax
|
2018-07-20 00:23:44 +03:00
|
|
|
, Language.TypeScript.Syntax.JavaScript
|
2018-07-20 00:05:44 +03:00
|
|
|
, Language.TypeScript.Syntax.JSX
|
2018-07-20 00:23:44 +03:00
|
|
|
, Language.TypeScript.Syntax.TypeScript
|
2017-12-15 22:14:08 +03:00
|
|
|
, Language.PHP.Assignment
|
|
|
|
, Language.PHP.Grammar
|
|
|
|
, Language.PHP.Syntax
|
2017-10-11 01:26:29 +03:00
|
|
|
, Language.Python.Assignment
|
2017-05-17 22:32:07 +03:00
|
|
|
, Language.Python.Grammar
|
2018-08-28 19:14:48 +03:00
|
|
|
, 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.Grammar
|
|
|
|
, Language.Java.Syntax
|
2018-08-15 00:15:18 +03:00
|
|
|
, Matching.Core
|
2018-06-25 18:55:32 +03:00
|
|
|
, Numeric.Exts
|
2017-11-27 22:28:28 +03:00
|
|
|
-- Parser glue
|
2017-11-27 21:24:45 +03:00
|
|
|
, Parsing.CMark
|
2017-11-27 22:28:28 +03:00
|
|
|
, Parsing.Parser
|
2017-11-27 21:24:45 +03:00
|
|
|
, Parsing.TreeSitter
|
2018-02-26 21:16:56 +03:00
|
|
|
, Paths_semantic
|
2017-11-27 22:28:28 +03:00
|
|
|
-- Rendering formats
|
2018-05-11 19:57:20 +03:00
|
|
|
, Rendering.Graph
|
2017-11-27 21:30:38 +03:00
|
|
|
, Rendering.JSON
|
|
|
|
, Rendering.Renderer
|
2018-01-17 23:54:17 +03:00
|
|
|
, Rendering.Symbol
|
2017-11-27 21:30:38 +03:00
|
|
|
, Rendering.TOC
|
2018-08-03 20:15:14 +03:00
|
|
|
, Reprinting.Tokenize
|
2018-08-03 19:23:47 +03:00
|
|
|
, Reprinting.Translate
|
2018-08-03 19:47:54 +03:00
|
|
|
, Reprinting.Typeset
|
2018-07-31 19:44:20 +03:00
|
|
|
, Reprinting.Pipeline
|
2017-11-27 22:28:28 +03:00
|
|
|
-- High-level flow & operational functionality (logging, stats, etc.)
|
2018-10-26 04:31:38 +03:00
|
|
|
, Semantic.Analysis
|
2018-05-14 21:57:19 +03:00
|
|
|
, Semantic.AST
|
2017-11-27 19:57:27 +03:00
|
|
|
, Semantic.CLI
|
2018-06-08 20:48:38 +03:00
|
|
|
, Semantic.Config
|
2018-04-04 22:17:01 +03:00
|
|
|
, Semantic.Diff
|
2018-04-04 18:23:21 +03:00
|
|
|
, Semantic.Distribute
|
2018-06-07 02:17:44 +03:00
|
|
|
, Semantic.Env
|
2018-04-09 20:57:12 +03:00
|
|
|
, Semantic.Graph
|
2017-11-27 21:09:03 +03:00
|
|
|
, Semantic.IO
|
2018-04-04 22:17:01 +03:00
|
|
|
, Semantic.Parse
|
2018-08-01 17:54:57 +03:00
|
|
|
, Semantic.REPL
|
2018-05-04 02:14:54 +03:00
|
|
|
, Semantic.Resolution
|
2017-05-29 20:11:17 +03:00
|
|
|
, Semantic.Task
|
2018-10-23 22:28:21 +03:00
|
|
|
, Semantic.Task.Files
|
2018-04-04 18:23:32 +03:00
|
|
|
, Semantic.Telemetry
|
2018-06-14 02:39:13 +03:00
|
|
|
, Semantic.Telemetry.AsyncQueue
|
|
|
|
, Semantic.Telemetry.Haystack
|
|
|
|
, Semantic.Telemetry.Log
|
|
|
|
, Semantic.Telemetry.Stat
|
2018-09-14 00:20:42 +03:00
|
|
|
, Semantic.Timeout
|
2017-08-28 19:48:36 +03:00
|
|
|
, Semantic.Util
|
2018-10-04 21:38:36 +03:00
|
|
|
, Semantic.Util.Pretty
|
2018-08-24 20:35:38 +03:00
|
|
|
, Semantic.Util.Rewriting
|
2018-06-14 02:39:01 +03:00
|
|
|
, Semantic.Version
|
2018-05-11 20:27:09 +03:00
|
|
|
-- Serialization
|
2018-05-11 21:07:53 +03:00
|
|
|
, Serializing.DOT
|
2018-05-11 20:27:09 +03:00
|
|
|
, Serializing.Format
|
2018-05-11 21:41:10 +03:00
|
|
|
, Serializing.SExpression
|
2018-10-31 18:34:38 +03:00
|
|
|
, Tags.Taggable
|
2018-10-31 20:58:00 +03:00
|
|
|
, Tags.Tagging
|
2018-05-11 20:27:09 +03:00
|
|
|
-- Custom Prelude
|
2018-05-23 21:04:15 +03:00
|
|
|
, Prologue
|
2016-10-06 04:47:47 +03:00
|
|
|
build-depends: base >= 4.8 && < 5
|
|
|
|
, aeson
|
2018-02-07 20:54:15 +03:00
|
|
|
, algebraic-graphs
|
2017-05-19 23:03:44 +03:00
|
|
|
, ansi-terminal
|
2017-02-03 21:32:52 +03:00
|
|
|
, array
|
2017-04-22 01:40:37 +03:00
|
|
|
, async
|
2018-04-04 00:02:56 +03:00
|
|
|
, attoparsec
|
2016-03-18 03:07:28 +03:00
|
|
|
, bifunctors
|
2015-12-15 19:47:52 +03:00
|
|
|
, bytestring
|
2017-08-03 10:22:40 +03:00
|
|
|
, cmark-gfm
|
2015-11-18 02:03:25 +03:00
|
|
|
, containers
|
2018-06-08 20:12:45 +03:00
|
|
|
, cryptohash
|
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
|
|
|
, deepseq
|
2016-02-27 01:56:38 +03:00
|
|
|
, directory
|
2018-04-25 19:55:05 +03:00
|
|
|
, directory-tree
|
2018-05-02 22:59:22 +03:00
|
|
|
, fastsum
|
2016-02-17 00:09:58 +03:00
|
|
|
, filepath
|
2016-10-06 04:47:47 +03:00
|
|
|
, free
|
2017-02-24 21:28:44 +03:00
|
|
|
, freer-cofreer
|
2018-10-29 16:52:48 +03:00
|
|
|
, fused-effects
|
2017-10-27 02:04:56 +03:00
|
|
|
, ghc-prim
|
2016-10-06 19:03:06 +03:00
|
|
|
, gitrev
|
2017-10-17 19:48:27 +03:00
|
|
|
, Glob
|
2016-06-22 00:24:18 +03:00
|
|
|
, hashable
|
2018-08-03 16:25:52 +03:00
|
|
|
, haskeline
|
2018-05-23 16:00:29 +03:00
|
|
|
, hscolour
|
2018-06-08 20:12:45 +03:00
|
|
|
, http-client
|
|
|
|
, http-client-tls
|
|
|
|
, http-types
|
2016-06-24 18:10:18 +03:00
|
|
|
, kdt
|
2018-08-06 23:33:50 +03:00
|
|
|
, machines
|
2017-02-03 23:27:37 +03:00
|
|
|
, mersenne-random-pure64
|
2016-10-06 04:47:47 +03:00
|
|
|
, mtl
|
2017-10-04 06:38:36 +03:00
|
|
|
, network
|
2017-10-04 19:34:44 +03:00
|
|
|
, network-uri
|
2016-10-06 04:47:47 +03:00
|
|
|
, optparse-applicative
|
2017-04-04 17:57:18 +03:00
|
|
|
, parallel
|
2017-08-06 18:21:35 +03:00
|
|
|
, parsers
|
2018-07-31 19:44:20 +03:00
|
|
|
, prettyprinter
|
2018-05-23 16:00:29 +03:00
|
|
|
, pretty-show
|
2018-09-14 19:47:21 +03:00
|
|
|
, profunctors
|
2016-10-06 04:47:47 +03:00
|
|
|
, recursion-schemes
|
2018-03-07 19:27:17 +03:00
|
|
|
, reducers
|
2018-03-07 22:26:15 +03:00
|
|
|
, scientific
|
2018-03-14 16:30:45 +03:00
|
|
|
, semigroupoids
|
2018-06-15 18:37:49 +03:00
|
|
|
, semilattices
|
2017-04-03 22:26:28 +03:00
|
|
|
, split
|
2017-07-21 19:13:50 +03:00
|
|
|
, stm-chans
|
2017-04-11 18:50:59 +03:00
|
|
|
, template-haskell
|
2015-12-15 19:47:52 +03:00
|
|
|
, text >= 1.2.1.3
|
2016-04-15 05:00:00 +03:00
|
|
|
, these
|
2017-07-23 21:12:13 +03:00
|
|
|
, time
|
2017-07-31 18:56:17 +03:00
|
|
|
, unix
|
2018-05-04 02:14:54 +03:00
|
|
|
, unordered-containers
|
2018-06-13 19:47:35 +03:00
|
|
|
, vector
|
2018-06-15 18:06:26 +03:00
|
|
|
, proto3-suite
|
|
|
|
, proto3-wire
|
2017-01-31 01:03:22 +03:00
|
|
|
, haskell-tree-sitter
|
2017-08-11 15:03:27 +03:00
|
|
|
, tree-sitter-go
|
2018-05-23 21:32:15 +03:00
|
|
|
, tree-sitter-haskell
|
2017-08-11 15:03:55 +03:00
|
|
|
, tree-sitter-json
|
2017-12-15 22:14:08 +03:00
|
|
|
, tree-sitter-php
|
2017-08-11 15:06:08 +03:00
|
|
|
, tree-sitter-python
|
2017-08-11 15:06:37 +03:00
|
|
|
, tree-sitter-ruby
|
2017-08-11 15:07:03 +03:00
|
|
|
, tree-sitter-typescript
|
2018-03-16 01:53:55 +03:00
|
|
|
, tree-sitter-java
|
2015-11-18 01:44:16 +03:00
|
|
|
default-language: Haskell2010
|
2018-03-22 19:23:11 +03:00
|
|
|
default-extensions: DataKinds
|
|
|
|
, DeriveFoldable
|
2018-03-16 20:15:59 +03:00
|
|
|
, DeriveFunctor
|
|
|
|
, DeriveGeneric
|
|
|
|
, DeriveTraversable
|
|
|
|
, FlexibleContexts
|
|
|
|
, FlexibleInstances
|
2018-10-22 21:01:44 +03:00
|
|
|
, MonadFailDesugaring
|
2018-03-22 19:23:11 +03:00
|
|
|
, MultiParamTypeClasses
|
2018-03-16 20:15:59 +03:00
|
|
|
, OverloadedStrings
|
|
|
|
, RecordWildCards
|
2018-03-22 19:23:11 +03:00
|
|
|
, StandaloneDeriving
|
2018-03-16 20:15:59 +03:00
|
|
|
, StrictData
|
2018-03-26 19:00:19 +03:00
|
|
|
, TypeApplications
|
2018-05-23 00:18:03 +03:00
|
|
|
if flag(release)
|
2018-10-18 00:16:19 +03:00
|
|
|
ghc-options: -Wall -Werror -Wmissing-export-lists -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -fno-warn-name-shadowing -O1 -j -DCOMPUTE_GIT_SHA
|
2018-05-23 00:18:03 +03:00
|
|
|
else
|
2018-10-18 04:05:20 +03:00
|
|
|
ghc-options: -Wall -Wmissing-export-lists -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -fno-warn-name-shadowing -O0 -j +RTS -A128m -n2m -RTS
|
2017-06-15 19:00:01 +03:00
|
|
|
ghc-prof-options: -fprof-auto
|
2015-11-18 01:44:16 +03:00
|
|
|
|
2017-04-03 19:28:53 +03:00
|
|
|
executable semantic
|
2016-10-06 02:17:46 +03:00
|
|
|
hs-source-dirs: app
|
|
|
|
main-is: Main.hs
|
2018-05-23 00:18:03 +03:00
|
|
|
if flag(release)
|
2018-12-05 19:25:12 +03:00
|
|
|
ghc-options: -threaded -rtsopts "-with-rtsopts=-N -A4m -n2m" -static -j -O1 -DCOMPUTE_GIT_SHA
|
2018-05-23 00:18:03 +03:00
|
|
|
else
|
2018-12-05 19:25:12 +03:00
|
|
|
ghc-options: -threaded -rtsopts "-with-rtsopts=-N -A4m -n2m" -j -O0 -dynamic
|
2016-10-06 02:17:46 +03:00
|
|
|
cc-options: -DU_STATIC_IMPLEMENTATION=1
|
|
|
|
cpp-options: -DU_STATIC_IMPLEMENTATION=1
|
|
|
|
build-depends: base
|
2018-02-26 21:16:56 +03:00
|
|
|
, semantic
|
2016-10-06 02:17:46 +03:00
|
|
|
default-language: Haskell2010
|
2017-07-28 21:37:02 +03:00
|
|
|
default-extensions: FlexibleInstances, OverloadedStrings, RecordWildCards
|
2016-10-06 02:17:46 +03:00
|
|
|
|
2016-09-15 00:12:06 +03:00
|
|
|
test-suite test
|
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
|
2018-03-20 00:42:00 +03:00
|
|
|
, Analysis.PHP.Spec
|
2018-03-10 02:16:07 +03:00
|
|
|
, 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
|
2018-09-14 20:08:08 +03:00
|
|
|
, Control.Rewriting.Spec
|
2018-04-18 00:13:01 +03:00
|
|
|
, 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
|
2017-11-30 18:24:48 +03:00
|
|
|
, Data.Functor.Classes.Generic.Spec
|
2017-09-09 16:44:57 +03:00
|
|
|
, 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
|
2018-04-04 00:02:56 +03:00
|
|
|
, 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
|
2018-03-27 23:14:30 +03:00
|
|
|
, Matching.Go.Spec
|
Give Control.Matching API better ergonomics.
Given that @tclem and I have found the matcher API frustrating, I've
taken a stab at improving its ergonomics, and I've found some success
in separating composition of matchers from predicate-based narrowing
thereof.
The biggest change here is the elimination of the old `match`
combinator, which proved to be clumsy in that it complected narrowing
and composition. Top-down matching combinators are now written with
the `need` combinator and the `>>>` combinator, which is more readable
and more versatile. Here's a matcher that accepts functions with
Python docstrings:
```haskell
docstringMatcher :: ( Decl.Function :< fs
, [] :< fs
, Lit.TextElement :< fs
, term ~ Term (Sum fs) ann
) => Matcher term term
docstringMatcher = target <*
(need Decl.functionBody
>>> narrow @[]
>>> mhead
>>> narrow @Lit.TextElement
>>> ensure Lit.isTripleQuoted))
```
Pretty readable, right? Each step of the tree regular expression -
choosing function bodies, ensuring said bodies are lists, examining
the first element, and choosing only TextElements containing
triple-quoted strings - is made implicit. The old way would have
looked something like this:
```haskell
docstringMatcher = target <* match Decl.functionBody
$ narrow
$ matchM listToMaybe
$ target <* ensure Lit.isTripleQuoted
```
which is a good deal more disorganized and less flexible
in the quite-common case of applying functions during a
matching pass. Separating the act of composition from
function application is a big win here.
Further comments are inline.
2018-11-03 02:25:29 +03:00
|
|
|
, Matching.Python.Spec
|
2018-06-25 18:55:32 +03:00
|
|
|
, Numeric.Spec
|
2018-06-05 19:07:47 +03:00
|
|
|
, Proto3.Roundtrip
|
2018-07-31 17:43:46 +03:00
|
|
|
, Reprinting.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
|
2017-04-19 19:12:19 +03:00
|
|
|
, SpecHelpers
|
2017-01-06 00:41:23 +03:00
|
|
|
, Test.Hspec.LeanCheck
|
2017-02-23 07:05:20 +03:00
|
|
|
build-depends: aeson
|
2018-07-16 18:07:40 +03:00
|
|
|
, algebraic-graphs
|
2018-05-23 00:01:17 +03:00
|
|
|
, async
|
2017-02-03 23:57:05 +03:00
|
|
|
, base
|
2016-03-22 01:53:57 +03:00
|
|
|
, bifunctors
|
2017-03-09 00:56:08 +03:00
|
|
|
, bytestring
|
2018-06-05 19:07:47 +03:00
|
|
|
, containers
|
2018-05-07 00:22:32 +03:00
|
|
|
, fastsum
|
2016-02-17 00:38:31 +03:00
|
|
|
, filepath
|
2017-07-28 21:37:02 +03:00
|
|
|
, free
|
2018-10-29 16:52:48 +03:00
|
|
|
, fused-effects
|
2016-02-17 00:38:31 +03:00
|
|
|
, Glob
|
2018-05-16 23:19:08 +03:00
|
|
|
, hashable
|
2017-04-18 18:06:24 +03:00
|
|
|
, haskell-tree-sitter
|
2017-02-17 19:27:51 +03:00
|
|
|
, hspec >= 2.4.1
|
2017-01-08 07:16:27 +03:00
|
|
|
, hspec-core
|
2016-10-06 04:47:47 +03:00
|
|
|
, hspec-expectations-pretty-diff
|
2017-02-14 17:57:21 +03:00
|
|
|
, HUnit
|
2017-01-08 07:16:27 +03:00
|
|
|
, leancheck
|
2018-09-12 01:54:37 +03:00
|
|
|
, machines
|
2016-05-21 07:07:35 +03:00
|
|
|
, mtl
|
2017-10-04 21:40:39 +03:00
|
|
|
, network
|
2018-06-05 19:07:47 +03:00
|
|
|
, proto3-suite
|
2018-06-05 19:32:24 +03:00
|
|
|
, proto3-wire
|
2016-08-05 03:42:39 +03:00
|
|
|
, recursion-schemes >= 4.1
|
2018-06-15 18:40:26 +03:00
|
|
|
, semilattices
|
2018-02-26 21:16:56 +03:00
|
|
|
, semantic
|
2018-11-30 02:38:32 +03:00
|
|
|
, scientific
|
2015-12-15 22:53:03 +03:00
|
|
|
, text >= 1.2.1.3
|
2016-04-15 05:00:00 +03:00
|
|
|
, these
|
2018-12-05 19:28:21 +03:00
|
|
|
if flag(release)
|
|
|
|
ghc-options: -threaded -rtsopts -with-rtsopts=-N -j -O0
|
|
|
|
else
|
|
|
|
ghc-options: -threaded -rtsopts -with-rtsopts=-N -j -O0 -dynamic
|
2015-11-18 01:44:16 +03:00
|
|
|
default-language: Haskell2010
|
2018-03-22 19:23:11 +03:00
|
|
|
default-extensions: DataKinds
|
|
|
|
, DeriveFunctor
|
|
|
|
, DeriveGeneric
|
|
|
|
, FlexibleContexts
|
|
|
|
, FlexibleInstances
|
2018-10-22 21:01:44 +03:00
|
|
|
, MonadFailDesugaring
|
2018-03-22 19:23:11 +03:00
|
|
|
, MultiParamTypeClasses
|
|
|
|
, OverloadedStrings
|
|
|
|
, RecordWildCards
|
|
|
|
, StandaloneDeriving
|
2018-03-26 19:00:19 +03:00
|
|
|
, TypeApplications
|
2015-11-18 01:44:16 +03:00
|
|
|
|
2018-05-21 18:17:11 +03:00
|
|
|
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
|
|
|
|
|
2018-09-18 01:49:18 +03:00
|
|
|
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
|
2018-10-29 16:52:48 +03:00
|
|
|
, fused-effects
|
2018-09-18 01:49:18 +03:00
|
|
|
, Glob
|
|
|
|
, hspec >= 2.4.1
|
|
|
|
, hspec-core
|
|
|
|
, hspec-expectations-pretty-diff
|
|
|
|
, process
|
|
|
|
, semantic
|
2018-09-18 02:46:45 +03:00
|
|
|
default-extensions: RecordWildCards
|
2018-09-18 23:00:31 +03:00
|
|
|
, FlexibleContexts
|
2018-09-18 01:49:18 +03:00
|
|
|
|
2018-03-08 03:34:20 +03:00
|
|
|
benchmark evaluation
|
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
|
2018-05-23 00:48:07 +03:00
|
|
|
ghc-options: -threaded -rtsopts "-with-rtsopts=-N -A4m -n2m -T" -static -j -O1
|
2018-05-21 18:17:11 +03:00
|
|
|
cc-options: -DU_STATIC_IMPLEMENTATION=1
|
|
|
|
cpp-options: -DU_STATIC_IMPLEMENTATION=1
|
|
|
|
default-language: Haskell2010
|
|
|
|
build-depends: base
|
|
|
|
, criterion
|
|
|
|
, 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
|