微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我可以在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。