Skip to main content
Glama

CTS MCP Server

by EricA1019
lookaheaditerator.ccโ€ข4.45 kB
#include "./conversions.h" #include "./language.h" #include "./lookaheaditerator.h" #include "tree_sitter/api.h" #include <napi.h> using namespace Napi; namespace node_tree_sitter { void LookaheadIterator::Init(Napi::Env env, Napi::Object exports) { auto *data = env.GetInstanceData<AddonData>(); Function ctor = DefineClass(env, "LookaheadIterator", { InstanceAccessor("currentTypeId", &LookaheadIterator::CurrentTypeId, nullptr, napi_default_method), InstanceAccessor("currentType", &LookaheadIterator::CurrentType, nullptr, napi_default_method), InstanceMethod("reset", &LookaheadIterator::Reset, napi_default_method), InstanceMethod("resetState", &LookaheadIterator::ResetState, napi_default_method), InstanceMethod("_next", &LookaheadIterator::Next, napi_default_method), }); exports["LookaheadIterator"] = ctor; data->lookahead_iterator_constructor = Napi::Persistent(ctor); } LookaheadIterator::LookaheadIterator(const Napi::CallbackInfo &info) : Napi::ObjectWrap<LookaheadIterator>(info), iterator_(nullptr) { Napi::Env env = info.Env(); const TSLanguage *language = language_methods::UnwrapLanguage(info[0]); if (language == nullptr) { Napi::Error::New(env, "Missing language argument").ThrowAsJavaScriptException(); return; } if (!info[1].IsNumber()) { Napi::Error::New(env, "Missing state argument").ThrowAsJavaScriptException(); return; } TSStateId state = info[1].As<Napi::Number>().Uint32Value(); iterator_ = ts_lookahead_iterator_new(language, state); if (iterator_ == nullptr) { Napi::Error::New(env, "Invalid state argument").ThrowAsJavaScriptException(); return; } } LookaheadIterator::~LookaheadIterator() { ts_lookahead_iterator_delete(iterator_); } Napi::Value LookaheadIterator::NewInstance(Napi::Env env, TSLookaheadIterator *iterator) { auto *data = env.GetInstanceData<AddonData>(); if (iterator != nullptr) { Object self = data->lookahead_iterator_constructor.New({}); LookaheadIterator::Unwrap(self)->iterator_ = iterator; return self; } return env.Null(); } LookaheadIterator *LookaheadIterator::UnwrapLookaheadIterator(const Napi::Value &value) { auto *data = value.Env().GetInstanceData<AddonData>(); if (!value.IsObject()) { return nullptr; } auto js_iterator = value.As<Object>(); if (!js_iterator.InstanceOf(data->lookahead_iterator_constructor.Value())) { return nullptr; } return LookaheadIterator::Unwrap(js_iterator); } Napi::Value LookaheadIterator::CurrentType(const Napi::CallbackInfo &info) { LookaheadIterator *iterator = UnwrapLookaheadIterator(info.This()); return Napi::String::New(info.Env(), ts_lookahead_iterator_current_symbol_name(iterator->iterator_)); } Napi::Value LookaheadIterator::CurrentTypeId(const Napi::CallbackInfo &info) { LookaheadIterator *iterator = UnwrapLookaheadIterator(info.This()); return Napi::Number::New(info.Env(), ts_lookahead_iterator_current_symbol(iterator->iterator_)); } Napi::Value LookaheadIterator::Reset(const Napi::CallbackInfo &info) { LookaheadIterator *iterator = UnwrapLookaheadIterator(info.This()); const TSLanguage *language = language_methods::UnwrapLanguage(info[0]); if (language == nullptr) { Napi::Error::New(info.Env(), "Invalid language argument").ThrowAsJavaScriptException(); return info.Env().Undefined(); } if (!info[1].IsNumber()) { Napi::Error::New(info.Env(), "Missing state argument").ThrowAsJavaScriptException(); return info.Env().Undefined(); } TSStateId state = info[1].As<Napi::Number>().Uint32Value(); return Napi::Boolean::New(info.Env(), ts_lookahead_iterator_reset(iterator->iterator_, language, state)); } Napi::Value LookaheadIterator::ResetState(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); LookaheadIterator *iterator = UnwrapLookaheadIterator(info.This()); if (!info[0].IsNumber()) { Napi::Error::New(env, "Missing state argument").ThrowAsJavaScriptException(); return env.Undefined(); } TSStateId state = info[0].As<Napi::Number>().Uint32Value(); return Napi::Boolean::New(env, ts_lookahead_iterator_reset_state(iterator->iterator_, state)); } Napi::Value LookaheadIterator::Next(const Napi::CallbackInfo &info) { LookaheadIterator *iterator = UnwrapLookaheadIterator(info.This()); return Napi::Boolean::New(info.Env(), ts_lookahead_iterator_next(iterator->iterator_)); } } // namespace node_tree_sitter

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/EricA1019/CTS_MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server