Visual studio 代码用户片段大写无法正常工作

Visual studio code user snippets capitalize not working properly

我写了这样的代码

"State": {
    "prefix": "state",
    "body": [
        "const [, set${1:/capitalize}] = useState();"
    ],
    "description": "Adds state"
},

我预计结果会是这样的(如果我在 $1 中输入 test):

const [test, setTest] = useState();

但我得到这样的结果:

const [/capitalize, set/capitalize] = useState();

在官方文档中我发现了这样的规则:'${' int ':' '/upcase' | '/downcase' | '/capitalize' '}'.

你能告诉我哪里做错了吗?

您可以对请求的输出使用以下代码段:

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

输出将是(如果我输入 $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' 选项只能用作正则表达式转换的一部分(虽然你可以有一个空的正则表达式,但这对你没有帮助,无论如何你仍然需要有正则表达式入口点)。

这是变换的一般形式:

${someInt/regex captures here/do something with the captures here, like ${1:/capitalize} /}

请注意,第一个 $someInt 是一个制表位 - 例如,它可能是 </code>,但第二个 <code>(带有大写)是 不是tabstop 而是对前面正则表达式中 第一个捕获组 的引用。因此,转换只能转换正则表达式捕获的内容。

语法要求 format 选项是 transform 的一部分,并且转换要求 format 中的 regex$n ] 部分指的是捕获组而不是制表位变量。

我希望这一切都有意义。