From 1f56eadcdfb097caf52f0673463a3ccebcc5c32e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Omelette=20=E8=9B=8B=E5=8D=B7?= Date: Sat, 3 Feb 2024 00:54:42 -0500 Subject: [PATCH] Release 1.1.1 --- .vscode/settings.json | 3 ++- CHANGELOG.md | 17 +++++++++++++---- README.md | 11 ++++++----- docs/img/demo1-new.png | Bin 0 -> 53424 bytes package.json | 12 +++++++++--- src/extension.ts | 38 ++++++++++++++++++++++++++++++-------- 6 files changed, 60 insertions(+), 21 deletions(-) create mode 100644 docs/img/demo1-new.png diff --git a/.vscode/settings.json b/.vscode/settings.json index 34bb6a0..0313b05 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -12,6 +12,7 @@ "reimplementation" ], "Lua.diagnostics.globals": [ - "net" + "net", + "log" ] } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 99ee51e..3cee0b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,16 +34,25 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how ### Fixed - Fix link to original DCS Fiddle install instructions. -## [1.0.2] +## [1.0.2] - 2024-01-16 ### Fixed - Fix buttons getting separated by other extensions. -## [1.1.0] +## [1.1.0] - 2024-01-31 ### Added -- Option to display return in a json side window, taking advantage of syntax highlighting. +- Option to display return in a json side window (file), taking advantage of syntax highlighting. - Status bar item to quickly switch between local and remote DCS server, mission and GUI environment, and open settings . ### Changed -- Quick switch buttons next to the run code button is now hidden by default, superseded by the status bar item. These buttons take up too much space, especially when displaying return in json side window mode. \ No newline at end of file +- Quick switch buttons next to the run code button is now hidden by default, superseded by the status bar item. These buttons take up too much space, especially when displaying return in json side window mode. + +## [1.1.1] - 2024-02-02 + +### Added +- Option to display return in Lua table format, both in side window (file) and output panel. +(Experimental feature, please report any issue.) + +### Changed +- Change default return display to file to take advantage of syntax highlight. \ No newline at end of file diff --git a/README.md b/README.md index 50f9b05..6123943 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ # DCS Lua Runner -A VS Code extension to run lua code in DCS World (local or remote server). A reimplementation of the [DCS Fiddle](https://github.com/JonathanTurnock/dcsfiddle) web lua console. +A VS Code extension to run lua code in DCS World (on local or remote server, in mission or GUI environment). A reimplementation of the [DCS Fiddle](https://github.com/JonathanTurnock/dcsfiddle) web lua console. Allows for quick development and debugging of running scripted missions directly from the comfort of VS Code. -![Demo1](docs/img/demo1.png) +![Demo1](docs/img/demo1-new.png) ![Demo2-1](docs/img/demo2-1.png) ![Demo2-2](docs/img/demo2-2.png) @@ -35,7 +35,7 @@ For even better security, put the Fiddle port behind a reverse proxy with HTTPS. ## Extension Settings -This extension contributes the following settings: +This extension has the following settings: - `dcsLuaRunner.serverAddress`: Remote DCS server address. It can be an IP address or a domain. @@ -57,9 +57,10 @@ This setting can be quickly changed with the buttons on the upper-right of a lua - `dcsLuaRunner.runInMissionEnv`: Specifies whether to execute in mission or GUI Scripting Environment. This setting can be quickly changed with the buttons on the upper-right of a lua file. -## Known Issues +**NEW:** +- `dcsLuaRunner.returnDisplay`: Wether to use output panel or file (which supports syntax highlight) to display return value. -The return value is displayed on in the output window, which unfortunately does not support syntax highlight. Possibilities to display return in other ways are being looked into. +- `dcsLuaRunner.returnDisplayFormat`: Display return value as JSON or Lua table. (Experimental feature, please report any issue.) ## Release Notes diff --git a/docs/img/demo1-new.png b/docs/img/demo1-new.png new file mode 100644 index 0000000000000000000000000000000000000000..af788255439a3ef976db83d7ce1526c15c0bca99 GIT binary patch literal 53424 zcma&NWmFu`6ZcEd;10npNN|UsA!rg7*x>H&?hqg(NU&hREx60#un<@@IPBu??#^;I zzyEVzJm=gOch3RNG`&4NH8s`MpZZRunu;PW79|!E5)$qQCArT?NT^UGq!-RF(Ge}* zA`}V{e_ptMR(y|CHA=mQI6$?Q0mvXB)y82znxY|&Fq=yxu$Ks1`$ zYUp^VJK4GbEImvuOg&5yZAeJ|jOGruE^5xUP9E-zV*37!K8#|#oQ%GR-+`R}9r5uC zi2i>!2ndV(pFaQl#=m33Ksw*{TO_10=m$9&4IiV!CCmU~OStr@s`_!`8<8!xtrRK_ z_E2iKmOA-6CbrO~^=|m|l@ZBRzp9L`7f{>qtjk|sS0=@;3DVA4QlPAD@c`O&7EcJ<{eGXD_|qJFCVN^*a2Oj`)9+fwvg-Z4MIulvh+;-EY(t zGV%@9j;OLS@8=|AZyKF-3<^S~2#TuB962mfF41wHc_&iqoEsgrr{s@k+T>7(0 ziRexkj+7A!B~aF8Wz1K49cEWgjb~to`L&YcP4|y=GwRP%T73Bi+{*%LNfT0`HW?6p zIAh9LL3&YCe^IW6;pu#OM1;YwS_Q=UO$W8rj&hipZ|S6Egi6(tcpw2|5qHO=mX$tE zGm4xyOS?A8BnR~W?8uI7^nvK#RMWSaN`yO_bpU8qVLoGl>ylG)bI!yj{>l}yWdAzm zoAA~AH}+0Z2^$W+jM|7zn$Ppq`qRlgr>s>azAAVN@5*r`S=XyF!bc5zEg$zJZ?~%J<9Qa$)C$+)SLNh{rquB;sz8HXL!58A z`|~-;#>RB(8p|dv&Ge1Q7Y-TgXB5au_lQY0@3L!~ z+wB=CXS9=xRp{M^gKJl>yiZr$o?2qMlU2bX823V-rwYYu;iQWXi>dQUC2Lil2hf4h zQ7!enUVA{9L3<7)thFk}vwi$Co>!u-3eUK;w3+?zwBXax81ZR3 z=ieQL`~=V*y;hJnE$ay>%vUBFJ1D&`gRT&v8oW{)Kk@tf=~+O@A47Ih#_&HIo3eO>fPU*wtlhYeU(Dy(%oK8@ zM^4&xy}k_C^z?uqeW2EV;82OShfeu}dnb&i{n-t@e{?)+;n?P}^cXSr83<@d-Uwf& z^O@lx+;GLhjV(@$T8E4#W&vVu-qAYbp&iF9j*L|SVWc9hTWWMiZ?ZSdDB}XG`9tXMT@}V0)E^SpjM%C0C}5_=Y>(z(TGY z9E_Y{1;_KRM`z4Cmaf?dZ>!lz3|`Gl?@_toyV-ztcRsHsS5bUh^pozpR!dAcY_vX` zjt=hLQT4%qeUmzS3qN01_qi6=|Qb_GxNo0eq1jEVrz=23N=w8*TAurcJR)875>z?NGvu(SwOm;ROtqC!& z!-xkczgXh_NMJWIw}8%h!9Ba#s)ut^76OQK7Tbm z73zxl-iDSOx;um-0?b6Z9RAPgL_{Yb zyi4!VMzGdC?iGymtWwjMJWHGr4=~XX_Z-}soMzRt5H(yZC9(>C=x@yk6Ql|#|J7;C zV~!Ier-##BS>@*#G&g;Le(8nm_${(k|GN#q;Be4a@*v)#F_U!)(0Q!qk*s~lTG^N<*D7s6gh}L7)*%c;Fn0tJZj+F2)EGGuaSYK> z;|07PB26YSiLS5M`Ra!=Ut8!SHE<|Ip(bdxH%JTHbe(*nnW_@Fw!cPN23FtJU6yCP zYg>MmTU1K@-lwwkAQB!N{AvSamg;F4@ML-k)~rsZFs^F-A^^6qg0-8PEf}O19JGs1 zc-BZ23Q>7hbHwBDUNokqXWkp629P{Vs2G?V2PFDSR@O*c%GJrzhM$&IwhzghR(iMD&Ozq(*5OLhDar36jD3_GiBpD%m@R{^Ip6Zzd;}6&k&*igg(vyR$*;+Om!&Gb7{bD< z88pcTy3E;Wbz4>s7S$+(#9e7qfsR7G%K2TJfyjTFia{Kwn~I-mFAG>90_4)37sUlb z=O_Pcjp0>=`q{Ym&w=G!c;lPCn}IJs*REhe)5z`oFK6hC%Wm2uc&zCrta(zmZI(Rf z-~}ly+#Ou^4@Vh*mFs3Y`1W$FXEXm7`W3>%bk0l1J)Xdq`2tdt@%2eM8NW}M4a*>uYx z9%IsoB#2OxgJ0Yp_yMzuhZ~CQ;FV^UDlc!E(i4I⪻Ktj8m;9;F-frQqu31FlUcH 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
a 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 327a430..9d19098 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Quickly run lua code in DCS World (local or remote server). A reimplementation of the DCS Fiddle lua console in VS Code.", "license": "MIT", "publisher": "omltcat", - "version": "1.1.0", + "version": "1.1.1", "icon": "docs/img/icon.png", "repository": { "type": "git", @@ -61,10 +61,16 @@ }, "dcsLuaRunner.returnDisplay": { "type": "string", - "enum": ["Console Output", "Json File"], - "default": "Console Output", + "enum": ["Output Panel (Scrolling Plain Text)", "Show File (Syntax Highlight)"], + "default": "Show File (Syntax Highlight)", "description": "How data returned from DCS is displayed." }, + "dcsLuaRunner.returnDisplayFormat": { + "type": "string", + "enum": ["Lua Table", "JSON"], + "default": "JSON", + "description": "Note: Experimental feature! Original returned data is in JSON. Conversion to Lua table is done after receiving data and may not be 100% accurate. Please report any issues." + }, "dcsLuaRunner.showQuickButtons": { "type": "boolean", "default": false, diff --git a/src/extension.ts b/src/extension.ts index c5471f7..e09afea 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -2,12 +2,12 @@ import * as vscode from 'vscode'; import axios from 'axios'; import * as fs from 'fs'; import * as path from 'path'; -import { config } from 'process'; async function runLua(lua: string, outputChannel: vscode.OutputChannel, filename: string = 'none') { const lua_base64 = Buffer.from(lua).toString('base64'); const config = vscode.workspace.getConfiguration('dcsLuaRunner'); - const returnDisplay = config.get('returnDisplay') as string; + const returnDisplay = config.get('returnDisplay') === 'Output Panel (Scrolling Plain Text)' ? 'output' : 'file' as string; + const returnDisplayFormat = config.get('returnDisplayFormat') === 'JSON' ? 'json' : 'lua' as string; const runCodeLocally = config.get('runCodeLocally') as boolean; const runInMissionEnv = config.get('runInMissionEnv') as boolean; const serverAddress = runCodeLocally ? '127.0.0.1' : config.get('serverAddress') as string; @@ -18,14 +18,16 @@ async function runLua(lua: string, outputChannel: vscode.OutputChannel, filename const protocol = useHttps ? 'https' : 'http'; const envName = runInMissionEnv ? 'Mission' : 'GUI'; + const logInfo = `${envName}@${serverAddress}:${serverPort} <- ${filename}` + const displayOutput = async (output: Object) => { - if (returnDisplay === 'Console Output') { + if (returnDisplay === 'output') { outputChannel.show(true); - outputChannel.appendLine(`[DCS] ${new Date().toLocaleString()} (${envName}@${serverAddress}:${serverPort} <- ${filename}):\n${JSON.stringify(output, null, 2)}`); - } else if (returnDisplay === 'Json File') { + outputChannel.appendLine(`[DCS] ${new Date().toLocaleString()} (${logInfo}):\n${format(JSON.stringify(output, null, 4))}`); + } else if (returnDisplay === 'file') { const activeEditor = vscode.window.activeTextEditor; const workspaceFolder = vscode.workspace.workspaceFolders ? vscode.workspace.workspaceFolders[0].uri.fsPath : ''; - const filePath = `${workspaceFolder}/.vscode/dcs_lua_output.json`; + const filePath = `${workspaceFolder}/.vscode/dcs_lua_output.${returnDisplayFormat}`; // Create the file if it doesn't exist if (!fs.existsSync(filePath)) { fs.writeFileSync(filePath, ''); @@ -35,7 +37,7 @@ async function runLua(lua: string, outputChannel: vscode.OutputChannel, filename const viewColumn = vscode.window.activeTextEditor && vscode.window.activeTextEditor.viewColumn === vscode.ViewColumn.Two ? vscode.ViewColumn.Two : vscode.ViewColumn.Beside; const editor = await vscode.window.showTextDocument(document, viewColumn); await editor.edit(editBuilder => { - editBuilder.replace(new vscode.Range(document.lineAt(0).range.start, document.lineAt(document.lineCount - 1).range.end), JSON.stringify(output, null, 2)); + editBuilder.replace(new vscode.Range(document.lineAt(0).range.start, document.lineAt(document.lineCount - 1).range.end), format(JSON.stringify(output, null, 4))); }); await document.save(); @@ -44,6 +46,26 @@ async function runLua(lua: string, outputChannel: vscode.OutputChannel, filename } } } + const format = (jsonString: string): string => { + if (returnDisplayFormat === 'json') { + return jsonString; + } + + let luaString = jsonString; + // Replace JSON syntax with Lua syntax + luaString = luaString.replace(/"([^"]+)":/g, '["$1"] ='); // Replace "key": with ["key"] = + luaString = luaString.replace(/"_([0-9]+)":/g, '[$1] ='); // Replace "_n": with [n] = + luaString = luaString.replace(/null/g, 'nil'); // Replace null with nil + luaString = luaString.replace(/\[\n/g, '{\n'); // Replace [ followed by a line break with { followed by a line break + luaString = luaString.replace(/]\n/g, '}\n'); // Replace ] followed by a line break with } followed by a line break + luaString = luaString.replace(/],/g, '},'); // Replace ], with }, + luaString = luaString.replace(/]\s*$/g, '}'); // Replace ] at the end of the string with } + + if (returnDisplay === 'file') { + luaString = `return --${logInfo}\n` + luaString; + } + return luaString; + } try { const response = await axios.get(`${protocol}://${serverAddress}:${serverPort}/${lua_base64}?env=default`, { @@ -58,7 +80,7 @@ async function runLua(lua: string, outputChannel: vscode.OutputChannel, filename if (response.data.hasOwnProperty('result')) { displayOutput(response.data.result); } else { - displayOutput({"SUCCESSFUL EXECUTION": "NO RETURN VALUE"}); + displayOutput("SUCCESSFUL EXECUTION - NO RETURN VALUE"); } } catch (error: any) { if (error.response && error.response.status === 500) {