Skip to content
This repository was archived by the owner on Apr 1, 2025. It is now read-only.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit eee82a0

Browse files
committedDec 18, 2021
semantic: Add semantic-c support
1 parent 893734c commit eee82a0

File tree

5 files changed

+21
-2
lines changed

5 files changed

+21
-2
lines changed
 

‎README.md

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ Available options:
3636

3737
| Language | Parse | AST Symbols† | Stack graphs |
3838
| :------------- | :---: | :---: | :---: |
39+
| C || ⬜️ | |
3940
| Ruby ||| |
4041
| JavaScript ||| |
4142
| TypeScript ||| 🚧 |

‎semantic/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ haskell_library(
5656
"//:deepseq",
5757
"//:filepath",
5858
"//:template-haskell",
59+
"//semantic-c",
5960
"//semantic-codeql",
6061
"//semantic-go",
6162
"//semantic-java",

‎semantic/semantic.cabal

+1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ library
125125
, proto-lens >= 0.5 && < 0.8
126126
, semantic-analysis ^>= 0
127127
, semantic-ast
128+
, semantic-c ^>= 0
128129
, semantic-codeql ^>= 0
129130
, semantic-go ^>= 0
130131
, semantic-java ^>= 0

‎semantic/src/Parsing/Parser.hs

+8-2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import AST.Unmarshal
3030
import Data.Map (Map)
3131
import qualified Data.Map as Map
3232
import Foreign.Ptr
33+
import qualified Language.C as CPrecise
3334
import qualified Language.CodeQL as CodeQLPrecise
3435
import qualified Language.Go as GoPrecise
3536
import qualified Language.Java as Java
@@ -80,6 +81,9 @@ data Parser term where
8081
data SomeParser c a where
8182
SomeParser :: c t => Parser (t a) -> SomeParser c a
8283

84+
cParser :: c CPrecise.Term => (Language, SomeParser c Loc)
85+
cParser = (C, SomeParser (UnmarshalParser @CPrecise.Term CPrecise.tree_sitter_c))
86+
8387
goParser :: c GoPrecise.Term => (Language, SomeParser c Loc)
8488
goParser = (Go, SomeParser (UnmarshalParser @GoPrecise.Term GoPrecise.tree_sitter_go))
8589

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

116120
-- | The canonical set of parsers producing precise terms.
117121
preciseParsers
118-
:: ( c Java.Term
122+
:: ( c CPrecise.Term
123+
, c Java.Term
119124
, c JSON.Term
120125
, c PythonPrecise.Term
121126
, c CodeQLPrecise.Term
@@ -127,7 +132,8 @@ preciseParsers
127132
)
128133
=> Map Language (SomeParser c Loc)
129134
preciseParsers = Map.fromList
130-
[ goParser
135+
[ cParser
136+
, goParser
131137
, javascriptParser
132138
, jsonParser
133139
, jsxParser

‎semantic/src/Semantic/Api/Terms.hs

+10
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import Data.ByteString.Builder
2424
import Data.Either
2525
import Data.Foldable (fold)
2626
import Data.Map.Strict (Map)
27+
import qualified Language.C as C
2728
import qualified Language.CodeQL as CodeQL
2829
import qualified Language.Go as Go
2930
import qualified Language.Java as Java
@@ -74,6 +75,9 @@ showTermParsers = preciseParsers
7475
class ShowTerm term where
7576
showTerm :: (Has (Reader Config) sig m) => term Loc -> m Builder
7677

78+
instance ShowTerm C.Term where
79+
showTerm = serialize Show . void . C.getTerm
80+
7781
instance ShowTerm Go.Term where
7882
showTerm = serialize Show . void . Go.getTerm
7983

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

114+
instance JSONTerm C.Term where
115+
jsonTerm = serialize Marshal . C.getTerm
116+
110117
instance JSONTerm Go.Term where
111118
jsonTerm = serialize Marshal . Go.getTerm
112119

@@ -140,6 +147,9 @@ sexprTermParsers = preciseParsers
140147
class SExprTerm term where
141148
sexprTerm :: term Loc -> Builder
142149

150+
instance SExprTerm C.Term where
151+
sexprTerm = SExpr.Precise.serializeSExpression . C.getTerm
152+
143153
instance SExprTerm Go.Term where
144154
sexprTerm = SExpr.Precise.serializeSExpression . Go.getTerm
145155

0 commit comments

Comments
 (0)
This repository has been archived.