-- Abstract :
--
-- Ada binding to tree-sitter runtime.
--
-- Copyright (C) 2020, 2022, 2023 Free Software Foundation All Rights Reserved.
--
-- This library is free software; you can redistribute it and/or modify it
-- under terms of the GNU General Public License as published by the Free
-- Software Foundation; either version 3, or (at your option) any later
-- version. This library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-
-- TABILITY or FITNESS FOR A PARTICULAR PURPOSE.
pragma License (Modified_GPL);
with Ada.Finalization;
with GNATCOLL.Mmap;
with Interfaces.C.Extensions;
package WisiToken.Parse.Tree_Sitter is
type Language_Function is access function return Interfaces.C.Extensions.void_ptr
with Convention => C;
type Syntax_Tree_Node is private;
-- Can't be tagged because it is a C type.
C_Error_Token_ID : constant Interfaces.Unsigned_16 := 16#ffff#;
-- parser.h ts_builtin_sym_error; not in Token_ID range.
Error_Token_ID : constant Token_ID := Invalid_Token_ID - 1;
Tree_Sitter_EOI : constant Token_ID := 0;
function ID (Node : in Syntax_Tree_Node) return Token_ID;
function Byte_Region (Node : in Syntax_Tree_Node) return Buffer_Region;
type Node_Array is array (Positive_Index_Type range <>) of Syntax_Tree_Node;
function Get_Terminals
(Node : in Syntax_Tree_Node;
Descriptor : in WisiToken.Descriptor)
return Node_Array;
type Syntax_Tree is tagged private;
-- Tagged for Object.Method notation.
function Root (Tree : in Syntax_Tree) return Syntax_Tree_Node;
type Parser (Language : Language_Function) is new Ada.Finalization.Limited_Controlled with private;
overriding procedure Initialize (Parser : in out Tree_Sitter.Parser);
overriding procedure Finalize (Parser : in out Tree_Sitter.Parser);
procedure Parse
(Parser : in out Tree_Sitter.Parser;
File_Name : in String);
-- FIXME: need other sources; string, emacs module access emacs source buffer
function Buffer_Text (Parser : in Tree_Sitter.Parser; Region : in Buffer_Region) return String;
function Tree (Parser : in Tree_Sitter.Parser) return Syntax_Tree'Class;
private
subtype TS_Tree is Interfaces.C.Extensions.void_ptr;
type Context_Array_4 is array (1 .. 4) of Interfaces.Unsigned_32;
subtype Token_ID_Ptr is Interfaces.C.Extensions.void_ptr;
type Syntax_Tree_Node is record
-- tree-sitter api.h TSNode
Context : Context_Array_4;
Tree : TS_Tree;
ID : Token_ID_Ptr;
end record
with Convention => C;
type Syntax_Tree is tagged record
TS_Tree : Tree_Sitter.TS_Tree;
end record;
type Parser (Language : Language_Function) is new Ada.Finalization.Limited_Controlled with record
TS_Parser : Interfaces.C.Extensions.void_ptr;
File : GNATCOLL.Mmap.Mapped_File;
Region : GNATCOLL.Mmap.Mapped_Region;
Buffer_Last : Positive;
Tree : Syntax_Tree;
end record;
function Tree (Parser : in Tree_Sitter.Parser) return Syntax_Tree'Class
is (Parser.Tree);
end WisiToken.Parse.Tree_Sitter;