#include #include #include "slang-wasm.h" using namespace emscripten; EMSCRIPTEN_BINDINGS(slang) { constant("SLANG_OK", SLANG_OK); function( "createGlobalSession", &slang::wgsl::createGlobalSession, return_value_policy::take_ownership()); function( "getLastError", &slang::wgsl::getLastError); function( "getCompileTargets", &slang::wgsl::getCompileTargets, return_value_policy::take_ownership()); class_("GlobalSession") .function( "createSession", &slang::wgsl::GlobalSession::createSession, return_value_policy::take_ownership()); class_("Session") .function( "loadModuleFromSource", &slang::wgsl::Session::loadModuleFromSource, return_value_policy::take_ownership()) .function( "createCompositeComponentType", &slang::wgsl::Session::createCompositeComponentType, return_value_policy::take_ownership()); class_("ComponentType") .function( "link", &slang::wgsl::ComponentType::link, return_value_policy::take_ownership()) .function( "getEntryPointCode", &slang::wgsl::ComponentType::getEntryPointCode) .function( "getEntryPointCodeBlob", &slang::wgsl::ComponentType::getEntryPointCodeBlob) .function( "getTargetCodeBlob", &slang::wgsl::ComponentType::getTargetCodeBlob) .function( "getTargetCode", &slang::wgsl::ComponentType::getTargetCode); class_>("Module") .function( "findEntryPointByName", &slang::wgsl::Module::findEntryPointByName, return_value_policy::take_ownership()) .function( "findAndCheckEntryPoint", &slang::wgsl::Module::findAndCheckEntryPoint, return_value_policy::take_ownership()) .function( "getDefinedEntryPoint", &slang::wgsl::Module::getDefinedEntryPoint, return_value_policy::take_ownership()) .function( "getDefinedEntryPointCount", &slang::wgsl::Module::getDefinedEntryPointCount); value_object("Error") .field("type", &slang::wgsl::Error::type) .field("result", &slang::wgsl::Error::result) .field("message", &slang::wgsl::Error::message); class_>("EntryPoint") .function( "getName", &slang::wgsl::EntryPoint::getName, allow_raw_pointers()); class_("CompileTargets") .function( "findCompileTarget", &slang::wgsl::CompileTargets::findCompileTarget, return_value_policy::take_ownership()); register_vector("ComponentTypeList"); register_vector("StringList"); register_optional>(); value_object("Position") .field("line", &slang::wgsl::lsp::Position::line) .field("character", &slang::wgsl::lsp::Position::character); value_object("Range") .field("start", &slang::wgsl::lsp::Range::start) .field("end", &slang::wgsl::lsp::Range::end); value_object("Location") .field("uri", &slang::wgsl::lsp::Location::uri) .field("range", &slang::wgsl::lsp::Location::range); register_vector("LocationList"); register_optional>(); value_object("TextEdit") .field("range", &slang::wgsl::lsp::TextEdit::range) .field("text", &slang::wgsl::lsp::TextEdit::text); register_optional(); register_vector("TextEditList"); register_optional>(); value_object("MarkupContent") .field("kind", &slang::wgsl::lsp::MarkupContent::kind) .field("value", &slang::wgsl::lsp::MarkupContent::value); register_optional(); value_object("Hover") .field("contents", &slang::wgsl::lsp::Hover::contents) .field("range", &slang::wgsl::lsp::Hover::range); register_optional(); value_object("CompletionItem") .field("label", &slang::wgsl::lsp::CompletionItem::label) .field("kind", &slang::wgsl::lsp::CompletionItem::kind) .field("detail", &slang::wgsl::lsp::CompletionItem::detail) .field("documentation", &slang::wgsl::lsp::CompletionItem::documentation) .field("textEdit", &slang::wgsl::lsp::CompletionItem::textEdit) .field("data", &slang::wgsl::lsp::CompletionItem::data) .field("commitCharacters", &slang::wgsl::lsp::CompletionItem::commitCharacters); register_optional(); register_vector("CompletionItemList"); register_optional>(); value_object("CompletionContext") .field("triggerKind", &slang::wgsl::lsp::CompletionContext::triggerKind) .field("triggerCharacter", &slang::wgsl::lsp::CompletionContext::triggerCharacter); value_array>("array_uint_2") .element(emscripten::index<0>()) .element(emscripten::index<1>()); value_object("ParameterInformation") .field("label", &slang::wgsl::lsp::ParameterInformation::label) .field("documentation", &slang::wgsl::lsp::ParameterInformation::documentation); register_vector("ParameterInformationList"); value_object("SignatureInformation") .field("label", &slang::wgsl::lsp::SignatureInformation::label) .field("documentation", &slang::wgsl::lsp::SignatureInformation::documentation) .field("parameters", &slang::wgsl::lsp::SignatureInformation::parameters); register_vector("SignatureInformationList"); value_object("SignatureHelp") .field("signatures", &slang::wgsl::lsp::SignatureHelp::signatures) .field("activeSignature", &slang::wgsl::lsp::SignatureHelp::activeSignature) .field("activeParameter", &slang::wgsl::lsp::SignatureHelp::activeParameter); register_optional(); value_object("DocumentSymbol") .field("name", &slang::wgsl::lsp::DocumentSymbol::name) .field("detail", &slang::wgsl::lsp::DocumentSymbol::detail) .field("kind", &slang::wgsl::lsp::DocumentSymbol::kind) .field("range", &slang::wgsl::lsp::DocumentSymbol::range) .field("selectionRange", &slang::wgsl::lsp::DocumentSymbol::selectionRange) .field("children", &slang::wgsl::lsp::DocumentSymbol::children); register_vector("DocumentSymbolList"); register_optional>(); value_object("Diagnostics") .field("code", &slang::wgsl::lsp::Diagnostics::code) .field("range", &slang::wgsl::lsp::Diagnostics::range) .field("severity", &slang::wgsl::lsp::Diagnostics::severity) .field("message", &slang::wgsl::lsp::Diagnostics::message); register_vector("DiagnosticsList"); register_optional>(); register_vector("Uint32List"); register_optional>(); class_("LanguageServer") .function( "didOpenTextDocument", &slang::wgsl::lsp::LanguageServer::didOpenTextDocument, allow_raw_pointers()) .function( "didCloseTextDocument", &slang::wgsl::lsp::LanguageServer::didCloseTextDocument, allow_raw_pointers()) .function( "didChangeTextDocument", &slang::wgsl::lsp::LanguageServer::didChangeTextDocument, allow_raw_pointers()) .function( "hover", &slang::wgsl::lsp::LanguageServer::hover, allow_raw_pointers()) .function( "gotoDefinition", &slang::wgsl::lsp::LanguageServer::gotoDefinition, allow_raw_pointers()) .function( "completion", &slang::wgsl::lsp::LanguageServer::completion, allow_raw_pointers()) .function( "completionResolve", &slang::wgsl::lsp::LanguageServer::completionResolve, allow_raw_pointers()) .function( "semanticTokens", &slang::wgsl::lsp::LanguageServer::semanticTokens, allow_raw_pointers()) .function( "signatureHelp", &slang::wgsl::lsp::LanguageServer::signatureHelp, allow_raw_pointers()) .function( "documentSymbol", &slang::wgsl::lsp::LanguageServer::documentSymbol, allow_raw_pointers()) .function( "getDiagnostics", &slang::wgsl::lsp::LanguageServer::getDiagnostics, allow_raw_pointers()); function( "createLanguageServer", &slang::wgsl::lsp::createLanguageServer, return_value_policy::take_ownership()); }