Visual Studio代码用户摘要大写无法正常工作

问题描述 投票:0回答:2

我写了这样的代码

"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' '}'

您能告诉我我在做什么错吗?

visual-studio-code code-snippets vscode-snippets
2个回答
0
投票

您可以在下面的代码段中使用所请求的输出:

const [$1, set${1/(.*)/${1:/capitalize}/}] = useState($2);

输出将是(如果我输入$ 1作为测试):

const [test, setTest] = useState();

0
投票

让我们看看为什么您的版本${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变量。

我希望这一切都说得通。

© www.soinside.com 2019 - 2024. All rights reserved.