NodeJS 特定语言语法检查器

NodeJS Specific Language Syntax Checker

我最近发现了一个名为 syntax-checker (https://www.npmjs.com/package/syntax-checker)

的 npm 包

我想将其集成到我的 js 脚本中。我正在使用 Discord 聊天机器人来检查代码块和编码语言的消息。正如语法检查器的描述所说,它支持 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!");
    }

  }

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

该模块最终所做的就是根据其文件扩展名和 运行 之类的 exec('php -l file/path/here.php', callbackFunctionHere) 决定代码是什么语言。 PHP 就是 运行,其他的是 ruby -cpython -m py_compileperl -cluac -pbash -ngcc -fsyntax_only,以及 uglifyjs -o /dev/null

有了这些知识,就没有必要乱搞文件系统了。只需使用 exec("echo '" + codeStr + "' | php -l', callbackFunctionHere); 之类的东西。将 php -l 替换为您需要的任何 linter。确保你 escape any single quotes 可能出现在 codeStr 中,否则你会遇到奇怪的错误。