質問

最近かなりの数の崇高なテキスト3プラグイン/スニペット/ etcを作成しました。繰り返しタスクを自動化する。私が停止している現在のものは、スニペットでregexを使用して新しい機能のためにデフォルトのスケルトンを取得します。

理想的には、スニペットは次のようなものを生成したいと思います。

// Multiple Args (one arg would obviously look like (..." + "a: " + a + ")");)
function Foo(a, b, c)
{
    Log.AppendFolder("Foo(" + "a: " + a + ", b: " + b + ", c: " + c + ")");
        //body
    Log.PopLogFolder();
}
// Zero Args
function Foo()
{
    Log.AppendFolder("Foo()");
        //body
    Log.PopLogFolder();
}    
.

これまでのところ、1つの引数または多くの引数を使用してフォーマットすることができます。すべての組み合わせ(ゼロ、1、多く)。

アウトラインは現在のものです。

の2番目の${2}を把握する必要があります。
<snippet>
<content><![CDATA[
function ${1:function_name}(${2:arguments})
{
    Log.AppendFolder("$1(" + ${2/(?#stuck here)//} + ")");
        ${3://body}
    Log.PopLogFolder();
}$0]]></content>
    <tabTrigger>fun</tabTrigger>
    <scope>source.js</scope>
    <description>Function Template</description>
</snippet>
.

1つのarg:

"$1(" + ${2/^([A-z0-9_-]*),?.*/"\1\: " + \1 + /}");"
.

多くのargs(1 argを持つ、これは"a: " + a + aを示しています):

"$1(" + ${2/^([A-z0-9_-]*),?(.*)/"\1\: " + \1 + /}${2/([A-z0-9_-]*)(?:, *([A-z0-9_-]*))/"$2\: " + $2 + /g}");"
.

1つの方法では、そこに追加の世代の創立の余地がありました。

${2/([A-z_0-9]+)((?:, ?)?)/"\1\: " + \1 + "\2" + /g}
.

私はコンマに基づいて条件付きの外観を試してみましたが、それはおそらくそれらの理解の欠如のために、めちゃくちゃになった> 1 arg:

${2/(?(?!,)^([A-z0-9_-]*)$|([A-z0-9_-]*), *)/"\1\: " + \1/g}
.

私は通常のプラグインを介してこれを簡単に行うことができます(これはプログラム的に簡単です)、理想的にはJS "Fun"コード補完を上書きすることができるので、これはスニペット/コード完了のままです。

これを達成するために何がありませんか(またはそれは単に間違った道であることです - それが事実であるならば、まだ正規表現についてもっと知りたいのですが)?

役に立ちましたか?

解決

最終的にこれを考え出し、条件付き代替オプションがあります:

?n:then:else
.

だから最後の形式は次のようになります。

<snippet>
    <content><![CDATA[
function ${1:function_name}(${2:args})
{
    Log.AppendFolder("$1(${2/.+/" + /}${2/([A-z_0-9-]+) *(,)? */"$1\: " + $1 ?2: + "$2 " + :+ /g}${2/.+/"/})");
       ${3:// body...}
    Log.PopLogFolder();
}$0]]></content>
    <tabTrigger>fun</tabTrigger>
    <scope>source.js</scope>
    <description>Function</description>
</snippet>
.

は望ましい結果を与えるでしょう:

function function_name()
{
    Log.AppendFolder("function_name()");
       // body...
    Log.PopLogFolder();
}

function function_name(a)
{
    Log.AppendFolder("function_name(" + "a: " + a + ")");
       // body...
    Log.PopLogFolder();
}

function function_name(a, b)
{
    Log.AppendFolder("function_name(" + "a: " + a  + ", " + "b: " + b + ")");
       // body...
    Log.PopLogFolder();
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top