!477 vscode插件增加snippets,对napi class 代码功能提供代码片段

Merge pull request !477 from 苟晶晶/master
This commit is contained in:
openharmony_ci 2024-11-06 01:30:41 +00:00 committed by Gitee
commit 5889eaa940
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 91 additions and 2 deletions

View File

@ -10,7 +10,8 @@
"vscode": "^1.34.0"
},
"categories": [
"Other"
"Other",
"Snippets"
],
"activationEvents": [
"onCommand:extension.h2dts",
@ -106,7 +107,12 @@
"group": "2_workspace"
}
]
"snippets": [
{
"language": "cpp",
"path": "./snippets/napi_class_snippets.json"
}
]
},
"scripts": {
"vscode:prepublish": "npm run compile",

View File

@ -0,0 +1,83 @@
{
"Napi Class": {
"prefix": "napiclass",
"body": [
"class HelloWorld {",
" public:",
" static napi_value Init(napi_env env, napi_value exports);",
" static void Destructor(napi_env env, void* nativeObject, void* finalize_hint);",
" private:",
" explicit HelloWorld();",
" ~HelloWorld();",
" static napi_value New(napi_env env, napi_callback_info info);",
" static napi_value GetValue(napi_env env, napi_callback_info info);",
" static napi_value SetValue(napi_env env, napi_callback_info info);",
" static napi_value Hello(napi_env env, napi_callback_info info);",
" std::string value_;",
" napi_env env_;",
" napi_ref wrapper_;",
"};",
"HelloWorld::HelloWorld(): value_(\"\"), env_(nullptr), wrapper_(nullptr) {}",
"HelloWorld::~HelloWorld() { napi_delete_reference(env_, wrapper_); }",
"void HelloWorld::Destructor(napi_env env, void* nativeObject, [[maybe_unused]] void* finalize_hint)",
"{",
" reinterpret_cast<HelloWorld*>(nativeObject)->~HelloWorld();",
"}",
"napi_value HelloWorld::New(napi_env env, napi_callback_info info)",
"{",
" napi_value newTarget;",
" // Check if the constructor was invoked with new.",
" napi_get_new_target(env, info, &newTarget);",
" if (newTarget != nullptr) {",
" // Invoked as the constructor `new HelloWorld()`.",
" napi_value jsThis;",
" // Retrieve the callback's context and arguments.",
" napi_get_cb_info(env, info, nullptr, nullptr, &jsThis, nullptr);",
" HelloWorld* obj = new HelloWorld();",
" obj->env_ = env;",
" // Wrap the C++ object obj in the ArkTS object jsThis.",
" napi_wrap(env, jsThis, reinterpret_cast<void*>(obj), HelloWorld::Destructor, nullptr, &obj->wrapper_);",
" return jsThis;",
" } else {",
" OH_LOG_ERROR(LOG_APP, \"HelloWorld must be invoked as a constructor with `new`\");",
" return nullptr;",
" }",
"}",
"napi_value HelloWorld::GetValue(napi_env env, napi_callback_info info)",
"{",
" // Todo: you can use \"napiobjectin\" command that get object param from js.",
" HelloWorld* obj;",
" // Retrieve obj (the C++ object) previously wrapped in jsThis (the ArkTS object), and perform subsequent operations.",
" napi_unwrap(env, jsThis, reinterpret_cast<void**>(&obj));",
" // Todo: you can use \"napistringutf8out\" command that return string utf8 value to js.",
"}",
"napi_value HelloWorld::SetValue(napi_env env, napi_callback_info info)",
"{",
" // Todo: you can use \"napiobjectin\" command that get object param from js.",
" HelloWorld* obj;",
" napi_unwrap(env, jsThis, reinterpret_cast<void**>(&obj));",
" // Todo: you can use \"napistringutf8in\" command that get string utf8 param from js.",
" return nullptr;",
"}",
"napi_value HelloWorld::Hello(napi_env env, napi_callback_info info)",
"{",
" OH_LOG_INFO(LOG_APP, \"HelloWorld::Hello World!\");",
" return nullptr;",
"}",
"napi_value HelloWorld::Init(napi_env env, napi_value exports)",
"{",
" // Define properties and methods for a N-API object",
" napi_property_descriptor properties[] = {",
" { \"value\", 0, 0, GetValue, SetValue, 0, napi_default, 0 },",
" { \"hello\", nullptr, Hello, nullptr, nullptr, nullptr, napi_default, nullptr }",
" };",
" napi_value cons;",
" // Define a js class",
" napi_define_class(env, \"HelloWorld\", NAPI_AUTO_LENGTH, New, nullptr, 2, properties, &cons);",
" // Set the 'HelloWorld' class on the exports object.",
" napi_set_named_property(env, exports, \"HelloWorld\", cons);",
" return exports;",
"}"
]
}
}