Skip to content

marcel0ll/tree-sitter-visitor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 

Repository files navigation

tree-sitter-visitor

version: v0.0.3

An visitor pattern implementation for tree-sitter.

Dependencies

tree-sitter

Usage

Check jsminify for how to use this

TO DO

  • better API to register multiple types for the same function

  • can this be "imported" as an npm package, similar to 'tree-sitter'?

  • Can context be extensible? should it?

  • Diff file against a cached version(might even be a file stored in a SHA-1 git ref?), used it as 'edits' regenerate just parts of the out file (not sure how to relate AST to generated file)... if for some reason you have to regenerate entire file to create mapping, ignore this

API

// struct to hold the visiting context(.source, .visitors)
struct visit_context;

// struct to hold a visitor(.type, .visit)
struct visitor;

// creates new visit_context
struct visit_context * context_new(const char * source, int debug);

// frees memory for context
void context_delete(struct visit_context * context);

// returns source from visit_context
const char * context_get_source(struct visit_context * context);

// set both type 'enter' and 'exit' visit function
bool context_set_type_visitor(struct visit_context * context, const char * type, void (*enter)(), void (*exit)());
// set type 'enter' visit function
bool context_set_type_enter(struct visit_context * context, const char * type, void (*enter)());
// set type 'exit' visit function
bool context_set_type_exit(struct visit_context * context, const char * type, void (*exit)());

// set for each type in types both 'enter' and 'exit' visit function
void context_set_types_visitor(struct visit_context * context, const char * types[], void (*enter)(), void (*exit)());
// set for each type in types 'enter' visit function
bool context_set_types_enter(struct visit_context * context, const char * types[], void (*enter)());
// set for each type in types 'exit' visit function
bool context_set_types_exit(struct visit_context * context, const char * types[], void (*exit)());

// returns visitors from a visit_context
struct visitor * context_get_visitors(struct visit_context * context);

// function to return a string from a bigger string from index start to end
char * get_text(uint32_t start, uint32_t end, const char * source);

// function to return the source text from a node 
char * ts_node_text (TSNode node, struct visit_context * source);

// visit the parsed tree in pre order
void visit_tree (TSNode node, struct visit_context * context);

// Opens a file and returns its content
const char * get_source(const char * path);

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages