سؤال

لقد قمت مؤخرًا بإنشاء عدد لا بأس به من المكونات الإضافية/المقتطفات/المقتطفات الخاصة بـ Sublime Text 3 وما إلى ذلك.لأتمتة المهام المتكررة.يستخدم المثال الحالي الذي أعلق عليه التعبير العادي في مقتطف للحصول على الهيكل الافتراضي الخاص بي لوظيفة جديدة.

من الناحية المثالية، أود أن يولد المقتطف شيئًا مشابهًا لما يلي:

// 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();
}    

حتى الآن، يمكنني تنسيقه باستخدام وسيطة واحدة أو العديد من الوسائط، وليس كل المجموعات الممكنة (صفر، واحد، كثير).

المخطط التفصيلي الحالي، أنا فقط بحاجة لمعرفة الثاني ${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(" + ${2/^([A-z0-9_-]*),?.*/"\1\: " + \1 + /}");"

العديد من الوسائط (مع وسيطة واحدة، يظهر هذا "a: " + a + a):

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

إحدى الطرق التي تم العمل بها تحتوي على إضافة + "" + هناك، والذي أود تجنبه:

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

لقد حاولت إلقاء نظرة مشروطة على المستقبل بناءً على الفواصل، ولكن تم إفساد ذلك > 1 وسيطة، ربما بسبب عدم فهمي لها:

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

يمكنني القيام بذلك بسهولة عبر مكون إضافي عادي (وهذا أمر سهل برمجيًا)، ولكن من الناحية المثالية يمكن أن يظل هذا مقتطفًا/إكمالًا للتعليمات البرمجية حيث يمكنني فقط تجاوز إكمال التعليمات البرمجية "الممتعة" لـ JS.

ما الذي أفتقده لإنجاز هذا (أم أنه ببساطة الطريق الخطأ - إذا كان الأمر كذلك، فما زلت أرغب في معرفة المزيد حول التعبير العادي)؟

هل كانت مفيدة؟

المحلول

أخيرًا، اكتشفت ذلك، وهناك خيار الاستبدال المشروط:

?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