我最近发现了一个名为syntax-checker(https://www.npmjs.com/package/syntax-checker)
的npm包我想将其整合到我的js脚本中。我正在使用Discord聊天机器人来检查消息中的代码块和编码语言。正如Syntax checker所描述的那样,它支持Ruby,PHP,Perl,Lua,C / CPP,Bash,Javascript和Python。我如何将其整合到机器人中?我目前用js检查这个脚本
if (message.content.includes("```js"))
{
let code = message.content.substring('```js '.length);
var codebegin = code.split("```js").pop();
var n = codebegin.indexOf('```');
var codeend = codebegin.substring(0, n != -1 ? n : codebegin.length);
var check = require('syntax-error');
var err = check(codeend);
if (err)
{
message.reply("Your code contains errors! ```" + err + "```");
}
else
{
message.reply("No Errors!");
}
}
答案 0 :(得分:1)
语法检查程序的工作原理是在您的计算机上运行程序,用于编译代码(没有输出)并检查是否有任何错误。它通过分析传递给它的目录中的每个文件然后输出到文件来运行。您需要为每个请求创建一个临时文件,然后使用shell运行该程序(请查看child_process或exec)。
所有该模块最终确定的是代码来自其文件扩展名的语言,并运行类似exec('php -l file/path/here.php', callbackFunctionHere)
的内容。这就是它为PHP运行的,其他的是ruby -c
,python -m py_compile
,perl -c
,luac -p
,bash -n
。 gcc -fsyntax_only
和uglifyjs -o /dev/null
。
有了这些知识,无论如何都无法搞乱文件系统。只需使用exec("echo '" + codeStr + "' | php -l', callbackFunctionHere);
之类的内容即可。用你需要的任何一个短绒替换php -l
。请确保codeStr
中可能出现escape any single quotes,否则会导致奇怪的错误。