我写了这样的代码
"State": {
"prefix": "state",
"body": [
"const [$1, set${1:/capitalize}] = useState($2);"
],
"description": "Adds state"
},
我希望结果将是这样(如果我在$ 1中输入test
):
const [test, setTest] = useState($2);
但是我得到这样的结果:
const [/capitalize, set/capitalize] = useState();
在官方文档中,我发现了这样的规则:'${' int ':' '/upcase' | '/downcase' | '/capitalize' '}'
。
您能告诉我我在做什么错吗?
您可以在下面的代码段中使用所请求的输出:
const [$1, set${1/(.*)/${1:/capitalize}/}] = useState($2);
输出将是(如果我输入$ 1作为测试):
const [test, setTest] = useState();
让我们看看为什么您的版本${1:/capitalize}
不起作用:
这是您从https://code.visualstudio.com/docs/editor/userdefinedsnippets引用的摘录语法的一部分
tabstop ::= '$' int
| '${' int '}'
| '${' int transform '}'
-snip-
transform ::= '/' regex '/' (format | text)+ '/' options
format ::= '$' int | '${' int '}'
| '${' int ':' '/upcase' | '/downcase' | '/capitalize' '}'
因此,最初看起来${1:/capitalize}
是正确的,只是看似语法上方的最后一行
${' int ':' '/capitalize'
是有效选项。但是您必须跟踪语法以正确使用它。 format
语法只能在transform
中使用。我们在以下位置看到这一点:
transform ::= '/' regex '/' (format | text)+ '/' options
因此您的版本不包含转换。您没有必要的regex
优先级。因此,这些'/upcase' | '/downcase' | '/capitalize'
选项只能与正则表达式一起用作转换的一部分(尽管您可以有一个空的正则表达式,但这无济于事,并且仍然仍然需要有正则表达式的入口点)。
这里是转换的一般形式:
${int/regex captures here/do something with the captures here, like ${1:/capitalize} /}
请注意,第一个$1
是一个制表符,但第二个$1
(带有大写字母)不是一个制表符,而是对前一个正则表达式中第一个捕获组的引用。因此,转换只能转换正则表达式已捕获的内容。
[语法要求format
选项是transform
的一部分,并且变换要求regex
,并且$n
部分中的format
引用捕获组,而不是Tabstop变量。
我希望这一切都说得通。