mirror of
https://github.com/github/semantic.git
synced 2024-11-23 08:27:56 +03:00
Merge remote-tracking branch 'origin/master' into test-precise-parsing
This commit is contained in:
commit
b2f10d0d6a
66
.github/workflows/haskell.yml
vendored
Normal file
66
.github/workflows/haskell.yml
vendored
Normal file
@ -0,0 +1,66 @@
|
||||
name: Haskell CI
|
||||
|
||||
on:
|
||||
# Trigger the workflow on push or pull request,
|
||||
# but only for the master branch
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: ghc ${{ matrix.ghc }}
|
||||
runs-on: ubuntu-16.04
|
||||
strategy:
|
||||
matrix:
|
||||
ghc: ["8.8.1"]
|
||||
cabal: ["3.0"]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
if: github.event.action == 'opened' || github.event.action == 'synchronize' || github.event.ref == 'refs/heads/master'
|
||||
|
||||
- uses: actions/setup-haskell@v1
|
||||
name: Setup Haskell
|
||||
with:
|
||||
ghc-version: ${{ matrix.ghc }}
|
||||
cabal-version: ${{ matrix.cabal }}
|
||||
|
||||
- uses: actions/cache@v1
|
||||
name: Cache ~/.cabal/packages
|
||||
with:
|
||||
path: ~/.cabal/packages
|
||||
key: ${{ runner.os }}-${{ matrix.ghc }}-cabal-packages
|
||||
|
||||
- uses: actions/cache@v1
|
||||
name: Cache ~/.cabal/store
|
||||
with:
|
||||
path: ~/.cabal/store
|
||||
key: ${{ runner.os }}-${{ matrix.ghc }}-cabal-store
|
||||
|
||||
- uses: actions/cache@v1
|
||||
name: Cache dist-newstyle
|
||||
with:
|
||||
path: dist-newstyle
|
||||
key: ${{ runner.os }}-${{ matrix.ghc }}-semantic-dist
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
cabal v2-update
|
||||
cabal v2-configure --disable-optimization --enable-benchmarks --enable-tests --write-ghc-environment-files=always -j2
|
||||
cabal v2-build --only-dependencies
|
||||
|
||||
- name: hlint
|
||||
run: |
|
||||
cabal install hlint --installdir=dist-newstyle
|
||||
dist-newstyle/hlint src semantic-python
|
||||
|
||||
- name: Build & test
|
||||
run: |
|
||||
cabal v2-build
|
||||
cabal v2-run semantic:test
|
||||
cabal v2-run semantic-core:test
|
||||
cabal v2-run semantic-python:test
|
||||
cd semantic-source; cabal v2-run semantic-source:test; cd ..
|
||||
cd semantic-source; cabal v2-run semantic-source:doctest -- src; cd ..
|
56
.travis.yml
56
.travis.yml
@ -1,56 +0,0 @@
|
||||
language: c
|
||||
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.cabal/packages
|
||||
- $HOME/.cabal/store
|
||||
- $TRAVIS_BUILD_DIR/dist-newstyle
|
||||
|
||||
before_cache:
|
||||
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/build-reports.log
|
||||
# remove files that are regenerated by 'cabal update'
|
||||
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/00-index.*
|
||||
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/*.json
|
||||
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.cache
|
||||
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar
|
||||
- rm -fv $HOME/.cabal/packages/hackage.haskell.org/01-index.tar.idx
|
||||
|
||||
- rm -rfv $HOME/.cabal/packages/head.hackage
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- compiler: "ghc-8.6.5"
|
||||
addons: {apt: {packages: [cabal-install-2.4,ghc-8.6.5], sources: [hvr-ghc]}}
|
||||
|
||||
before_install:
|
||||
- mkdir -p $HOME/.local/bin
|
||||
- curl -L -o /tmp/hlint.tar.gz "https://github.com/ndmitchell/hlint/releases/download/v2.2.3/hlint-2.2.3-x86_64-linux.tar.gz"
|
||||
- tar -xf /tmp/hlint.tar.gz -C /tmp
|
||||
- cp /tmp/hlint-2.2.3/hlint $HOME/.local/bin
|
||||
- cp -r /tmp/hlint-2.2.3/data $HOME/.local/bin
|
||||
- "PATH=/opt/ghc/bin:$HOME/local/bin:$PATH"
|
||||
- ghc --version
|
||||
- cabal --version
|
||||
- hlint --version
|
||||
|
||||
install:
|
||||
- cabal v2-update -v
|
||||
- cabal v2-configure --enable-tests --enable-benchmarks --disable-optimization --write-ghc-environment-files=always --jobs=2
|
||||
- cabal v2-build --only-dependencies
|
||||
|
||||
script:
|
||||
- hlint src semantic-python
|
||||
- cabal v2-build
|
||||
- cabal v2-run semantic:test
|
||||
- cabal v2-run semantic-core:test
|
||||
- cabal v2-run semantic-python:test
|
||||
- cd semantic-source; cabal v2-run semantic-source:test; cd ..
|
||||
- cd semantic-source; cabal v2-run semantic-source:doctest; cd ..
|
||||
# parse-examples is disabled because it slaughters our CI
|
||||
# - cabal v2-run semantic:parse-examples
|
||||
|
||||
# Any branch linked with a pull request will be built, as well as the non-PR
|
||||
# branches listed below:
|
||||
branches:
|
||||
only:
|
||||
- master
|
@ -1,5 +1,5 @@
|
||||
# Put protoc and twirp tooling in its own image
|
||||
FROM haskell:8.6 as haskell
|
||||
FROM haskell:8.8 as haskell
|
||||
RUN cabal v2-update && \
|
||||
cabal v2-install proto-lens-protoc
|
||||
RUN which proto-lens-protoc
|
||||
@ -19,7 +19,7 @@ COPY --from=haskell /root/.cabal/bin/proto-lens-protoc /usr/local/bin/proto-lens
|
||||
ENTRYPOINT ["/protobuf/bin/protoc", "-I/protobuf", "--plugin=protoc-gen-haskell=/usr/local/bin/proto-lens-protoc"]
|
||||
|
||||
# Build semantic
|
||||
FROM haskell:8.6 as build
|
||||
FROM haskell:8.8 as build
|
||||
WORKDIR /build
|
||||
|
||||
# Build all of semantic
|
||||
|
@ -96,7 +96,7 @@ Available options:
|
||||
|
||||
## Development
|
||||
|
||||
`semantic` requires at least GHC 8.6.4 and Cabal 2.4. We strongly recommend using [`ghcup`][ghcup] to sandbox GHC versions, as GHC packages installed through your OS's package manager may not install statically-linked versions of the GHC boot libraries. `semantic` currently builds only on Unix systems; users of other operating systems may wish to use the [Docker images](https://github.com/github/semantic/packages/11609).
|
||||
`semantic` requires at least GHC 8.8.1 and Cabal 3.0. We strongly recommend using [`ghcup`][ghcup] to sandbox GHC versions, as GHC packages installed through your OS's package manager may not install statically-linked versions of the GHC boot libraries. `semantic` currently builds only on Unix systems; users of other operating systems may wish to use the [Docker images](https://github.com/github/semantic/packages/11609).
|
||||
|
||||
We use `cabal's` [Nix-style local builds][nix] for development. To get started quickly:
|
||||
|
||||
|
@ -37,7 +37,7 @@ package semantic-ast
|
||||
source-repository-package
|
||||
type: git
|
||||
location: https://github.com/tclem/proto-lens-jsonpb
|
||||
tag: e4d10b77f57ee25beb759a33e63e2061420d3dc2
|
||||
tag: 5d40444be689bef1e12cbe38da0261283775ec64
|
||||
|
||||
source-repository-package
|
||||
type: git
|
||||
|
@ -52,13 +52,13 @@ library
|
||||
Control.Effect.Readline
|
||||
build-depends:
|
||||
algebraic-graphs ^>= 0.3
|
||||
, base >= 4.12 && < 5
|
||||
, base >= 4.13 && < 5
|
||||
, containers ^>= 0.6
|
||||
, fused-effects ^>= 1.0
|
||||
, fused-syntax
|
||||
, haskeline ^>= 0.7.5
|
||||
, pathtype ^>= 0.8.1
|
||||
, prettyprinter ^>= 1.2.1
|
||||
, prettyprinter >= 1.2.1 && < 1.4
|
||||
, prettyprinter-ansi-terminal ^>= 1.1.1
|
||||
, semantic-source ^>= 0
|
||||
, terminal-size ^>= 0.3
|
||||
|
@ -1,4 +1,6 @@
|
||||
{-# LANGUAGE DerivingVia, FlexibleContexts, FlexibleInstances, LambdaCase, MultiParamTypeClasses, NamedFieldPuns, OverloadedStrings, RankNTypes, RecordWildCards, ScopedTypeVariables, TypeApplications, TypeOperators, UndecidableInstances #-}
|
||||
{-# LANGUAGE DerivingVia, FlexibleContexts, FlexibleInstances, LambdaCase, MultiParamTypeClasses, NamedFieldPuns,
|
||||
OverloadedStrings, RankNTypes, RecordWildCards, ScopedTypeVariables, TypeApplications, TypeOperators,
|
||||
UndecidableInstances #-}
|
||||
module Analysis.Concrete
|
||||
( Concrete(..)
|
||||
, concrete
|
||||
@ -14,13 +16,12 @@ import qualified Algebra.Graph.Export.Dot as G
|
||||
import Analysis.Analysis
|
||||
import Analysis.File
|
||||
import Control.Algebra
|
||||
import Control.Applicative (Alternative (..))
|
||||
import Control.Carrier.Fail.WithLoc
|
||||
import Control.Carrier.Fresh.Strict
|
||||
import Control.Carrier.NonDet.Church
|
||||
import Control.Carrier.Reader hiding (Local)
|
||||
import Control.Carrier.State.Strict
|
||||
import Control.Monad ((<=<), guard)
|
||||
import Control.Monad ((<=<))
|
||||
import Data.Function (fix)
|
||||
import qualified Data.IntMap as IntMap
|
||||
import qualified Data.IntSet as IntSet
|
||||
|
@ -40,12 +40,12 @@ library
|
||||
exposed-modules:
|
||||
-- other-modules:
|
||||
-- other-extensions:
|
||||
build-depends: base ^>=4.12.0.0
|
||||
build-depends: base ^>= 4.13
|
||||
, tree-sitter ^>= 0.7.1
|
||||
, semantic-source ^>= 0.0
|
||||
, tree-sitter-python ^>= 0.8
|
||||
, bytestring ^>= 0.10.8.2
|
||||
, optparse-applicative ^>= 0.14.3.0
|
||||
, optparse-applicative >= 0.14.3 && < 0.16
|
||||
, pretty-simple ^>= 3.1.0.0
|
||||
hs-source-dirs: src
|
||||
default-language: Haskell2010
|
||||
@ -55,13 +55,13 @@ executable semantic-ast
|
||||
main-is: Main.hs
|
||||
-- other-modules:
|
||||
-- other-extensions:
|
||||
build-depends: base ^>=4.12.0.0
|
||||
build-depends: base
|
||||
, semantic-ast
|
||||
, tree-sitter ^>= 0.7
|
||||
, semantic-source ^>= 0.0
|
||||
, tree-sitter-python ^>= 0.8
|
||||
, bytestring ^>= 0.10.8.2
|
||||
, optparse-applicative ^>= 0.14.3.0
|
||||
, pretty-simple ^>= 3.1.0.0
|
||||
, tree-sitter
|
||||
, semantic-source
|
||||
, tree-sitter-python
|
||||
, bytestring
|
||||
, optparse-applicative
|
||||
, pretty-simple
|
||||
hs-source-dirs: src
|
||||
default-language: Haskell2010
|
||||
|
@ -46,17 +46,17 @@ library
|
||||
Core.Eval
|
||||
Core.Name
|
||||
build-depends:
|
||||
base >= 4.12 && < 5
|
||||
base >= 4.13 && < 5
|
||||
, fused-effects ^>= 1.0
|
||||
, fused-syntax
|
||||
, parsers ^>= 0.12.10
|
||||
, pathtype ^>= 0.8.1
|
||||
, prettyprinter ^>= 1.2.1
|
||||
, prettyprinter >= 1.2.1 && < 1.4
|
||||
, prettyprinter-ansi-terminal ^>= 1.1.1
|
||||
, semantic-analysis ^>= 0
|
||||
, semantic-source ^>= 0
|
||||
, text ^>= 1.2.3.1
|
||||
, trifecta ^>= 2
|
||||
, trifecta >= 2 && < 2.2
|
||||
, unordered-containers ^>= 0.2.10
|
||||
|
||||
test-suite test
|
||||
|
@ -23,7 +23,7 @@ library
|
||||
Language.Java
|
||||
Language.Java.Tags
|
||||
build-depends:
|
||||
base >= 4.12 && < 5
|
||||
base >= 4.13 && < 5
|
||||
, fused-effects ^>= 1.0
|
||||
, semantic-source ^>= 0.0
|
||||
, semantic-tags ^>= 0.0
|
||||
|
@ -22,7 +22,7 @@ library
|
||||
exposed-modules:
|
||||
Language.JSON
|
||||
build-depends:
|
||||
base >= 4.12 && < 5
|
||||
base >= 4.13 && < 5
|
||||
, semantic-tags ^>= 0.0
|
||||
, tree-sitter ^>= 0.7
|
||||
, tree-sitter-json ^>= 0.5
|
||||
|
@ -20,7 +20,7 @@ tested-with: GHC == 8.6.5
|
||||
|
||||
common haskell
|
||||
default-language: Haskell2010
|
||||
build-depends: base ^>=4.12
|
||||
build-depends: base ^>= 4.13
|
||||
, fused-effects ^>= 1.0
|
||||
, fused-syntax
|
||||
, parsers ^>= 0.12.10
|
||||
@ -43,7 +43,8 @@ common haskell
|
||||
-Wno-missed-specialisations
|
||||
-Wno-all-missed-specialisations
|
||||
-Wno-star-is-type
|
||||
|
||||
if (impl(ghc >= 8.8))
|
||||
ghc-options: -Wno-missing-deriving-strategies
|
||||
|
||||
|
||||
library
|
||||
|
@ -311,7 +311,18 @@ instance Compile Py.ImportFromStatement
|
||||
instance Compile Py.ImportStatement
|
||||
instance Compile Py.Integer
|
||||
|
||||
instance Compile Py.Lambda
|
||||
instance Compile Py.Lambda where
|
||||
compile it@Py.Lambda
|
||||
{ body
|
||||
, parameters
|
||||
} cc next = do
|
||||
let unparams (Py.LambdaParameters _ ps) = toList ps
|
||||
unparam (Py.Parameter (Prj (Py.Identifier _pann pname))) = Just . named' . Name $ pname
|
||||
unparam _ = Nothing
|
||||
body' <- compile body cc next
|
||||
let params = maybe [] unparams parameters
|
||||
pure . locate it . lams (catMaybes (fmap unparam params)) $ body'
|
||||
|
||||
instance Compile Py.List
|
||||
instance Compile Py.ListComprehension
|
||||
instance Compile Py.ListSplat
|
||||
@ -330,7 +341,11 @@ instance Compile Py.Module where
|
||||
in fmap (locate it) . foldr compile buildRecord stmts
|
||||
|
||||
instance Compile Py.NamedExpression
|
||||
instance Compile Py.None
|
||||
|
||||
instance Compile Py.None where
|
||||
-- None is not overridable, and thus always points to the prelude's None.
|
||||
compile _it cc _ = cc (pure "__semantic_prelude" ... "None")
|
||||
|
||||
instance Compile Py.NonlocalStatement
|
||||
instance Compile Py.NotOperator
|
||||
|
||||
|
@ -10,8 +10,16 @@
|
||||
|
||||
str <- type "str" object #record { __new__: \prim -> instance #unit prim #record{} };
|
||||
|
||||
NoneType <- type "None" object #record { __new__: \prim -> instance #unit prim #record{} };
|
||||
None <- NoneType.__slots.__new__ #unit;
|
||||
|
||||
getitem <- \super -> \item -> \attr ->
|
||||
if item.slots.?attr then item.slots.attr else #unit;
|
||||
|
||||
#record { type: type, object: object, str: str, getitem: getitem}
|
||||
#record { type: type
|
||||
, object: object
|
||||
, str: str
|
||||
, NoneType: NoneType
|
||||
, None: None
|
||||
, getitem: getitem}
|
||||
}
|
||||
|
4
semantic-python/test/fixtures/4-01-lambda-literals.py
vendored
Normal file
4
semantic-python/test/fixtures/4-01-lambda-literals.py
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
# CHECK-TREE: { const <- \x -> \y -> x; y <- const #true #true; z <- const #false #false; #record { const: const, y : y, z: z, }}
|
||||
const = lambda x, y: x
|
||||
y = const(True, True)
|
||||
z = const(False, False)
|
2
semantic-python/test/fixtures/4-02-nonetype.py
vendored
Normal file
2
semantic-python/test/fixtures/4-02-nonetype.py
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
# CHECK-TREE: { x <- __semantic_prelude.None; #record { x : x }}
|
||||
x = None
|
@ -48,7 +48,7 @@ library
|
||||
Source.Span
|
||||
build-depends:
|
||||
aeson ^>= 1.4.2.0
|
||||
, base >= 4.12 && < 5
|
||||
, base >= 4.13 && < 5
|
||||
, bytestring ^>= 0.10.8.2
|
||||
, deepseq ^>= 1.4.4.0
|
||||
, generic-monoid ^>= 0.1.0.0
|
||||
|
@ -24,7 +24,7 @@ library
|
||||
Tags.Tag
|
||||
Tags.Tagging.Precise
|
||||
build-depends:
|
||||
base >= 4.12 && < 5
|
||||
base >= 4.13 && < 5
|
||||
, fused-effects ^>= 1.0
|
||||
, semantic-source ^>= 0.0
|
||||
, text ^>= 1.2.3.1
|
||||
@ -42,3 +42,5 @@ library
|
||||
-Wno-missed-specialisations
|
||||
-Wno-all-missed-specialisations
|
||||
-Wno-star-is-type
|
||||
if (impl(ghc >= 8.8))
|
||||
ghc-options: -Wno-missing-deriving-strategies
|
||||
|
@ -16,7 +16,7 @@ build-type: Simple
|
||||
stability: alpha
|
||||
extra-source-files: README.md
|
||||
|
||||
tested-with: GHC == 8.6.5
|
||||
tested-with: GHC == 8.8.1
|
||||
|
||||
flag release
|
||||
description: Build with optimizations on (for CI or deployment builds)
|
||||
@ -46,7 +46,7 @@ common haskell
|
||||
-- as caret-operator bounds relative to a version in Stackage.
|
||||
-- These are currently pinned to lts-13.13.
|
||||
common dependencies
|
||||
build-depends: base >= 4.12 && < 5
|
||||
build-depends: base >= 4.13 && < 5
|
||||
, aeson ^>= 1.4.2.0
|
||||
, algebraic-graphs ^>= 0.3
|
||||
, async ^>= 2.2.1
|
||||
@ -54,11 +54,11 @@ common dependencies
|
||||
, bytestring ^>= 0.10.8.2
|
||||
, containers ^>= 0.6.0.1
|
||||
, directory ^>= 1.3.3.0
|
||||
, fastsum ^>= 0.1.1.0
|
||||
, fastsum ^>= 0.1.1.1
|
||||
, fused-effects ^>= 1
|
||||
, fused-effects-exceptions ^>= 1
|
||||
, fused-effects-resumable ^>= 0.1
|
||||
, hashable ^>= 1.2.7.0
|
||||
, hashable >= 1.2.7 && < 1.4
|
||||
, tree-sitter ^>= 0.7.1
|
||||
, mtl ^>= 2.2.2
|
||||
, network ^>= 2.8.0.0
|
||||
@ -257,7 +257,7 @@ library
|
||||
, Prologue
|
||||
autogen-modules: Paths_semantic
|
||||
other-modules: Paths_semantic
|
||||
build-depends: base >= 4.12 && < 5
|
||||
build-depends: base >= 4.13 && < 5
|
||||
, ansi-terminal >= 0.8.2 && <1
|
||||
, array ^>= 0.5.3.0
|
||||
, attoparsec ^>= 0.13.2.2
|
||||
@ -272,18 +272,18 @@ library
|
||||
, hostname ^>= 1.0
|
||||
, hscolour ^>= 1.24.4
|
||||
, kdt ^>= 0.2.4
|
||||
, lens ^>= 4.17
|
||||
, lens >= 4.17 && < 4.19
|
||||
, mersenne-random-pure64 ^>= 0.2.2.0
|
||||
, network-uri ^>= 2.6.1.0
|
||||
, optparse-applicative ^>= 0.14.3.0
|
||||
, optparse-applicative >= 0.14.3 && < 0.16
|
||||
, parallel ^>= 3.2.2.0
|
||||
, parsers ^>= 0.12.9
|
||||
, prettyprinter ^>= 1.2.1
|
||||
, prettyprinter >= 1.2.1 && < 1.4
|
||||
, pretty-show ^>= 1.9.5
|
||||
, profunctors ^>= 5.3
|
||||
, proto-lens ^>= 0.5.1.0
|
||||
, proto-lens >= 0.5 && < 0.7
|
||||
, proto-lens-jsonpb
|
||||
, proto-lens-runtime ^>= 0.5.0.0
|
||||
, proto-lens-runtime >= 0.5 && <0.7
|
||||
, reducers ^>= 3.12.3
|
||||
, semantic-java ^>= 0
|
||||
, semantic-json ^>= 0
|
||||
@ -293,8 +293,8 @@ library
|
||||
, semigroupoids ^>= 5.3.2
|
||||
, split ^>= 0.2.3.3
|
||||
, stm-chans ^>= 3.0.0.4
|
||||
, template-haskell ^>= 2.14
|
||||
, time ^>= 1.8.0.2
|
||||
, template-haskell >= 2.14 && < 2.16
|
||||
, time >= 1.8.0.2 && < 1.10
|
||||
, utf8-string ^>= 1.0.1.1
|
||||
, unliftio-core ^>= 0.1.2.0
|
||||
, unordered-containers ^>= 0.2.9.0
|
||||
|
@ -24,7 +24,6 @@ import Control.Carrier.State.Strict
|
||||
import Control.Effect.Sum.Project
|
||||
import Data.Abstract.BaseError
|
||||
import Data.Abstract.Module (Module (moduleInfo), ModuleInfo (..))
|
||||
import Data.Abstract.Package (PackageInfo (..))
|
||||
import Data.ByteString.Builder
|
||||
import Data.Graph
|
||||
import Data.Graph.ControlFlowVertex
|
||||
|
@ -98,7 +98,6 @@ import Data.AST
|
||||
import Data.Error
|
||||
import qualified Source.Source as Source
|
||||
import Data.Term
|
||||
import Data.Text (Text)
|
||||
import Data.Text.Encoding (decodeUtf8')
|
||||
import qualified Source.Loc as L
|
||||
import Source.Range as Range
|
||||
|
@ -1,4 +1,6 @@
|
||||
{-# LANGUAGE DeriveFunctor, DeriveGeneric, FlexibleContexts, GADTs, GeneralizedNewtypeDeriving, KindSignatures, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TypeOperators, UndecidableInstances #-}
|
||||
{-# LANGUAGE DeriveFunctor, DeriveGeneric, FlexibleContexts, GADTs, GeneralizedNewtypeDeriving, KindSignatures,
|
||||
RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TypeOperators,
|
||||
UndecidableInstances #-}
|
||||
module Control.Abstract.Heap
|
||||
( Heap
|
||||
, HeapError(..)
|
||||
@ -48,17 +50,16 @@ import Control.Abstract.Roots
|
||||
import Control.Abstract.ScopeGraph hiding (ScopeError (..))
|
||||
import Control.Abstract.ScopeGraph (ScopeError)
|
||||
import Control.Algebra
|
||||
import Control.Applicative (Alternative)
|
||||
import qualified Control.Carrier.Resumable.Resume as With
|
||||
import Control.Carrier.Resumable.Either (SomeError (..))
|
||||
import qualified Control.Carrier.Resumable.Either as Either
|
||||
import qualified Control.Carrier.Resumable.Resume as With
|
||||
import Data.Abstract.BaseError
|
||||
import Data.Abstract.Heap (Heap, Position (..))
|
||||
import qualified Data.Abstract.Heap as Heap
|
||||
import Data.Abstract.Live
|
||||
import Data.Abstract.Module (ModuleInfo)
|
||||
import Data.Abstract.Name
|
||||
import Data.Abstract.ScopeGraph (Kind(..), Path (..), Relation(..), putDeclarationScopeAtPosition)
|
||||
import Data.Abstract.ScopeGraph (Kind (..), Path (..), putDeclarationScopeAtPosition)
|
||||
import qualified Data.Map.Strict as Map
|
||||
import Prologue
|
||||
import Source.Span (Span)
|
||||
@ -464,7 +465,7 @@ instance Show address => Show1 (AddressError address value) where
|
||||
instance Eq address => Eq1 (AddressError address value) where
|
||||
liftEq _ (UninitializedSlot a) (UninitializedSlot b) = a == b
|
||||
liftEq _ (UnallocatedSlot a) (UnallocatedSlot b) = a == b
|
||||
liftEq _ _ _ = False
|
||||
liftEq _ _ _ = False
|
||||
|
||||
throwAddressError :: ( Has (Resumable (BaseError (AddressError address body))) sig m
|
||||
, Has (Reader ModuleInfo) sig m
|
||||
|
@ -1,4 +1,5 @@
|
||||
{-# LANGUAGE DeriveFunctor, DeriveGeneric, FlexibleContexts, GADTs, GeneralizedNewtypeDeriving, KindSignatures, MultiParamTypeClasses, RankNTypes, ScopedTypeVariables, TypeOperators #-}
|
||||
{-# LANGUAGE DeriveFunctor, DeriveGeneric, FlexibleContexts, GADTs, GeneralizedNewtypeDeriving, KindSignatures,
|
||||
MultiParamTypeClasses, RankNTypes, ScopedTypeVariables, TypeOperators #-}
|
||||
module Control.Abstract.Value
|
||||
( AbstractValue(..)
|
||||
, AbstractIntro(..)
|
||||
@ -73,7 +74,7 @@ module Control.Abstract.Value
|
||||
|
||||
import Control.Abstract.Evaluator
|
||||
import Control.Abstract.Heap
|
||||
import Control.Abstract.ScopeGraph (Allocator, CurrentScope, Declaration, ScopeGraph)
|
||||
import Control.Abstract.ScopeGraph (CurrentScope, Declaration, ScopeGraph)
|
||||
import Control.Algebra
|
||||
import Control.Carrier.Reader
|
||||
import Data.Abstract.BaseError
|
||||
|
@ -32,7 +32,7 @@ import Semantic.Timeout
|
||||
import Source.Source (Source)
|
||||
|
||||
newtype ParseC m a = ParseC { runParse :: m a }
|
||||
deriving (Applicative, Functor, Monad, MonadIO)
|
||||
deriving (Applicative, Functor, Monad, MonadFail, MonadIO)
|
||||
|
||||
instance ( Has (Error SomeException) sig m
|
||||
, Has (Reader TaskSession) sig m
|
||||
|
@ -1,4 +1,5 @@
|
||||
{-# LANGUAGE FlexibleContexts, FlexibleInstances, GADTs, GeneralizedNewtypeDeriving, MultiParamTypeClasses, RecordWildCards, TypeOperators, UndecidableInstances #-}
|
||||
{-# LANGUAGE FlexibleContexts, FlexibleInstances, GADTs, GeneralizedNewtypeDeriving, MultiParamTypeClasses,
|
||||
RecordWildCards, TypeOperators, UndecidableInstances #-}
|
||||
-- | A carrier for 'Parse' effects suitable for use in the repl, tests, etc.
|
||||
module Control.Carrier.Parse.Simple
|
||||
( -- * Parse carrier
|
||||
@ -26,14 +27,14 @@ runParse :: Duration -> ParseC m a -> m a
|
||||
runParse timeout (ParseC m) = runReader timeout m
|
||||
|
||||
newtype ParseC m a = ParseC (ReaderC Duration m a)
|
||||
deriving (Applicative, Functor, Monad, MonadIO)
|
||||
deriving (Applicative, Functor, Monad, MonadFail, MonadIO)
|
||||
|
||||
instance ( Has (Error SomeException) sig m
|
||||
, MonadIO m
|
||||
)
|
||||
=> Algebra (Parse :+: sig) (ParseC m) where
|
||||
alg (L (Parse parser blob k)) = ParseC ask >>= \ timeout -> runParser timeout blob parser >>= k
|
||||
alg (R other) = ParseC (send (handleCoercible other))
|
||||
alg (R other) = ParseC (send (handleCoercible other))
|
||||
|
||||
-- | Parse a 'Blob' in 'IO'.
|
||||
runParser
|
||||
|
@ -3,11 +3,10 @@ module Data.Abstract.Address.Precise
|
||||
( Precise(..)
|
||||
) where
|
||||
|
||||
import Control.Abstract
|
||||
import Control.Abstract.ScopeGraph (AllocatorC(..))
|
||||
import Control.Algebra
|
||||
import Control.Abstract
|
||||
import Control.Algebra
|
||||
import qualified Data.Set as Set
|
||||
import Prologue
|
||||
import Prologue
|
||||
|
||||
-- | 'Precise' models precise store semantics where only the 'Latest' value is taken. Everything gets it's own address (always makes a new allocation) which makes for a larger store.
|
||||
newtype Precise = Precise { unPrecise :: Int }
|
||||
@ -18,7 +17,7 @@ instance Show Precise where
|
||||
|
||||
|
||||
instance Has Fresh sig m => Algebra (Allocator Precise :+: sig) (AllocatorC Precise m) where
|
||||
alg (R other) = AllocatorC . alg . handleCoercible $ other
|
||||
alg (R other) = AllocatorC . alg . handleCoercible $ other
|
||||
alg (L (Alloc _ k)) = Precise <$> fresh >>= k
|
||||
|
||||
|
||||
|
@ -38,7 +38,6 @@ import Data.Abstract.FreeVariables as X
|
||||
import Data.Abstract.Module
|
||||
import Data.Abstract.Name as X
|
||||
import qualified Data.Abstract.ScopeGraph as ScopeGraph
|
||||
import Data.Abstract.ScopeGraph (Relation(..))
|
||||
import Data.Abstract.AccessControls.Class as X
|
||||
import Data.Language
|
||||
import Data.Semigroup.App
|
||||
|
@ -12,7 +12,6 @@ module Data.Abstract.Name
|
||||
import Control.Effect.Fresh
|
||||
import Data.Aeson
|
||||
import qualified Data.Char as Char
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as Text
|
||||
import Prologue
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
{-# LANGUAGE FlexibleContexts, FlexibleInstances, GADTs, LambdaCase, MultiParamTypeClasses, RankNTypes, ScopedTypeVariables, StandaloneDeriving, TypeApplications, TypeOperators, UndecidableInstances #-}
|
||||
{-# LANGUAGE FlexibleContexts, FlexibleInstances, GADTs, LambdaCase, MultiParamTypeClasses, RankNTypes,
|
||||
ScopedTypeVariables, StandaloneDeriving, TypeApplications, TypeOperators, UndecidableInstances #-}
|
||||
module Data.Abstract.Value.Concrete
|
||||
( Value (..)
|
||||
, ValueError (..)
|
||||
@ -8,25 +9,23 @@ module Data.Abstract.Value.Concrete
|
||||
|
||||
import Prologue
|
||||
|
||||
import Control.Carrier.Resumable.Either (SomeError)
|
||||
import Control.Carrier.Resumable.Either (SomeError)
|
||||
import qualified Control.Carrier.Resumable.Either as Either
|
||||
import qualified Control.Carrier.Resumable.Resume as With
|
||||
import Data.List (genericIndex, genericLength)
|
||||
import Data.List (genericIndex, genericLength)
|
||||
import qualified Data.Map.Strict as Map
|
||||
import Data.Scientific (Scientific, coefficient, normalize)
|
||||
import Data.Scientific.Exts
|
||||
import Data.Text (pack)
|
||||
import Data.Scientific.Exts
|
||||
import Data.Text (pack)
|
||||
|
||||
import Control.Abstract.ScopeGraph (Allocator, ScopeError)
|
||||
import Control.Abstract.Heap (scopeLookup)
|
||||
import Control.Abstract hiding
|
||||
(Array (..), Boolean (..), Function (..), Hash (..), Numeric (..), Object (..), String (..), Unit (..), While (..))
|
||||
import qualified Control.Abstract as Abstract
|
||||
import Control.Abstract hiding (Boolean(..), Function(..), Numeric(..), Object(..), Array(..), Hash(..), String(..), Unit(..), While(..))
|
||||
import Control.Algebra
|
||||
import Control.Effect.Interpose
|
||||
import Data.Abstract.BaseError
|
||||
import Data.Abstract.Evaluatable (UnspecializedError(..), EvalError(..), Declarations)
|
||||
import Data.Abstract.FreeVariables
|
||||
import Data.Abstract.Name
|
||||
import Control.Algebra
|
||||
import Control.Effect.Interpose
|
||||
import Data.Abstract.BaseError
|
||||
import Data.Abstract.Evaluatable (Declarations, EvalError (..), UnspecializedError (..))
|
||||
import Data.Abstract.FreeVariables
|
||||
import Data.Abstract.Name
|
||||
import qualified Data.Abstract.Number as Number
|
||||
|
||||
|
||||
@ -200,7 +199,7 @@ instance ( Algebra sig m
|
||||
|
||||
instance Algebra sig m
|
||||
=> Algebra (Abstract.Unit (Value term address) :+: sig) (UnitC (Value term address) m) where
|
||||
alg (R other) = UnitC . alg . handleCoercible $ other
|
||||
alg (R other) = UnitC . alg . handleCoercible $ other
|
||||
alg (L (Abstract.Unit k )) = k Unit
|
||||
|
||||
instance ( Has (Reader ModuleInfo) sig m
|
||||
@ -252,7 +251,7 @@ specialize :: ( Has (Reader ModuleInfo) sig m
|
||||
)
|
||||
=> Either ArithException Number.SomeNumber
|
||||
-> m (Value term address)
|
||||
specialize (Left exc) = throwBaseError (ArithmeticError exc)
|
||||
specialize (Left exc) = throwBaseError (ArithmeticError exc)
|
||||
specialize (Right (Number.SomeNumber (Number.Integer t))) = pure (Integer (Number.Integer t))
|
||||
specialize (Right (Number.SomeNumber (Number.Decimal t))) = pure (Float (Number.Decimal t))
|
||||
specialize (Right (Number.SomeNumber (Number.Ratio t))) = pure (Rational (Number.Ratio t))
|
||||
@ -284,12 +283,12 @@ ourShift a b = toInteger (shiftR a b)
|
||||
instance Algebra sig m => Algebra (Abstract.Object address (Value term address) :+: sig) (ObjectC address (Value term address) m) where
|
||||
alg (R other) = ObjectC . alg . handleCoercible $ other
|
||||
alg (L op) = case op of
|
||||
Abstract.Object address k -> k (Object address)
|
||||
Abstract.ScopedEnvironment (Object address) k -> k (Just address)
|
||||
Abstract.ScopedEnvironment (Class _ _ address) k -> k (Just address)
|
||||
Abstract.Object address k -> k (Object address)
|
||||
Abstract.ScopedEnvironment (Object address) k -> k (Just address)
|
||||
Abstract.ScopedEnvironment (Class _ _ address) k -> k (Just address)
|
||||
Abstract.ScopedEnvironment (Namespace _ address) k -> k (Just address)
|
||||
Abstract.ScopedEnvironment _ k -> k Nothing
|
||||
Abstract.Klass n frame k -> k (Class n mempty frame)
|
||||
Abstract.ScopedEnvironment _ k -> k Nothing
|
||||
Abstract.Klass n frame k -> k (Class n mempty frame)
|
||||
|
||||
instance ( Has (Reader ModuleInfo) sig m
|
||||
, Has (Reader Span) sig m
|
||||
@ -300,14 +299,14 @@ instance ( Has (Reader ModuleInfo) sig m
|
||||
=> Algebra (Abstract.Array (Value term address) :+: sig) (ArrayC (Value term address) m) where
|
||||
alg (R other) = ArrayC . alg . handleCoercible $ other
|
||||
alg (L op) = case op of
|
||||
Abstract.Array t k -> k (Array t)
|
||||
Abstract.Array t k -> k (Array t)
|
||||
Abstract.AsArray (Array addresses) k -> k addresses
|
||||
Abstract.AsArray val k -> throwBaseError (ArrayError val) >>= k
|
||||
Abstract.AsArray val k -> throwBaseError (ArrayError val) >>= k
|
||||
|
||||
instance ( Algebra sig m ) => Algebra (Abstract.Hash (Value term address) :+: sig) (HashC (Value term address) m) where
|
||||
alg (R other) = HashC . alg . handleCoercible $ other
|
||||
alg (L op) = case op of
|
||||
Abstract.Hash t k -> k ((Hash . map (uncurry KVPair)) t)
|
||||
Abstract.Hash t k -> k ((Hash . map (uncurry KVPair)) t)
|
||||
Abstract.KvPair t v k -> k (KVPair t v)
|
||||
|
||||
|
||||
@ -386,17 +385,17 @@ data ValueError term address resume where
|
||||
BoundsError :: [Value term address] -> Prelude.Integer -> ValueError term address (Value term address)
|
||||
|
||||
instance (Eq address, Eq term) => Eq1 (ValueError term address) where
|
||||
liftEq _ (StringError a) (StringError b) = a == b
|
||||
liftEq _ (CallError a) (CallError b) = a == b
|
||||
liftEq _ (BoolError a) (BoolError c) = a == c
|
||||
liftEq _ (IndexError a b) (IndexError c d) = (a == c) && (b == d)
|
||||
liftEq _ (Numeric2Error a b) (Numeric2Error c d) = (a == c) && (b == d)
|
||||
liftEq _ (ComparisonError a b) (ComparisonError c d) = (a == c) && (b == d)
|
||||
liftEq _ (Bitwise2Error a b) (Bitwise2Error c d) = (a == c) && (b == d)
|
||||
liftEq _ (BitwiseError a) (BitwiseError b) = a == b
|
||||
liftEq _ (KeyValueError a) (KeyValueError b) = a == b
|
||||
liftEq _ (BoundsError a b) (BoundsError c d) = (a == c) && (b == d)
|
||||
liftEq _ _ _ = False
|
||||
liftEq _ (StringError a) (StringError b) = a == b
|
||||
liftEq _ (CallError a) (CallError b) = a == b
|
||||
liftEq _ (BoolError a) (BoolError c) = a == c
|
||||
liftEq _ (IndexError a b) (IndexError c d) = (a == c) && (b == d)
|
||||
liftEq _ (Numeric2Error a b) (Numeric2Error c d) = (a == c) && (b == d)
|
||||
liftEq _ (ComparisonError a b) (ComparisonError c d) = (a == c) && (b == d)
|
||||
liftEq _ (Bitwise2Error a b) (Bitwise2Error c d) = (a == c) && (b == d)
|
||||
liftEq _ (BitwiseError a) (BitwiseError b) = a == b
|
||||
liftEq _ (KeyValueError a) (KeyValueError b) = a == b
|
||||
liftEq _ (BoundsError a b) (BoundsError c d) = (a == c) && (b == d)
|
||||
liftEq _ _ _ = False
|
||||
|
||||
deriving instance (Show address, Show term) => Show (ValueError term address resume)
|
||||
instance (Show address, Show term) => Show1 (ValueError term address) where
|
||||
|
@ -25,10 +25,10 @@ readBlobFromFile (File path language) = do
|
||||
pure . Just . sourceBlob path language . Source.fromUTF8 $ raw
|
||||
|
||||
-- | Read a utf8-encoded file to a 'Blob', raising an IOError if it can't be found.
|
||||
readBlobFromFile' :: MonadIO m => File -> m Blob
|
||||
readBlobFromFile' :: (MonadFail m, MonadIO m) => File -> m Blob
|
||||
readBlobFromFile' file = do
|
||||
maybeFile <- readBlobFromFile file
|
||||
maybeM (Prelude.fail ("cannot read '" <> show file <> "', file not found or language not supported.")) maybeFile
|
||||
maybeM (fail ("cannot read '" <> show file <> "', file not found or language not supported.")) maybeFile
|
||||
|
||||
-- | Read all blobs in the directory with Language.supportedExts.
|
||||
readBlobsFromDir :: MonadIO m => Path.AbsRelDir -> m [Blob]
|
||||
|
@ -14,7 +14,6 @@ module Data.Error
|
||||
import Prologue
|
||||
|
||||
import Data.ByteString.Char8 (unpack)
|
||||
import Data.Ix (inRange)
|
||||
import Data.List (intersperse, isSuffixOf)
|
||||
import System.Console.ANSI
|
||||
|
||||
|
@ -20,7 +20,6 @@ import Data.Abstract.Name
|
||||
import Data.Abstract.Package (PackageInfo (..))
|
||||
import Data.Aeson
|
||||
import Data.Graph (VertexTag (..))
|
||||
import qualified Data.Graph as G
|
||||
import Data.Quieterm (Quieterm(..))
|
||||
import qualified Data.Syntax as Syntax
|
||||
import qualified Data.Syntax.Declaration as Declaration
|
||||
|
@ -1,4 +1,5 @@
|
||||
{-# LANGUAGE DefaultSignatures, FlexibleContexts, FlexibleInstances, GADTs, MultiParamTypeClasses, OverloadedStrings, RecordWildCards, TypeApplications, TypeOperators, UndecidableInstances #-}
|
||||
{-# LANGUAGE DefaultSignatures, FlexibleContexts, FlexibleInstances, GADTs, MultiParamTypeClasses, OverloadedStrings,
|
||||
RecordWildCards, TypeApplications, TypeOperators, UndecidableInstances #-}
|
||||
module Data.JSON.Fields
|
||||
( JSONFields (..)
|
||||
, JSONFields1 (..)
|
||||
@ -10,7 +11,6 @@ module Data.JSON.Fields
|
||||
import Data.Aeson
|
||||
import Data.Edit
|
||||
import qualified Data.Map as Map
|
||||
import Data.Sum (Apply (..), Sum)
|
||||
import qualified Data.Text as Text
|
||||
import GHC.Generics
|
||||
import Prologue
|
||||
|
@ -9,7 +9,6 @@ import qualified Data.Set as Set
|
||||
|
||||
import Control.Abstract hiding (AccessControl (..), Function)
|
||||
import Data.Abstract.Evaluatable
|
||||
import Data.Abstract.Name (__self)
|
||||
import qualified Data.Abstract.ScopeGraph as ScopeGraph
|
||||
import Data.JSON.Fields
|
||||
import Diffing.Algorithm
|
||||
|
@ -12,7 +12,6 @@ import Assigning.Assignment hiding (Assignment, Error)
|
||||
import qualified Assigning.Assignment as Assignment
|
||||
import Data.Abstract.Name (name)
|
||||
import qualified Data.Abstract.ScopeGraph as ScopeGraph (AccessControl(..))
|
||||
import Data.List (elem)
|
||||
import qualified Data.List.NonEmpty as NonEmpty
|
||||
import Data.Syntax
|
||||
( contextualize
|
||||
|
@ -4,10 +4,6 @@ module Language.Ruby.Syntax (module Language.Ruby.Syntax) where
|
||||
import Prologue
|
||||
|
||||
import Control.Abstract as Abstract hiding (Load, String)
|
||||
import Control.Abstract.Heap (Heap, HeapError, insertFrameLink)
|
||||
import Control.Abstract.ScopeGraph (insertImportEdge)
|
||||
import Control.Abstract.Value (Boolean)
|
||||
import Control.Monad (unless)
|
||||
import Data.Abstract.BaseError
|
||||
import Data.Abstract.Evaluatable
|
||||
import qualified Data.Abstract.Module as M
|
||||
|
@ -5,7 +5,6 @@ import Prologue
|
||||
|
||||
import Control.Abstract hiding (Import)
|
||||
import Data.Abstract.Evaluatable as Evaluatable
|
||||
import Data.Abstract.ScopeGraph (AccessControl (..))
|
||||
import Data.JSON.Fields
|
||||
import qualified Data.Map.Strict as Map
|
||||
import Data.Semigroup.App
|
||||
|
@ -1,4 +1,5 @@
|
||||
{-# LANGUAGE DataKinds, DeriveGeneric, FlexibleContexts, GADTs, LambdaCase, RecordWildCards, ScopedTypeVariables, TypeOperators #-}
|
||||
{-# LANGUAGE DataKinds, DeriveGeneric, FlexibleContexts, GADTs, LambdaCase, RecordWildCards, ScopedTypeVariables,
|
||||
TypeOperators #-}
|
||||
module Parsing.TreeSitter
|
||||
( TSParseException (..)
|
||||
, Duration(..)
|
||||
@ -13,7 +14,6 @@ import Control.Carrier.Reader
|
||||
import qualified Control.Exception as Exc
|
||||
import Foreign
|
||||
import Foreign.C.Types (CBool (..))
|
||||
import Foreign.Marshal.Array (allocaArray)
|
||||
|
||||
import Data.AST (AST, Node (Node))
|
||||
import Data.Blob
|
||||
|
@ -8,25 +8,25 @@ module Prologue
|
||||
) where
|
||||
|
||||
|
||||
import Debug.Trace as X (traceShowM, traceM)
|
||||
import Data.Bifunctor.Join as X
|
||||
import Data.Bits as X
|
||||
import Data.ByteString as X (ByteString)
|
||||
import Data.Coerce as X
|
||||
import Data.Int as X (Int8, Int16, Int32, Int64)
|
||||
import Data.Either as X (fromLeft, fromRight)
|
||||
import Data.Int as X (Int16, Int32, Int64, Int8)
|
||||
import Data.IntMap as X (IntMap)
|
||||
import Data.IntSet as X (IntSet)
|
||||
import Data.Ix as X (Ix (..))
|
||||
import Data.List.NonEmpty as X (NonEmpty (..), nonEmpty, some1)
|
||||
import Data.Map as X (Map)
|
||||
import Data.Maybe as X
|
||||
import Data.Semilattice.Lower as X (Lower (..))
|
||||
import Data.Sequence as X (Seq)
|
||||
import Data.Semilattice.Lower as X (Lower(..))
|
||||
import Data.Set as X (Set)
|
||||
import Data.Sum as X (Sum, Element, Elements, (:<), (:<:), Apply (..), inject)
|
||||
import Data.Sum as X ((:<), (:<:), Apply (..), Element, Elements, Sum, inject)
|
||||
import Data.Text as X (Text)
|
||||
import Data.Word as X (Word8, Word16, Word32, Word64)
|
||||
import Data.Word as X (Word16, Word32, Word64, Word8)
|
||||
import Debug.Trace as X (traceM, traceShowM)
|
||||
|
||||
import Control.Exception as X hiding (Handler (..), assert, evaluate, throw, throwIO, throwTo)
|
||||
|
||||
@ -43,12 +43,12 @@ import Data.Bifunctor as X (Bifunctor (..))
|
||||
import Data.Bitraversable as X
|
||||
import Data.Foldable as X hiding (product, sum)
|
||||
import Data.Function as X (fix, on, (&))
|
||||
import Data.Functor as X (void, ($>))
|
||||
import Data.Functor as X (($>))
|
||||
import Data.Functor.Classes as X
|
||||
import Data.Functor.Classes.Generic as X
|
||||
import Data.Functor.Foldable as X (Base, Corecursive (..), Recursive (..))
|
||||
import Data.Hashable as X (Hashable, hash, hashUsing, hashWithSalt)
|
||||
import Data.Hashable.Lifted as X (Hashable1(..), hashWithSalt1)
|
||||
import Data.Hashable.Lifted as X (Hashable1 (..), hashWithSalt1)
|
||||
import Data.Monoid as X (First (..), Last (..), Monoid (..))
|
||||
import Data.Monoid.Generic as X
|
||||
import Data.Proxy as X (Proxy (..))
|
||||
|
@ -13,7 +13,6 @@ module Rendering.JSON
|
||||
, SomeJSON(..)
|
||||
) where
|
||||
|
||||
import Data.Aeson (ToJSON, toJSON, object, (.=))
|
||||
import Data.Aeson as A
|
||||
import Data.Blob
|
||||
import Data.JSON.Fields
|
||||
|
@ -10,7 +10,6 @@ import Prologue
|
||||
import qualified Data.Map.Strict as Map
|
||||
|
||||
import Control.Abstract as Abstract
|
||||
import Control.Abstract.ScopeGraph (runAllocator)
|
||||
import Control.Algebra
|
||||
import Control.Carrier.Error.Either
|
||||
import Control.Carrier.Reader
|
||||
|
@ -3,7 +3,6 @@ module Semantic.CLI (main) where
|
||||
|
||||
import qualified Control.Carrier.Parse.Measured as Parse
|
||||
import Control.Carrier.Reader
|
||||
import Control.Exception as Exc (displayException)
|
||||
import Data.Blob
|
||||
import Data.Blob.IO
|
||||
import qualified Data.Flag as Flag
|
||||
@ -28,7 +27,7 @@ import qualified System.Path as Path
|
||||
import qualified System.Path.PartClass as Path.PartClass
|
||||
|
||||
import Control.Concurrent (mkWeakThreadId, myThreadId)
|
||||
import Control.Exception (Exception (..), throwTo)
|
||||
import Control.Exception (throwTo)
|
||||
import Proto.Semantic_JSON ()
|
||||
import System.Mem.Weak (deRefWeak)
|
||||
import System.Posix.Signals
|
||||
|
@ -66,7 +66,7 @@ instance MonadUnliftIO m => MonadUnliftIO (LiftC m) where
|
||||
{-# INLINE withRunInIO #-}
|
||||
|
||||
newtype DistributeC m a = DistributeC { runDistributeC :: ReaderC (UnliftIO m) m a }
|
||||
deriving (Functor, Applicative, Monad, MonadIO)
|
||||
deriving (Functor, Applicative, Monad, MonadFail, MonadIO)
|
||||
|
||||
-- This can be simpler if we add an instance to fused-effects that takes
|
||||
-- care of this folderol for us (then we can justt derive the MonadUnliftIO instance)
|
||||
|
@ -46,7 +46,6 @@ import Control.Lens.Getter
|
||||
import Data.Abstract.Address.Hole as Hole
|
||||
import Data.Abstract.Address.Monovariant as Monovariant
|
||||
import Data.Abstract.Address.Precise as Precise
|
||||
import Data.Abstract.BaseError (BaseError (..))
|
||||
import Data.Abstract.Evaluatable
|
||||
import Data.Abstract.Heap
|
||||
import Data.Abstract.Module
|
||||
|
@ -14,7 +14,6 @@ import Data.Blob
|
||||
import Data.Language
|
||||
import qualified Data.Map as Map
|
||||
import Data.Project
|
||||
import GHC.Generics (Generic1)
|
||||
import Prologue
|
||||
import Semantic.Task.Files
|
||||
import qualified Source.Source as Source
|
||||
@ -55,7 +54,7 @@ runResolution :: ResolutionC m a -> m a
|
||||
runResolution = runResolutionC
|
||||
|
||||
newtype ResolutionC m a = ResolutionC { runResolutionC :: m a }
|
||||
deriving (Applicative, Functor, Monad, MonadIO)
|
||||
deriving (Applicative, Functor, Monad, MonadFail, MonadIO)
|
||||
|
||||
instance (Has Files sig m, MonadIO m) => Algebra (Resolution :+: sig) (ResolutionC m) where
|
||||
alg (R other) = ResolutionC . alg . handleCoercible $ other
|
||||
|
@ -1,4 +1,5 @@
|
||||
{-# LANGUAGE FlexibleContexts, FlexibleInstances, GADTs, GeneralizedNewtypeDeriving, KindSignatures, MultiParamTypeClasses, RecordWildCards, ScopedTypeVariables, TypeOperators, UndecidableInstances #-}
|
||||
{-# LANGUAGE FlexibleContexts, FlexibleInstances, GADTs, GeneralizedNewtypeDeriving, KindSignatures,
|
||||
MultiParamTypeClasses, RecordWildCards, ScopedTypeVariables, TypeOperators, UndecidableInstances #-}
|
||||
module Semantic.Task
|
||||
( TaskC
|
||||
, Level(..)
|
||||
@ -128,7 +129,7 @@ runTraceInTelemetry :: TraceInTelemetryC m a
|
||||
runTraceInTelemetry = runTraceInTelemetryC
|
||||
|
||||
newtype TraceInTelemetryC m a = TraceInTelemetryC { runTraceInTelemetryC :: m a }
|
||||
deriving (Applicative, Functor, Monad, MonadIO)
|
||||
deriving (Applicative, Functor, Monad, MonadFail, MonadIO)
|
||||
|
||||
instance Has Telemetry sig m => Algebra (Trace :+: sig) (TraceInTelemetryC m) where
|
||||
alg (R other) = TraceInTelemetryC . alg . handleCoercible $ other
|
||||
|
@ -68,9 +68,9 @@ runFiles :: FilesC m a -> m a
|
||||
runFiles = runFilesC
|
||||
|
||||
newtype FilesC m a = FilesC { runFilesC :: m a }
|
||||
deriving (Functor, Applicative, Monad, MonadIO)
|
||||
deriving (Functor, Applicative, Monad, MonadFail, MonadIO)
|
||||
|
||||
instance (Has (Error SomeException) sig m, MonadIO m) => Algebra (Files :+: sig) (FilesC m) where
|
||||
instance (Has (Error SomeException) sig m, MonadFail m, MonadIO m) => Algebra (Files :+: sig) (FilesC m) where
|
||||
alg (R other) = FilesC (alg (handleCoercible other))
|
||||
alg (L op) = case op of
|
||||
Read (FromPath path) k -> readBlobFromFile' path >>= k
|
||||
|
@ -148,7 +148,7 @@ runTelemetry :: LogQueue -> StatQueue -> TelemetryC m a -> m a
|
||||
runTelemetry logger statter = runReader (logger, statter) . runTelemetryC
|
||||
|
||||
newtype TelemetryC m a = TelemetryC { runTelemetryC :: ReaderC (LogQueue, StatQueue) m a }
|
||||
deriving (Applicative, Functor, Monad, MonadIO)
|
||||
deriving (Applicative, Functor, Monad, MonadFail, MonadIO)
|
||||
|
||||
instance (Algebra sig m, MonadIO m) => Algebra (Telemetry :+: sig) (TelemetryC m) where
|
||||
alg (L op) = do
|
||||
|
@ -32,7 +32,6 @@ import qualified Data.ByteString.Char8 as B
|
||||
import Data.List (intercalate)
|
||||
import Data.List.Split (splitOneOf)
|
||||
import qualified Data.Time.Clock as Time
|
||||
import qualified Data.Time.Clock.POSIX as Time (getCurrentTime)
|
||||
import Network.Socket
|
||||
(Socket (..), SocketType (..), addrAddress, addrFamily, close, connect, defaultProtocol, getAddrInfo, socket)
|
||||
import Network.Socket.ByteString
|
||||
|
@ -53,7 +53,7 @@ runHandler :: Handler m -> TimeoutC m a -> IO a
|
||||
runHandler h@(Handler handler) = handler . runReader h . runTimeoutC
|
||||
|
||||
newtype TimeoutC m a = TimeoutC { runTimeoutC :: ReaderC (Handler m) m a }
|
||||
deriving (Functor, Applicative, Monad, MonadIO)
|
||||
deriving (Functor, Applicative, Monad, MonadFail, MonadIO)
|
||||
|
||||
instance MonadUnliftIO m => MonadUnliftIO (TimeoutC m) where
|
||||
askUnliftIO = TimeoutC . ReaderC $ \(Handler h) ->
|
||||
|
@ -12,8 +12,6 @@ module Semantic.Util
|
||||
import Prelude hiding (readFile)
|
||||
|
||||
import Control.Abstract
|
||||
import Control.Abstract.Heap (runHeapError)
|
||||
import Control.Abstract.ScopeGraph (runScopeError)
|
||||
import Control.Carrier.Fresh.Strict
|
||||
import Control.Carrier.Parse.Simple
|
||||
import Control.Carrier.Lift
|
||||
@ -21,7 +19,6 @@ import Control.Carrier.Trace.Printing
|
||||
import Control.Carrier.Reader
|
||||
import Control.Carrier.Resumable.Either (SomeError (..))
|
||||
import Control.Carrier.State.Strict
|
||||
import Control.Exception (displayException)
|
||||
import Control.Lens.Getter
|
||||
import Data.Abstract.Address.Precise as Precise
|
||||
import Data.Abstract.Evaluatable
|
||||
|
@ -9,7 +9,6 @@ import Data.Syntax.Statement (StatementBlock(..))
|
||||
import qualified Data.Abstract.ScopeGraph as ScopeGraph (AccessControl(..))
|
||||
import Data.Abstract.Evaluatable
|
||||
import qualified Data.Abstract.Heap as Heap
|
||||
import Data.Abstract.Module (ModuleInfo (..))
|
||||
import qualified Data.Abstract.ModuleTable as ModuleTable
|
||||
import Data.Abstract.Number as Number
|
||||
import Data.Abstract.Package (PackageInfo (..))
|
||||
|
@ -5,7 +5,6 @@ import Assigning.Assignment
|
||||
import Data.AST
|
||||
import Data.Bifunctor (first)
|
||||
import Data.Ix
|
||||
import Data.Semigroup ((<>))
|
||||
import Data.Term
|
||||
import Data.Text as T (Text, length, words)
|
||||
import Data.Text.Encoding (encodeUtf8)
|
||||
|
@ -3,7 +3,6 @@ module Diffing.Algorithm.RWS.Spec (spec) where
|
||||
|
||||
import Data.Bifunctor
|
||||
import Data.Diff
|
||||
import Data.Functor.Listable (ListableSyntax)
|
||||
import Data.Sum
|
||||
import qualified Data.Syntax as Syntax
|
||||
import Data.Term
|
||||
|
@ -11,7 +11,6 @@ import Control.Effect.Parse
|
||||
import "semantic" Data.Graph (Graph (..), topologicalSort)
|
||||
import Data.Graph.ControlFlowVertex
|
||||
import qualified Data.Language as Language
|
||||
import Data.Maybe (fromJust)
|
||||
import Semantic.Graph
|
||||
import qualified System.Path as Path
|
||||
|
||||
|
@ -3,7 +3,7 @@ module Integration.Spec (testTree) where
|
||||
|
||||
import Control.Exception (throw)
|
||||
import Data.Foldable (find)
|
||||
import Data.List (union, concat, transpose)
|
||||
import Data.List (union, transpose)
|
||||
import qualified Data.ByteString.Lazy as BL
|
||||
import System.FilePath.Glob
|
||||
import System.IO.Unsafe
|
||||
|
@ -5,7 +5,6 @@ import Control.Carrier.Reader
|
||||
import Control.Exception (fromException)
|
||||
import SpecHelpers
|
||||
|
||||
import Data.Blob (NoLanguageForBlob (..))
|
||||
import Semantic.Api hiding (Blob)
|
||||
|
||||
-- we need some lenses here, oof
|
||||
|
@ -32,7 +32,6 @@ import Control.Carrier.Resumable.Either
|
||||
import Control.Carrier.Lift
|
||||
import Control.Carrier.State.Strict
|
||||
import Control.Exception (displayException)
|
||||
import Control.Monad ((>=>))
|
||||
import Control.Monad as X
|
||||
import Data.Abstract.Address.Precise as X
|
||||
import Data.Abstract.Evaluatable
|
||||
@ -41,7 +40,6 @@ import qualified Data.Abstract.Heap as Heap
|
||||
import Data.Abstract.Module as X
|
||||
import Data.Abstract.ModuleTable as X hiding (lookup)
|
||||
import Data.Abstract.Name as X
|
||||
import Data.Abstract.ScopeGraph (EdgeLabel(..))
|
||||
import qualified Data.Abstract.ScopeGraph as ScopeGraph
|
||||
import Data.Abstract.Value.Concrete (Value(..), ValueError, runValueError)
|
||||
import Data.Blob as X
|
||||
|
@ -8,7 +8,6 @@ import Control.Exception
|
||||
import Data.Bifunctor (first)
|
||||
import Data.List (intercalate)
|
||||
import Data.Maybe (listToMaybe)
|
||||
import GHC.Show as Show (showsPrec)
|
||||
import Test.Hspec
|
||||
import Test.Hspec.Core.Spec as Hspec
|
||||
import qualified Test.HUnit.Lang as HUnit
|
||||
|
Loading…
Reference in New Issue
Block a user