Visual Studio 片段:我可以使用 TM_FILENAME 从 RELATIVE_FILEPATH 获取命名空间吗?

Visual Studio Snippet: Can I use TM_FILENAME to get a namespace from RELATIVE_FILEPATH?

我正在研究 Visual Studio 片段一段时间,想知道 if/how 我可以使用 TM_FILENAME 从 RELATIVE_FILEPATH 获取命名空间。例如,我有:

RELATIVE_FILEPATH = src\model\RegisterModel.php

TM_FILENAME = RegisterModel.php

我想从第一个和最后一个 \ 中去掉后者,所以我最终会得到 src\model

如果我将 RegisterModel.php 用作字符串,我可以使它工作,但如果我将 TM_FILENAME 用作变量,则不能。这可能吗?

这是有效的:${RELATIVE_FILEPATH/(RegisterModel.php)//gi}

但我想要这样的东西:${RELATIVE_FILEPATH/(TM_FILENAME)//gi}

提前致谢!

这会让你得到你想要的:

"filepath": {
  "prefix": "rfp",
  "body": [
    "${RELATIVE_FILEPATH/(\\[^\\]*)$//i}",  // with lots of escapes
  ],
  "description": "directories of current file"
}

${RELATIVE_FILEPATH/${TM_FILENAME}//gi} 不起作用 因为根据语法只有 regex 可以进入转换中的那个 ${TM_FILENAME} 点。参见 snippet grammar

相关语法部分:transform ::= '/' regex '/' (format | text)+ '/' options


${RELATIVE_FILEPATH/[${TM_FILENAME}]//gi} 结果:

src\od\Rgsrod.php 因为 [${TM_FILENAME}] 被视为正则表达式(只是这些字符字面上的替代列表),因此每个字符都从 RELATIVE_FILEPATH.

这就是我想要创建的。此代码段创建一个 php class 模板,其中包含来自文件名和位置的正确 class 名称和命名空间。

所以,片段

  "php class": {
    "prefix": "_pclass",
    "body": "<?php\n\nnamespace app\\${RELATIVE_FILEPATH/(\\[^\\]*)$//i};\n\nclass $TM_FILENAME_BASE{\n\n\tpublic function __construct(){}\n\n\tpublic function (){\n\n\t\t\n\t}\n}",
    "description": "PHP class"
  }

I:\xampp\htdocs\mvc2\src\core\form\Field.php 中调用创建了

<?php

namespace app\src\core\form;

class Field{

    public function __construct(){}

    public function (){

        
    }
}

将光标放在方法名称上。节省了我不少时间,希望对其他人也有帮助。