Как получить идентификатор модуля из TM_FILEPATH во фрагменте vscode? - PullRequest
0 голосов
/ 06 декабря 2018

Есть ли способ преобразовать значение переменной TM_FILEPATH в идентификатор модуля?

Я хотел бы создать фрагмент, который разрешает идентификатор модуля:

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

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

Отрезанный выше код дает мне <amd-module name="store\calc" />, но как мне избавиться от обратной косой черты?

1 Ответ

0 голосов
/ 09 декабря 2018

Попробуйте это:

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

Это длинный, но достаточно мощный (и все эти необходимые двойные экранирования!).

Это будет обрабатывать каталоги с разделителями \ или / path.

[\\\\\\/] означает либо \, либо / / (вам просто нужно 3 избежать обратной косой черты перед \ в фрагменте vscode и два перед /) !!

Так [^\\/\\\\]* означает получить символыпока вы не нажмете косую черту.

Это регулярное выражение будет работать с любым количеством каталогов в разделе "client".Частично спасибо global regex modifier g.

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

Эта часть хороша: $2${3:+\/}, что означает вставку соответствующей группы 2, и только если есть соответствующая группа 3, добавьте обратную косую черту /.Это включается в игру с учетом последнего каталога с файлом в нем и заменой захваченной группы 3 \ на /, как вы хотите.

...