mirror of
https://github.com/github/semantic.git
synced 2024-12-01 09:15:01 +03:00
65 lines
2.6 KiB
Haskell
65 lines
2.6 KiB
Haskell
module Main where
|
|
|
|
import Diff
|
|
import Patch
|
|
import Term
|
|
import Syntax
|
|
import Control.Comonad.Cofree
|
|
import Control.Monad.Free
|
|
import Data.Map
|
|
import Data.Maybe
|
|
import Data.Set
|
|
import Language.Haskell.Parser
|
|
import Language.Haskell.Syntax
|
|
import System.Environment
|
|
|
|
import GHC.Generics
|
|
import Foreign
|
|
import Foreign.CStorable
|
|
import Foreign.C.Types
|
|
import Foreign.C.String
|
|
|
|
data TSLanguage = TsLanguage deriving (Show, Eq, Generic, CStorable)
|
|
foreign import ccall "prototype/doubt-difftool/doubt-difftool-Bridging-Header.h ts_language_c" ts_language_c :: IO (Foreign.Ptr TSLanguage)
|
|
|
|
data TSDocument = TsDocument deriving (Show, Eq, Generic, CStorable)
|
|
foreign import ccall "prototype/External/tree-sitter/include/tree_sitter/runtime.h ts_document_make" ts_document_make :: IO (Foreign.Ptr TSDocument)
|
|
foreign import ccall "prototype/External/tree-sitter/include/tree_sitter/runtime.h ts_document_set_language" ts_document_set_language :: Foreign.Ptr TSDocument -> Foreign.Ptr TSLanguage -> IO ()
|
|
foreign import ccall "prototype/External/tree-sitter/include/tree_sitter/runtime.h ts_document_set_input_string" ts_document_set_input_string :: Foreign.Ptr TSDocument -> CString -> IO ()
|
|
foreign import ccall "prototype/External/tree-sitter/include/tree_sitter/runtime.h ts_document_parse" ts_document_parse :: Foreign.Ptr TSDocument -> IO ()
|
|
foreign import ccall "prototype/External/tree-sitter/include/tree_sitter/runtime.h ts_document_free" ts_document_free :: Foreign.Ptr TSDocument -> IO ()
|
|
|
|
data TSLength = TsLength { bytes :: CSize, chars :: CSize }
|
|
deriving (Show, Eq, Generic, CStorable)
|
|
data TSNode = TsNode deriving (Show, Eq, Generic, CStorable)
|
|
foreign import ccall "prototype/External/tree-sitter/include/tree_sitter/runtime.h ts_document_root_node" ts_document_root_node :: Foreign.Ptr TSDocument -> IO (Foreign.Ptr TSNode)
|
|
|
|
main :: IO ()
|
|
main = do
|
|
-- args <- getArgs
|
|
-- return f
|
|
-- let (a, b) = files args in do
|
|
-- -- a' <- parseModuleFile a
|
|
-- -- b' <- parseModuleFile b
|
|
-- return f
|
|
-- return ()
|
|
document <- ts_document_make
|
|
language <- ts_language_c
|
|
ts_document_set_language document language
|
|
source <- newCString ""
|
|
ts_document_set_input_string document source
|
|
ts_document_parse document
|
|
root <- ts_document_root_node document
|
|
ts_document_free document
|
|
free source
|
|
putStrLn $ "cSizeOf " ++ show (cSizeOf document)
|
|
|
|
parseModuleFile :: FilePath -> IO (ParseResult HsModule)
|
|
parseModuleFile file = do
|
|
contents <- readFile file
|
|
return $ parseModule contents
|
|
|
|
files (a : as) = (a, file as) where
|
|
file (a : as) = a
|
|
files [] = error "expected two files to diff"
|