From d238bea1a74df7e7620020d363eca52a6bc74360 Mon Sep 17 00:00:00 2001 From: zhaojunxia Date: Thu, 20 Oct 2022 14:20:38 +0800 Subject: [PATCH] feat: add napi vs code plugin Signed-off-by: zhaojunxia --- napi_vs_plugin/src/extension.js | 38 ++- napi_vs_plugin/src/vs_plugin_view.html | 388 ++++++++++++++++--------- 2 files changed, 279 insertions(+), 147 deletions(-) diff --git a/napi_vs_plugin/src/extension.js b/napi_vs_plugin/src/extension.js index 0b2c0942..ad77bb21 100644 --- a/napi_vs_plugin/src/extension.js +++ b/napi_vs_plugin/src/extension.js @@ -58,6 +58,19 @@ function executor(name, genDir, mode, importIsCheck) { }); } +function executorH2Ts(name, genDir) { + var command = exeFilePath + " -f " + name + " -o " + genDir; + var exec = require('child_process').exec; + exec(command, function (error, stdout, stderr) { + VsPluginLog.logInfo('VsPlugin: stdout =' + stdout + ", stderr =" + stderr); + if (error || stdout.indexOf("success") < 0) { + vscode.window.showErrorMessage("genError:" + (error != null ? error : "") + stdout); + return VsPluginLog.logError("VsPlugin:" + error + stdout); + } + vscode.window.showInformationMessage("Generated successfully"); + }); +} + function genCommand(name, genDir, mode, importIsCheck) { var genFileMode = mode == 0 ? " -f " : " -d "; if (genDir == ""){ @@ -87,8 +100,9 @@ function register(context, command) { } ); panel.webview.html = getWebviewContent(context); + let msg; panel.webview.onDidReceiveMessage(message => { - let msg = message.msg; + msg = message.msg; if (msg == "cancel") { panel.dispose(); } else if(msg == "param") { @@ -97,12 +111,25 @@ function register(context, command) { let genDir = message.genDir; let importIsCheck = message.importIsCheck; checkMode(name, genDir, mode, importIsCheck); - } else { + } else if(msg == "h2ts") { + let name = message.fileNames; + let genDir = message.genDir; + name = re.replaceAll(name, " ", ""); + if ("" == name) { + vscode.window.showErrorMessage("Please enter the path!"); + return; + } + if (exeFileExit()) { + executorH2Ts(name, genDir); + } else { + vscode.window.showInformationMessage("Copy executable program to " + __dirname); + } + }else { selectPath(panel, message); } }, undefined, context.subscriptions); let fn = re.getFileInPath(uri.fsPath); - let tt = re.match("@ohos.[a-zA-Z_0-9]+.d.ts", fn); + let tt = re.match("(@ohos.[a-zA-Z_0-9]+.d.ts)|([a-zA-Z_0-9]+.h)", fn); var result = { msg: "selectInterPath", path: tt ? uri.fsPath : "" @@ -116,6 +143,7 @@ function register(context, command) { * 选择本地目录/文件夹 */ function selectPath(panel, message) { + let msg = message.msg; let mode = 1; if (message.mode != undefined) { mode = message.mode; @@ -126,7 +154,9 @@ function register(context, command) { canSelectFiles: mode == 0 ? true : false,//是否选择文件 canSelectFolders: mode == 0 ? false : true,//是否选择文件夹 defaultUri:vscode.Uri.file(''),//默认打开本地路径 - filters: { + filters: msg == "selectHFilePath" ? { + 'Text files': ['h'] + } : { 'Text files': ['d.ts'] } }; diff --git a/napi_vs_plugin/src/vs_plugin_view.html b/napi_vs_plugin/src/vs_plugin_view.html index c7dce1cb..2714fa74 100644 --- a/napi_vs_plugin/src/vs_plugin_view.html +++ b/napi_vs_plugin/src/vs_plugin_view.html @@ -1,24 +1,17 @@ - - + - + Napi - - - + -
- 选择生成方式: -
- .d.ts文件(多个文件之间用,号分割)
-
- 文件夹 -
-
-
-
- 选择接口文件: - - -
- -
- 生成框架路径: - - -
-
- 编译脚本路径: - - -
-
- 启用import功能 -
-
- - - - - -
- + function fillInputDir(fileNames, message) { + var dir; + var fileName; + if (mode == 0) { + if (fileNames.indexOf(",") != -1) { + fileName = fileNames.substring(0, fileNames.indexOf(",")); + } else { + fileName = fileNames; + } + dir = fileName.substring(0, fileName.lastIndexOf("\\")); + } else { + dir = fileNames; + } + if(message == "selectInterPath") { + let regex = new RegExp("[a-zA-Z_0-9]+.h"); + if(regex.exec(fileNames)){ + document.getElementById("genHResultDir").value = dir; + }else{ + document.getElementById("genFile").value = dir; + document.getElementById("buildFile").value = dir; + } + }else{ + document.getElementById("genHResultDir").value = dir; + } + } + + +
+
+ + +
+
+ 选择生成方式: +
+ .d.ts文件 + 文件夹 +
+
+
+
+ 选择接口文件: + + +
+ +
+ 生成框架路径: + + +
+
+ 编译脚本路径: + + +
+
+ 启用import功能: + +
+
+ + + + + +
+
+
+
+ + +
+
+ 文件路径选择: + + +
+ +
+ 输出目录选择: + + +
+ +
+ + + + + +
+
+
+
+ \ No newline at end of file -- Gitee