最近我发现了一个名为语法检查器(https://www.npmjs.com/package/syntax-checker)的npm包。
我想把它集成到js脚本中。我正在使用一个不和谐的聊天机器人,它检查消息的代码块和编码语言。正如语法检查器的描述所述,它支持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!");
}
}发布于 2017-04-23 11:13:53
语法检查器的工作方式是在您的计算机上运行用于编译代码的程序(没有输出),并检查是否有错误。它通过分析传递给它的目录中的每个文件来运行,然后输出到一个文件中。您需要为每个请求创建一个临时文件,然后使用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。确保您的escape any single quotes可能发生在codeStr中,否则将导致奇怪的错误。
https://stackoverflow.com/questions/43568646
复制相似问题