diff --git a/editor/CMakeLists.txt b/editor/CMakeLists.txt index 96cf8e4..63b1bd3 100644 --- a/editor/CMakeLists.txt +++ b/editor/CMakeLists.txt @@ -4738,4 +4738,13 @@ target_link_libraries(step650_test PRIVATE tree_sitter_javascript tree_sitter_typescript tree_sitter_java tree_sitter_rust tree_sitter_go) +add_executable(step651_test tests/step651_test.cpp) +target_include_directories(step651_test PRIVATE src) +target_link_libraries(step651_test PRIVATE + nlohmann_json::nlohmann_json + unofficial::tree-sitter::tree-sitter + tree_sitter_python tree_sitter_cpp tree_sitter_elisp + tree_sitter_javascript tree_sitter_typescript + tree_sitter_java tree_sitter_rust tree_sitter_go) + # Step 12: Dear ImGui shell scaffolding created (main.cpp exists but not built due to dependencies) diff --git a/editor/src/LanguageGeneratorPluginManifest.h b/editor/src/LanguageGeneratorPluginManifest.h new file mode 100644 index 0000000..7167a62 --- /dev/null +++ b/editor/src/LanguageGeneratorPluginManifest.h @@ -0,0 +1,30 @@ +#pragma once +// Step 651: Language generator plugin manifest + +#include +#include + +struct PluginManifest { + std::string pluginName; + std::string sharedObject; + std::string generatorClass; + std::vector languages; +}; + +class LanguageGeneratorPluginManifest { +public: + static bool isValid(const PluginManifest& m) { + return !m.pluginName.empty() && !m.sharedObject.empty() && + !m.generatorClass.empty() && !m.languages.empty(); + } + + static bool isPluginFile(const std::string& fileName) { + return fileName.rfind("whetstone-plugin-", 0) == 0 && + fileName.size() > 3 && + fileName.substr(fileName.size() - 3) == ".so"; + } + + static std::string symbolName(const PluginManifest& m) { + return "create_" + m.generatorClass; + } +}; diff --git a/editor/tests/step651_test.cpp b/editor/tests/step651_test.cpp new file mode 100644 index 0000000..3035f88 --- /dev/null +++ b/editor/tests/step651_test.cpp @@ -0,0 +1,26 @@ +// Step 651: Language generator plugin manifest (12 tests) + +#include "LanguageGeneratorPluginManifest.h" +#include +static int p=0,f=0; +#define T(n) { std::cout<<" "<<#n<<"... "; } +#define P() { std::cout<<"PASS\n"; ++p; } +#define F(m) { std::cout<<"FAIL: "<