diff --git a/tree-sitter/ChangeLog.md b/tree-sitter/ChangeLog.md index 1306fe22..9c1d9ef5 100644 --- a/tree-sitter/ChangeLog.md +++ b/tree-sitter/ChangeLog.md @@ -1,5 +1,6 @@ ### v0.9.0.4 +* Add `isMissing` flag for nodes. * Add bindings for the edit API. ### v0.9.0.3 diff --git a/tree-sitter/src/TreeSitter/Node.hs b/tree-sitter/src/TreeSitter/Node.hs index da347c30..063f3404 100644 --- a/tree-sitter/src/TreeSitter/Node.hs +++ b/tree-sitter/src/TreeSitter/Node.hs @@ -30,6 +30,7 @@ data Node = Node , nodeFieldName :: !CString , nodeIsNamed :: !CBool , nodeIsExtra :: !CBool + , nodeIsMissing :: !CBool } deriving (Show, Eq, Generic) @@ -85,8 +86,9 @@ instance Storable Node where <*> peekStruct <*> peekStruct <*> peekStruct + <*> peekStruct {-# INLINE peek #-} - poke ptr (Node n t s ep eb c fn nn ne) = flip evalStruct ptr $ do + poke ptr (Node n t s ep eb c fn nn ne nm) = flip evalStruct ptr $ do pokeStruct n pokeStruct t pokeStruct s @@ -96,6 +98,7 @@ instance Storable Node where pokeStruct fn pokeStruct nn pokeStruct ne + pokeStruct nm {-# INLINE poke #-} instance Storable TSPoint where diff --git a/tree-sitter/src/bridge.c b/tree-sitter/src/bridge.c index cee05c01..8eb5a548 100644 --- a/tree-sitter/src/bridge.c +++ b/tree-sitter/src/bridge.c @@ -13,6 +13,7 @@ typedef struct Node { const char *fieldName; bool isNamed; bool isExtra; + bool isMissing; } Node; void log_to_stdout(void *payload, TSLogType type, const char *message) { @@ -33,6 +34,7 @@ static inline void ts_node_poke(const char *fieldName, TSNode node, Node *out) { out->fieldName = fieldName; out->isNamed = ts_node_is_named(node); out->isExtra = ts_node_is_extra(node); + out->isMissing = ts_node_is_missing(node); } void ts_node_poke_p(TSNode *node, Node *out) { diff --git a/tree-sitter/test/TreeSitter/Example.hs b/tree-sitter/test/TreeSitter/Example.hs index 2ad9d6d7..015b3bbc 100644 --- a/tree-sitter/test/TreeSitter/Example.hs +++ b/tree-sitter/test/TreeSitter/Example.hs @@ -30,8 +30,8 @@ prop_Node_sizeOf = property $ sizeOf (undefined :: Node) === fromIntegral sizeof_node prop_Node_roundtrips = property $ do - peeked <- liftIO (with (Node (TSNode 1 (TSPoint 2 3) 4 nullPtr nullPtr) nullPtr 1 (TSPoint 4 5) 7 8 nullPtr 9 10) peek) - peeked === Node (TSNode 1 (TSPoint 2 3) 4 nullPtr nullPtr) nullPtr 1 (TSPoint 4 5) 7 8 nullPtr 9 10 + peeked <- liftIO (with (Node (TSNode 1 (TSPoint 2 3) 4 nullPtr nullPtr) nullPtr 1 (TSPoint 4 5) 7 8 nullPtr 9 10 11) peek) + peeked === Node (TSNode 1 (TSPoint 2 3) 4 nullPtr nullPtr) nullPtr 1 (TSPoint 4 5) 7 8 nullPtr 9 10 11 prop_TSTreeCursor_sizeOf = property $ sizeOfCursor === fromIntegral sizeof_tstreecursor