2017-04-23 36 views
1

我最近發現了一個NPM包叫做語法檢查器(https://www.npmjs.com/package/syntax-checker具體的NodeJS語言語法檢查

,我想這個融入我的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!"); 
    } 

    } 
+0

只是稍微注意這一點,如果有人寫 東西然後 \'\'\'js的 //代碼 \'\'\' 它會破壞你的字符串提取碼。 – macdja38

回答

1

語法檢查器工作和檢查,看看是否有任何錯誤。它通過分析傳入目錄中的每個文件然後輸出到文件來運行。您需要爲每個請求創建一個臨時文件,然後使用shell運行該程序(查看child_process或執行此操作)。

該模塊最終做的所有決定是從其文件擴展名決定哪種語言的代碼,並運行如exec('php -l file/path/here.php', callbackFunctionHere)。這是它運行PHP的,其他的是ruby -c,python -m py_compile,perl -c,luac -p,bash -ngcc -fsyntax_onlyuglifyjs -o /dev/null

有了這些知識,沒有任何意義在搞亂文件系統。只需使用像exec("echo '" + codeStr + "' | php -l', callbackFunctionHere);這樣的東西。將php -l替換爲您需要的任何棉絨。請確保您的escape any single quotes可能發生在codeStr之後,否則將會出現奇怪的錯誤。

+0

啊好的感謝信息,標記爲接受。 – Select