При создании фрагмента VSCode, как я могу преобразовать переменную в case-case (например, TitleCase)?
https://code.visualstudio.com/docs/editor/userdefinedsnippets
Моя цель состоит в том, чтобы автоматически установить имя класса в контексте вставляемого фрагмента. 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".
3 ответа
Попробуй это:
"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});",
"}",
"",
"$0"
],
"description": "Creates a function wrapper for a model's attribute."
}
Это работает, если ваши файлы имеют длину два или более сегмента, например, foo-bar.ts или foo-bar-zoo.ts и т. Д.
См. Также преобразование фрагмента в CamelCase.
TM_FILENAME_BASE
: имя файла текущего документа без его расширений.
${1:/upcase}
: перейти к верхнему регистру.
g
: используется для глобальной замены.
"My Snippet": {
"scope": "typescript",
"prefix": "snippet",
"body": [
"${TM_FILENAME_BASE/(?:^|-|_|\\.)(\\w)/${1:/upcase}/g}"
],
"description": "Creates a function wrapper for a model's attribute."
}
Thought it might be useful to supplement Mark's excellent answer with another example.
In my case, I wanted to take a name - as selected text - and convert it to Swift code that would instantiate a new class passing in variables name and email address.
So for example I select John Smith
as first name, last name and convert to:
let johnSmith = User(name: "John Smith", email: "john.smith@foorbar.com")
Code snippet for this would be as follows:
"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"
}