При создании фрагмента VSCode, как я могу преобразовать переменную в case-case (например, TitleCase)? - PullRequest
0 голосов
/ 18 октября 2018

https://code.visualstudio.com/docs/editor/userdefinedsnippets#_placeholdertransform

Моя цель - автоматически установить имя класса в контексте вставляемого фрагмента.VSCode изначально не поддерживает имена классов или методов, но поддерживает имя файла.

Мои имена файлов близко имитируют имя класса:

foo-bar.ts для class FooBar.

Вот мой текущий фрагмент кода, в котором я могу преобразовать "foo-bar" в "Foo-bar", используя собственную грамматику "прописных букв", предоставленную VSCode.TM_FILENAME_BASE - это собственная переменная, которая извлекает имя файла без расширения:

"My Snippet": {
    "scope": "typescript",
    "prefix": "snippet",
    "body": [
        "${1}() {",
        "\treturn this.get(${TM_FILENAME_BASE/(.*)/${1:/capitalize}/}.FIELD.${3});",
        "}",
        "",
        "$0"
    ],
    "description": "Creates a function wrapper for a model's attribute."
}

Я хотел бы преобразовать "foo-bar" в "FooBar".

Ответы [ 2 ]

0 голосов
/ 20 августа 2019

Подумал, что было бы полезно дополнить отличный ответ Марка другим примером.

В моем случае я хотел взять имя - как выделенный текст - и преобразовать его в код Swift, который бы создавал новый класспередавая имя переменной и адрес электронной почты.

Так, например, я выбираю John Smith в качестве имени, фамилии и преобразую в:

let johnSmith = User(name: "John Smith", email: "john.smith@foorbar.com")

Фрагмент кода дляэто будет выглядеть следующим образом:

"User": {
        "prefix": "u",
        "body": [
            "\tlet ${TM_SELECTED_TEXT/([a-zA-Z]*) *([a-zA-Z]*)/${1:/downcase}$2/} = User(name: \"${TM_SELECTED_TEXT}\", email: \"${TM_SELECTED_TEXT/([a-zA-Z]*) *([a-zA-Z]*)/${1:/downcase}.${2:/downcase}/}@foobar.com\")\n",
        ],
        "description": "Create User with name and email"
    }
0 голосов
/ 18 октября 2018

Попробуйте:

  "My Snippet": {
    "scope": "typescript",
    "prefix": "snippet",
    "body": [
      "${1}() {",

      // "\treturn this.get(${TM_FILENAME_BASE/([a-z]*)-*([a-z]*)/${1:/capitalize}${2:/capitalize}/g}.FIELD.${3});",

      "\treturn this.get(${TM_FILENAME_BASE/(.*)/${1:/pascalcase}/g}.FIELD.${3});",

      "}",
      "",
      "$0"
    ],
    "description": "Creates a function wrapper for a model's attribute."
  }

EDIT : В октябре 2018 года преобразование \pascalcase было добавлено в vscode - см. commit , но еще не добавленок документации (на дату этого редактирования).Выше я добавил гораздо более простое преобразование, которое выполняет преобразование PascalCase.

См. Также преобразование фрагмента в CamelCase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...