如何从 vscode 片段中的 TM_FILEPATH 获取模块 ID?

How to get the module id from TM_FILEPATH in a vscode snippet?

有没有办法将 TM_FILEPATH 变量的值转换为模块 ID?

我想创建一个解析模块 ID 的片段:

d:\myrepo\client\store\calc.ts => <amd-module name="store/calc" />

{
    "prefix": "amd-module-name",
    "body": [
        "/// <amd-module name=\"${TM_FILEPATH/.*client\\(.*)\..*$//}\" />\n"
    ]
}

上面的片段给了我 <amd-module name="store\calc" /> 但我如何去掉反斜杠?

试试这个:

"someName" : {
    "prefix": "amd-module-name",
    "body": [
        "/// <amd-module name=\"${TM_DIRECTORY/(.*client[\\\/])?([^\/\\]*)([\/\\])?/${3:+\/}/g}\/$TM_FILENAME_BASE\" />\n",
    ]
  },

它很长但相当强大(以及所有那些必要的双重转义!)。

这将处理带有 \ 或 / 路径分隔符的目录。

[\\\/] 表示 \ 或 /(您只需要在 vscode 片段中的 \ 之前使用 3 个转义反斜杠,在 / 之前使用两个转义反斜杠)!!

所以 [^\/\\]* 表示获取字符,直到你击中斜杠。

此正则表达式适用于“client”下的任意数量的目录。部分感谢 global regex modifier g .

d:\myrepo\client\store\subStore\calc.ts => <amd-module name="store/subStore/calc" />

这部分很好:${3:+\/} 这意味着插入匹配组 2,并且仅当有匹配组 3 时才添加反斜杠 /。这会考虑其中包含文件的最后一个目录,并根据需要将捕获的组 3 \ 更改为 /。