Skip to content

Commit

Permalink
semantic: Add semantic-c support
Browse files Browse the repository at this point in the history
  • Loading branch information
jtojnar committed Dec 18, 2021
1 parent 80e294d commit a5cba44
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 2 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ Available options:

| Language | Parse | AST Symbols† | Stack graphs |
| :------------- | :---: | :---: | :---: |
| C || ⬜️ | |
| Ruby ||| |
| JavaScript ||| |
| TypeScript ||| 🚧 |
Expand Down
1 change: 1 addition & 0 deletions semantic/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ haskell_library(
"//:deepseq",
"//:filepath",
"//:template-haskell",
"//semantic-c",
"//semantic-codeql",
"//semantic-go",
"//semantic-java",
Expand Down
1 change: 1 addition & 0 deletions semantic/semantic.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ library
, proto-lens >= 0.5 && < 0.8
, semantic-analysis ^>= 0
, semantic-ast
, semantic-c ^>= 0
, semantic-codeql ^>= 0
, semantic-go ^>= 0
, semantic-java ^>= 0
Expand Down
10 changes: 8 additions & 2 deletions semantic/src/Parsing/Parser.hs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import AST.Unmarshal
import Data.Map (Map)
import qualified Data.Map as Map
import Foreign.Ptr
import qualified Language.C as CPrecise
import qualified Language.CodeQL as CodeQLPrecise
import qualified Language.Go as GoPrecise
import qualified Language.Java as Java
Expand Down Expand Up @@ -80,6 +81,9 @@ data Parser term where
data SomeParser c a where
SomeParser :: c t => Parser (t a) -> SomeParser c a

cParser :: c CPrecise.Term => (Language, SomeParser c Loc)
cParser = (C, SomeParser (UnmarshalParser @CPrecise.Term CPrecise.tree_sitter_c))

goParser :: c GoPrecise.Term => (Language, SomeParser c Loc)
goParser = (Go, SomeParser (UnmarshalParser @GoPrecise.Term GoPrecise.tree_sitter_go))

Expand Down Expand Up @@ -115,7 +119,8 @@ typescriptParser = (TypeScript, SomeParser (UnmarshalParser @TypeScriptPrecise.T

-- | The canonical set of parsers producing precise terms.
preciseParsers
:: ( c Java.Term
:: ( c CPrecise.Term
, c Java.Term
, c JSON.Term
, c PythonPrecise.Term
, c CodeQLPrecise.Term
Expand All @@ -127,7 +132,8 @@ preciseParsers
)
=> Map Language (SomeParser c Loc)
preciseParsers = Map.fromList
[ goParser
[ cParser
, goParser
, javascriptParser
, jsonParser
, jsxParser
Expand Down
10 changes: 10 additions & 0 deletions semantic/src/Semantic/Api/Terms.hs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import Data.ByteString.Builder
import Data.Either
import Data.Foldable (fold)
import Data.Map.Strict (Map)
import qualified Language.C as C
import qualified Language.CodeQL as CodeQL
import qualified Language.Go as Go
import qualified Language.Java as Java
Expand Down Expand Up @@ -74,6 +75,9 @@ showTermParsers = preciseParsers
class ShowTerm term where
showTerm :: (Has (Reader Config) sig m) => term Loc -> m Builder

instance ShowTerm C.Term where
showTerm = serialize Show . void . C.getTerm

instance ShowTerm Go.Term where
showTerm = serialize Show . void . Go.getTerm

Expand Down Expand Up @@ -107,6 +111,9 @@ jsonTermParsers = preciseParsers
class JSONTerm term where
jsonTerm :: (Has (Reader Config) sig m) => term Loc -> m Builder

instance JSONTerm C.Term where
jsonTerm = serialize Marshal . C.getTerm

instance JSONTerm Go.Term where
jsonTerm = serialize Marshal . Go.getTerm

Expand Down Expand Up @@ -140,6 +147,9 @@ sexprTermParsers = preciseParsers
class SExprTerm term where
sexprTerm :: term Loc -> Builder

instance SExprTerm C.Term where
sexprTerm = SExpr.Precise.serializeSExpression . C.getTerm

instance SExprTerm Go.Term where
sexprTerm = SExpr.Precise.serializeSExpression . Go.getTerm

Expand Down

0 comments on commit a5cba44

Please sign in to comment.