如何创建 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;

所以我需要解决:

我知道必须有一种方法可以用正则表达式来做到这一点。我读过这个类似的问题(),但读完后我还没有完全掌握它。 我认为大写问题可以用 \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 文件夹。

主目录:([^\\\/]+)