VsCode Snippet PlaceHolder значение по умолчанию File_Name_Base + прописные буквы

Чтобы сэкономить время в будущем, я пытаюсь создать несколько сниппетов для VsCode.

Есть контекст. У меня есть tmp.hpp файл, в котором я хочу иметь

#ifndef TMP_HPP_
    #define TMP_HPP

#endif

Моя проблема в том, что я хочу иметь возможность изменять TMP чем захочу. Для этого я хочу, чтобы это было значение по умолчанию Finaly, если я решу изменить TMP на WHATEVER, я хочу принудительно установить WHATEVER в верхнем регистре.

Чтобы быть более точным, я хочу, чтобы мой ${1} имел значение по умолчанию: ${TM_FILE_BASE}, и я также хочу, чтобы ${1} и / или мой ${TM_FILE_BASE} были ${/upper}

Вот что у меня получилось на данный момент:

"Creates a ifndef": {
    "prefix": "ifndef",
    "body": [
      "#ifndef ${${1:TM_FILENAME_BASE/(.*)/${1:/upcase}/}}_HPP_",
      "  #define ${${1:TM_FILENAME_BASE/(.*)/${1:/upcase}/}_HPP_",
      "",
      "#endif"
    ],
    "description": "Creates a basic ifndef"
}

Спасибо


person Dzious    schedule 28.01.2020    source источник


Ответы (1)


Вам нужно использовать вложенные переменные:

"Creates a ifndef": {
    "prefix": "ifndef",
    "body": [
      "#ifndef ${1:${TM_FILENAME_BASE/(.*)/${1:/upcase}/}}_HPP_",
      "  #define ${1:${TM_FILENAME_BASE/(.*)/${1:/upcase}/}}_HPP_",
      "",
      "#endif"
    ],
    "description": "Creates a basic ifndef"
}

Обратите внимание на часть ${1:${TM_FILENAME_BASE/(.*)/${1:/upcase}/}}. Здесь ${1:...} - это синтаксис для заполнителя, а thr ${TM_FILENAME_BASE/(.*)/${1:/upcase}/} внутри него указывает переменную, которая изменяется с заменой на основе регулярного выражения (все содержимое сопоставляется и захватывается в Группу 1 с помощью /(.*)/ и заменяется вариантом с верхним регистром с помощью ${1:/upcase}/} (здесь , $1 - заполнитель значения Группы 1)).

person Wiktor Stribiżew    schedule 28.01.2020