NodeJS特定语言语法检查器

时间:2017-04-23 07:45:05

标签: node.js discord

我最近发现了一个名为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!");
    }

  }

1 个答案:

答案 0 :(得分:1)

语法检查程序的工作原理是在您的计算机上运行程序,用于编译代码(没有输出)并检查是否有任何错误。它通过分析传递给它的目录中的每个文件然后输出到文件来运行。您需要为每个请求创建一个临时文件,然后使用shell运行该程序(请查看child_process或exec)。

所有该模块最终确定的是代码来自其文件扩展名的语言,并运行类似exec('php -l file/path/here.php', callbackFunctionHere)的内容。这就是它为PHP运行的,其他的是ruby -cpython -m py_compileperl -cluac -pbash -ngcc -fsyntax_onlyuglifyjs -o /dev/null

有了这些知识,无论如何都无法搞乱文件系统。只需使用exec("echo '" + codeStr + "' | php -l', callbackFunctionHere);之类的内容即可。用你需要的任何一个短绒替换php -l。请确保codeStr中可能出现escape any single quotes,否则会导致奇怪的错误。