我可以在VS Code片段中包含条件逻辑吗?

问题描述

我想用VS代码编写一个片段,该片段编写一个“ switch”表达式(用Java语言编写),但是我可以在其中定义案例数。

当前有一个代码片段可生成带有1个case的switch表达式的轮廓,并允许您使用制表符输入条件,案例名称以及其中包含的代码

我希望能够键入“ switch5” “ 5” 是任意数字)并创建一个具有5种情况的开关,我可以在其中制表其中的相关代码

我知道代码片段是用JSON文件编写的,我可以在其中包含这样的条件逻辑,还是不可能?

谢谢!

解决方法

简短的回答是,您无法在标准vscode代码段中执行此类操作,因为它无法通过某些有限的变通方法(如我将在下面提到的那样)动态评估其指定变量之外的任何输入。

您可能-我和其他人已经就他写了答案-首先键入您的各种case值,然后触发摘要,将其转换为switch语句。这样做是一种后备词,但有可能。

但是,有些扩展确实允许您直接在代码段或设置中评估javascript并输出结果。 macro-commander是这样的扩展名。我将展示另一个更简单的扩展名,来满足您的需求:HyperSnips

在您的javascript.hsnips中:

snippet `switch(\d)` "add number of cases to a switch statement" A
``
let numCases = Number(m[1])     // 'm' is an array of regex capture groups
let caseString = ''

if (numCases) {       // if not 'switch0'
    let tabStopNum = 1
    caseString = `switch (\${${tabStopNum++}:key}) {\n`

    for (let index = 0; index < m[1]; index++) {
        caseString += `\tcase \${${tabStopNum++}:value}:\n\t\t\$${tabStopNum++}\n`
        caseString += '\t\tbreak;\n\n'
    }

    caseString += '\tdefault:\n'
    caseString += '\t\tbreak;\n}\n'
}
rv = `${caseString}`       // return value
``
endsnippet

switch HyperSnips demo


最棘手的部分是使未知数量的制表位正常工作。这是我的方法:

\${${tabStopNum++}:key}

,它将解析为${n:defaultValue},其中n每次插入制表符时都会增加。 :defaultValue是该制表符的可选默认值。如果不需要defaultValue,请在此处使用\$${tabStopNum++}

有关如何设置HyperSnips的详细信息,请参见https://stackoverflow.com/a/62562886/836330

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...