如何创建 VSCode 片段以自动将文件的命名空间插入到我的 src 文件夹中?
How can I create a VSCode snippet to automatically insert namespace of files inside my src folder?
首先,我的 composer.json
文件中的 src
文件夹有以下 psr-4 声明:
"autoload": {
"psr-4": {
"Src\": "src/"
}
},
我想构建一个 VSCode 片段,自动生成位于 src
文件夹内的新文件的命名空间。
到目前为止我里面有这个 php.json
:
"Namespace Src": {
"prefix": "ns_src",
"body": [
"namespace ${RELATIVE_FILEPATH};",
],
"description": "Namespace for file routes inside the src folder"
},
以下文件为例:
src/MyEntity/Application/MyUseCase.php
期望的结果是:
namespace Src\MyEntity\Application;
现在这就是 returns 对我来说:
namespace src/MyEntity/Application/MyUseCase.php;
所以我需要解决:
- src 大写
- 将正斜杠
/
替换为反斜杠 \
。
- 删除最后一个正斜杠后的所有内容
/
。
我知道必须有一种方法可以用正则表达式来做到这一点。我读过这个类似的问题(),但读完后我还没有完全掌握它。
我认为大写问题可以用 \F
解决,如下所示:
https://www.regular-expressions.info/replacecase.html#:~:text=In%20the%20regex%20%5CU%5Cw,is%20not%20a%20word%20character.
这是正确的方法吗?你能给我一些关于这个问题的提示吗?
非常感谢。
你可以使用
"Namespace Src": {
"prefix": "ns_src",
"body": [
"namespace ${RELATIVE_FILEPATH/^(?:.*[\\\/])?(src)(?=[\\\/])|[\\\/][^\\\/]*$|([\\\/])/${1:+Src}${2:+\\}/g};",
],
"description": "Namespace for file routes inside the src folder"
},
参见regex demo。 详情:
^(?:.*[\\/])?(src)(?=[\\/])
- 字符串开头 (^
),然后可选地出现任意零个或多个字符(.*
)和 \
或 /
字符 ([\\/]
),然后 src
捕获到第 1 组,紧接着是 /
或 \
|
- 或
[\\/][^\\/]*$
- 一个 \
或 /
字符,然后 /
和 \
以外的零个或多个字符,直到字符串结尾
|
- 或
([\\/])
- 第 2 组:一个 \
或 /
字符。
${1:+Src}${2:+\\}
替换替换成这样:
${1:+Src}
- 如果组 1 匹配,替换为 Src
${2:+\\}
- 如果组 2 匹配,替换为 \
。
"Namespace Src": {
"prefix": "ns_src",
"body": [
"namespace ${RELATIVE_FILEPATH/^(?:.*[\\\/])?(src)(?=[\\\/])|[\\\/][^\\\/]*$|([\\\/])/${1:+Src}${2:+\\}/g};",
// my version
"namespace ${RELATIVE_FILEPATH/^([^\\\/]+)|[\\\/][^\\\/]*$|([\\\/])/${1:/capitalize}${2:+\\}/g};",
],
"description": "Namespace for file routes inside the src folder"
}
抄袭另一个答案 - 这会捕获前导目录并将其大写,无论它被称为什么。不清楚您是否希望它仅适用于 src
文件夹。
主目录:([^\\\/]+)
首先,我的 composer.json
文件中的 src
文件夹有以下 psr-4 声明:
"autoload": {
"psr-4": {
"Src\": "src/"
}
},
我想构建一个 VSCode 片段,自动生成位于 src
文件夹内的新文件的命名空间。
到目前为止我里面有这个 php.json
:
"Namespace Src": {
"prefix": "ns_src",
"body": [
"namespace ${RELATIVE_FILEPATH};",
],
"description": "Namespace for file routes inside the src folder"
},
以下文件为例:
src/MyEntity/Application/MyUseCase.php
期望的结果是:
namespace Src\MyEntity\Application;
现在这就是 returns 对我来说:
namespace src/MyEntity/Application/MyUseCase.php;
所以我需要解决:
- src 大写
- 将正斜杠
/
替换为反斜杠\
。 - 删除最后一个正斜杠后的所有内容
/
。
我知道必须有一种方法可以用正则表达式来做到这一点。我读过这个类似的问题(\F
解决,如下所示:
https://www.regular-expressions.info/replacecase.html#:~:text=In%20the%20regex%20%5CU%5Cw,is%20not%20a%20word%20character.
这是正确的方法吗?你能给我一些关于这个问题的提示吗?
非常感谢。
你可以使用
"Namespace Src": {
"prefix": "ns_src",
"body": [
"namespace ${RELATIVE_FILEPATH/^(?:.*[\\\/])?(src)(?=[\\\/])|[\\\/][^\\\/]*$|([\\\/])/${1:+Src}${2:+\\}/g};",
],
"description": "Namespace for file routes inside the src folder"
},
参见regex demo。 详情:
^(?:.*[\\/])?(src)(?=[\\/])
- 字符串开头 (^
),然后可选地出现任意零个或多个字符(.*
)和\
或/
字符 ([\\/]
),然后src
捕获到第 1 组,紧接着是/
或\
|
- 或[\\/][^\\/]*$
- 一个\
或/
字符,然后/
和\
以外的零个或多个字符,直到字符串结尾|
- 或([\\/])
- 第 2 组:一个\
或/
字符。
${1:+Src}${2:+\\}
替换替换成这样:
${1:+Src}
- 如果组 1 匹配,替换为Src
${2:+\\}
- 如果组 2 匹配,替换为\
。
"Namespace Src": {
"prefix": "ns_src",
"body": [
"namespace ${RELATIVE_FILEPATH/^(?:.*[\\\/])?(src)(?=[\\\/])|[\\\/][^\\\/]*$|([\\\/])/${1:+Src}${2:+\\}/g};",
// my version
"namespace ${RELATIVE_FILEPATH/^([^\\\/]+)|[\\\/][^\\\/]*$|([\\\/])/${1:/capitalize}${2:+\\}/g};",
],
"description": "Namespace for file routes inside the src folder"
}
抄袭另一个答案 - 这会捕获前导目录并将其大写,无论它被称为什么。不清楚您是否希望它仅适用于 src
文件夹。
主目录:([^\\\/]+)