json - 我可以在 VS 代码片段中包含条件逻辑吗?
问题描述
我想在 VS Code 中编写一个片段,该片段编写一个“开关”表达式(在 Javascript 中),但我可以在其中定义案例数量。
目前有一个片段可以生成带有 1 个 case 的 switch 表达式的大纲,并允许您使用 tab 键进入条件、case 名称和其中包含的代码。
我希望能够键入“switch5”(“5”是任意数字)和一个要创建 5 个案例的开关,我可以在其中通过标签查看相关代码。
我知道这些片段是写在一个 JSON 文件中的,我可以在其中包含这样的条件逻辑,还是不可能?
谢谢!
解决方案
简短的回答是,你不能在标准的 vscode 代码片段中做这种事情,因为它不能动态地评估其指定变量之外的任何输入,并使用一些有限的变通方法,就像我接下来会提到的那样。
您可能 - 我和其他人已经在 SO 上写了关于他的答案 -case
首先输入您的各种值,然后触发一个片段 tat 会将它们转换为一个switch
语句。这是一种背单词,但它可能是可能的。
但是,有些扩展确实允许您在片段或设置中评估 javascript 并输出结果。 宏命令就是这样一种扩展。我将展示另一个更简单的扩展来做你想做的事: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
最棘手的部分是让未知数量的制表位正常工作。我是这样做的:
\${${tabStopNum++}:key}
这将解决每次插入制表位时增加的位置${n:defaultValue}
。n
并且 :defaultValue
是该制表位的可选默认值。如果您不需要 defaultValue ,请在\$${tabStopNum++}
此处使用。
有关如何设置 HyperSnips 的更多信息,请参阅https://stackoverflow.com/a/62562886/836330 。
推荐阅读
- javascript - 是否可以在 JavaScript(Jquery)的 setInterval 中获取当前时间加上 3 秒?
- excel - Excel 公式帮助 - 查找一行文本值的模式,但排除“?”
- ios - Convert NSAttributedString to HTML String
- r - Function to extract elements from a list column into a new column using purrr:::map
- django - docker tmpfs seems to have no effect on postgresql
- dynamics-crm - Creating on demand workflow directly in Production instance
- javascript - Javascript将数组传递给`gulp.src`
- bash - 用于测试不一致段错误的 Bash shell 脚本
- javascript - React - 渲染前的 SetState
- docker - Kubernetes 服务只能在 POD 的主机上访问