mirror of
https://github.com/github/semantic.git
synced 2024-12-25 07:55:12 +03:00
Pass Text to tree-sitter
This commit is contained in:
parent
905fdea0a2
commit
d6796afd6f
@ -17,7 +17,8 @@ import Range
|
||||
import Source
|
||||
import qualified Syntax
|
||||
import Foreign
|
||||
import Foreign.C.String
|
||||
import Foreign.C.String as FString (peekCString, withCStringLen)
|
||||
import Data.Text.Foreign as Foreign
|
||||
import qualified Syntax as S
|
||||
import Term
|
||||
import Text.Parser.TreeSitter hiding (Language(..))
|
||||
@ -30,12 +31,15 @@ treeSitterParser :: Language -> Ptr TS.Language -> Parser (Syntax.Syntax Text) (
|
||||
treeSitterParser language grammar blob = do
|
||||
document <- ts_document_new
|
||||
ts_document_set_language document grammar
|
||||
withCString (toString $ source blob) (\source -> do
|
||||
ts_document_set_input_string document source
|
||||
ts_document_parse document
|
||||
term <- documentToTerm language document blob
|
||||
ts_document_free document
|
||||
pure term)
|
||||
let termWithCString (source, len) = do
|
||||
ts_document_set_input_string2 document source len
|
||||
ts_document_parse document
|
||||
term <- documentToTerm language document blob
|
||||
ts_document_free document
|
||||
pure term
|
||||
if Source.null (source blob)
|
||||
then FString.withCStringLen "" termWithCString
|
||||
else Foreign.withCStringLen (toText $ source blob) termWithCString
|
||||
|
||||
-- | Return a parser for a tree sitter language & document.
|
||||
documentToTerm :: Language -> Ptr Document -> Parser (Syntax.Syntax Text) (Record '[Range, Category, SourceSpan])
|
||||
|
2
vendor/haskell-tree-sitter
vendored
2
vendor/haskell-tree-sitter
vendored
@ -1 +1 @@
|
||||
Subproject commit 8116ff5ec37cae106ed78771a9676057ad702b80
|
||||
Subproject commit cec2607f906245315e0fcea8be9754c563846860
|
Loading…
Reference in New Issue
Block a user