Конвертировать Pascal Case в Kebab Case во фрагменте кода пользователя VSCode - PullRequest
0 голосов
/ 07 ноября 2018

В настоящее время я пытаюсь написать пользовательский фрагмент, который будет принимать переменную ${1} (например, JobsSummary) и преобразовывать ее в регистр Kebab (jobs-summary).

"Example": {
    "prefix": "test",
    "body": [
      "${1}",
      "${1} -> ${1/(^.)+([A-Z])+/${1:/downcase}/}"
    ]
}

Как правильно преобразовать переменную в пользовательском фрагменте кода Visual Studio из Pascal Case в Kebab Case?

JobsSummary -> jobs-summary

AnotherExampleOfSomething -> another-example-of-something

Ответы [ 2 ]

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

Как насчет этого:

"${TM_SELECTED_TEXT} -> ${TM_SELECTED_TEXT/(^[A-Z][a-z]*|[a-z])([A-Z])?/${1:/downcase}${2:+-}${2:/downcase}/g}"

Это будет производить что-то вроде этого:

AnotherExampleOfSomething -> another-example-of-something

Работает для любого количества слов в PascalCase. Единственное, что он не любит последовательности заглавных букв, как аббревиатуры (только первый символ будет опущен). Однако это может иметь место только для двухбуквенных аббревиатур, поскольку согласно правилам более длинные аббревиатуры должны быть написаны в любом случае, используя регистр верблюд / паскаль (который работает нормально).

0 голосов
/ 08 ноября 2018

Это работает:

"Example": {
  "prefix": "psc",
  "body": [
    "${1}",
    "${1} -> ${1/([A-Z][a-z]*)([A-Z][a-z]*)?([A-Z][a-z]*)?([A-Z][a-z]*)?/${1:/downcase}${2:+-}${2:/downcase}${3:+-}${3:/downcase}${4:+-}${4:/downcase}/}"
  ],
  "description": "Convert from PascalCase to kebab-case"
},

Обычно я могу заставить их работать в гораздо более короткой версии - используя глобальный модификатор - и, таким образом, для любого количества "слов". Но я не смог этого сделать в этом случае. Выше жестко запрограммировано до четырех «слов», как PascalCaseThreeFour.

Это работает от одного до четырех «слов», но не будет работать больше, но вам будет легко изменить столько, сколько вы захотите. Для преобразования есть очевидный паттерн:

Конструкция ${3:+-}, которую вы видите выше, означает, что если есть группа захвата 3, добавьте дефис.

РЕДАКТИРОВАТЬ : следующее упрощение будет обрабатывать любое количество слов в PascalCase:

"${1} -> ${1/([A-Z][a-z]+)/${1:/downcase}-/g}$0"

но приведет к завершению - примерно так:

PascalCaseThreeFourFive -> pascal-case-three-four-five-, если вы не возражаете отступить за конечную черту -. В противном случае было бы легко включить этот фрагмент в макрос , который затем удалил этот последний штрих.

Кроме того, расширение для случая изменения может работать для вас - похоже, у него есть команда kebab-case.

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