2017-04-23 4 views
1

Vor kurzem fand ich eine npm Paket-Syntax-Checker genannt (https://www.npmjs.com/package/syntax-checker)NodeJS Specific Language Syntax Checker

Und ich möchte dies in mein js Skript integrieren. Ich benutze einen Discord-Chat-Bot, der die Nachricht auf einen Codeblock und die Programmiersprache überprüft. Wie die Beschreibung des Syntax-Checkers sagt, unterstützt es Ruby, PHP, Perl, Lua, C/CPP, Bash, Javascript und Python. Wie würde ich das in den Bot integrieren? Ich verwende derzeit für js dieses Skript

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

nur eine kleine Notiz auf diesem, wenn jemand etwas dann \ '\' schreiben sind \ 'js // Code \ '\' \' es Zeichenfolge Extraktion Code brechen würde. – macdja38

Antwort

1

Syntax-Checker Arbeiten Überprüfung durch das Programm auf Ihrem Computer ausgeführt wird verwendet, um Code zu kompilieren (ohne Ausgang) und zu überprüfen, ob es irgendwelche Fehler gibt. Es wird ausgeführt, indem jede Datei in einem Verzeichnis analysiert und an eine Datei ausgegeben wird. Sie müssen für jede Anfrage eine temporäre Datei erstellen und dann das Programm mit Hilfe der Shell ausführen (schauen Sie sich hierzu child_process oder exec an).

All dieses Modul entscheidet letztlich, welche Sprache der Code von seiner Dateierweiterung ist und etwas wie exec('php -l file/path/here.php', callbackFunctionHere) ausführen. Das ist, was es für PHP läuft, die anderen sind ruby -c, python -m py_compile, perl -c, luac -p, bash -n. gcc -fsyntax_only und uglifyjs -o /dev/null.

Mit diesem Wissen macht es keinen Sinn, sich mit dem Dateisystem zu beschäftigen. Verwenden Sie einfach etwas wie exec("echo '" + codeStr + "' | php -l', callbackFunctionHere);. Ersetzen Sie php -l durch den von Ihnen benötigten Filter. Stellen Sie sicher, dass Sie escape any single quotes, die in der codeStr auftreten können, da Sie sonst mit seltsamen Fehlern enden werden.

+0

ah ok danke für die info, als akzeptiert markiert. – Select