NAME

    Text::Treesitter - Perl binding for tree-sitter

SYNOPSIS

       use Text::Treesitter;
    
       my $ts = Text::Treesitter->new(
          lang_name => "perl",
       );
    
       my $tree = $ts->parse_string( $input );
    
       my $root = $tree->root_node;
    
       ...

DESCRIPTION

    This module provides several classes and utilities that wrap the
    tree-sitter parser library. A toplevel class is provided by this module
    which wraps the functionallity of several other classes, which are also
    available directly in the following modules:

      * Text::Treesitter::Language - represents a tree-sitter language
      grammar

      * Text::Treesitter::Node - an element of a tree-sitter parse result

      * Text::Treesitter::Parser - parse some input text according to a
      tree-sitter grammar

      * Text::Treesitter::Query - represents a set of tree-sitter query
      patterns

      * Text::Treesitter::QueryCursor - stores the result of a tree-sitter
      node query

      * Text::Treesitter::QueryMatch - stores the result of a tree-sitter
      query pattern match

      * Text::Treesitter::Tree - holds the result of a tree-sitter parse
      operation

CONSTRUCTOR

 new

       $ts = Text::Treesitter->new( %params );

    Returns a new Text::Treesitter instance. Takes the following named
    parameters:

    lang => Text::Treesitter::Language

      Optional. An instance of Text::Treesitter::Language to use in the
      parser.

    lang_name => STRING

      Optional. Gives the short name of the tree-sitter language grammar.

      Exactly one of lang or lang_name must be provided.

    lang_lib => STRING

      Gives the path to the compiled object file which contains the
      language grammar. Optional; if not provided it will be presumed to be
      named based on the language name, as tree-sitter-$LANG.so within the
      language directory. If the path does not contain a / character, it
      will have the language directory path prepended onto it.

    lang_dir => STRING

      Gives the directory name in which to find the compiled object file
      which contains the language grammar, or the sources to build it from.

      If not specified, a search will be made for a directory named
      tree-sitter-$LANG among any of the user's configured parser
      directories, as given by the tree-sitter config file.

METHODS

 treesitter_config

       $config = Text::Treesitter->treesitter_config;

    Returns a data structure containing the user's tree-sitter config,
    parsed from $HOME/.config/tree-sitter/config.json if it exists. If
    there is no file then undef is returned.

    This is usable as a class method.

 parser

       $parser = $ts->parser;

    Returns the Text::Treesitter::Parser instance being used. The
    constructor ensures that this will have a language set on it.

 lang

       $lang = $ts->lang;

    Returns the Text::Treesitter::Language instance being used by the
    parser.

 lang_dir

       $dir = $ts->lang_dir;

    Returns the directory path to the language directory. This is either
    the configured path that was set by the lang_dir parameter, or
    discovered by searching if one was not.

 parse_string

       $tree = $ts->parse_string( $str );

    Parses a given input string using the internal parser, returning a node
    tree as an instance of Text::Treesitter::Tree.

 parse_string_range

       $tree = $ts->parse_string_range( $str, %options );

    Since version 0.10.

    Parses a given input string using the internal parser, within the given
    byte range. Returns a node tree as an instance of
    Text::Treesitter::Tree.

    Takes the following named options:

    start_byte

    end_byte

      The start and end position within the string, in byte counts.

    start_row

    start_column

      Since version 0.11.

      Optionally, the logical position within the original source that
      corresponds to the start byte. These values don't affect parsing as
      such, but will be reflected in the position offsets of the nodes in
      the returned tree.

    node

      Since version 0.11.

      Alternative to specifying the four values given above, where they are
      all taken from the given Text::Treesitter::Node instance directly.

 load_query_string

       $query = $ts->load_query_string( $str );

    Creates a Text::Treesitter::Query instance by compiling the match
    patterns given in the source string for the language used by the
    parser.

 query_file_path

       $path = %ts->query_file_path( $name );

    If a file exists of the given path, then it is returned directly.
    Otherwise, returns a path within the language directory given by
    lang_dir; either directly or within a subdirectory called queries/.

 load_query_file

       $query = $ts->load_query_file( $name );

    Creates a Text::Treesitter::Query instance by loading the text from the
    given path, and then compiling it as per "load_query_string". The name
    is resolved into a path by using "query_file_path".

TODO

    The following C library functions are currently unhandled:

       the entire TSTreeCursor API

AUTHOR

    Paul Evans <leonerd@leonerd.org.uk>