Textmate Javascript 验证语法命令

Jam*_*tra 1 javascript textmate textmate2

我在 TextMate 2 中花费了大量时间编写 PHP,并花费少量时间编写 Javascript。

我一直发现 Textmate 中的“验证语法”命令非常有用,可作为保存前的最终快速健全性检查。今天我想知道是否有一种方法可以为 Javascript 做类似的事情,我想我已经在 acorn 中找到了解决方案:

https://github.com/ternjs/acorn

沿着这些思路运行一些东西:

acorn --silent <file-here>; echo $?
Run Code Online (Sandbox Code Playgroud)

如果有效则返回 0,如果无效则返回 1。如果不是,它也会返回一个错误,并显示发生语法错误的行:

Unexpected token (50:1)
1
Run Code Online (Sandbox Code Playgroud)

看起来它几乎非常适合在简单的验证语法命令中使用。

但这就是我遇到无知的砖墙的地方。我不知道如何从那里到 TextMate 中的实际命令,并查看了 PHP 示例和其他一些示例,部分原因是我几乎没有 Ruby 经验,而且命令通常就是这样的用 TextMate 编写。

任何有更多编写 TextMate 命令经验的人都愿意尝试一下吗?


根据格雷厄姆的建议和其他帮助,这是一个有效的命令:

#!/usr/bin/env bash
#Write scope of JS to a temp file
echo "$(</dev/stdin)" > ${TMPDIR}acorn-validation.js;
#Capture output of acorn syntax check (Note that acorn sends the output to STDERR thus the 2>&1)
ACORN_OUTPUT=$( (acorn --silent ${TMPDIR}acorn-validation.js) 2>&1 );

echo 'Running syntax check with acorn...';

if [[ "" == $ACORN_OUTPUT ]]; then
    echo 'No syntax errors detected';
fi

if [[ "" != $ACORN_OUTPUT ]]; then
    #Find the line/column value
    LINE=$(echo $ACORN_OUTPUT | grep -oE '([0-9]+:[0-9]+)';);
    echo '';
    echo 'Syntax error on '${LINE};
    echo ${ACORN_OUTPUT/($LINE)/};
    #Send cursor to the place where the error occured
    LINE=(${LINE//:/ });
    open "txmt://open/?url=file://${TM_FILEPATH}&line=${LINE[0]}&column=${LINE[1]}";
fi
Run Code Online (Sandbox Code Playgroud)

确保输入设置为范围,输出设置为在工具提示中显示。

Gra*_*ath 5

全局安装 Acorn:

npm install -g acorn
Run Code Online (Sandbox Code Playgroud)

找出acorn安装位置:

which acorn
Run Code Online (Sandbox Code Playgroud)

我的说(因为我使用nvm):

~/.nvm/versions/node/v6.2.2/bin/acorn
Run Code Online (Sandbox Code Playgroud)

将该bin文件夹添加到您的 TextMate 路径中,使用冒号来描述:

TextMate 的设置 - 变量选项卡更新了 PATH

所以我的路径是:

$PATH:/opt/local/bin:/usr/local/bin:/usr/texbin:/usr/local/bin:$HOME/.nvm/versions/node/v6.2.2/bin:$HOME/.rvm/rubies/ruby-2.3.3/bin
Run Code Online (Sandbox Code Playgroud)

现在打开包编辑器:

创建捆绑包,或打开现有捆绑包,然后按cmd+n创建新文件,从下拉列表中选择“命令”。

将其粘贴到命令中,cmd+s进行保存。

更新:该命令已由 (OP) Jamie Poitra 从概念验证转变为功能,因此请检查他的脚本的问题。

#!/usr/bin/env bash
acorn ${TM_FILE}
Run Code Online (Sandbox Code Playgroud)

可以了,好了。