Текст и повседневные инструменты · Текстовый инструментарий
Как преобразователи регистра разделяют CamelCase и такие аббревиатуры, как parseHTTPResponse
· Как это работает
преобразование текста рабочий процесс разработчика Юникод
Объясняет три граничных правила, которые применяет хороший преобразователь регистров — промежутки-разделители, переходы от нижнего к верхнему и края акронимов — и почему parseHTTPResponse2Json — это тест, который выявляет слабые места.
parse_h_t_t_p_response и другие сбои — почему конвертировать идентификаторы сложнее, чем конвертировать «hello world»
Превратить «hello world» в hello_world легко; превращение parseHTTPResponse в parse_h_t_t_p_response является признаком того, что алгоритм обрабатывает каждую заглавную букву как слово. Разработчику, переименовывающему идентификаторы JavaScript для Python API, требуется обратное: сначала идентифицировать токены, а затем применять соглашение о присоединении места назначения. Один и тот же первый шаг должен привести к выводу питания «Змея», «кебаб», «Верблюд» и «Паскаль», иначе четыре кнопки не смогут определить, где начинаются слова.
Правило первое: разделители — пробелы, дефисы, подчеркивания и знаки препинания обозначают границу, сколько бы их ни было подряд.
Пробелы, дефисы, символы подчеркивания и другие символы, не являющиеся буквами/non-number, уже обозначают границы. Рассматривайте серию как один разделитель: button--primary должен стать двумя токенами, а не пустым токеном между дефисами. Преобразователь регистра ToolAcre разделяется на выражения с поддержкой Unicode для букв и цифр, поэтому обычные буквы, отличные от ASCII, не выбрасываются просто потому, что они находятся за пределами A–Z. Нормализация пробелов связана с соглашениями об именах, а не с автоматическим изменением исходного исходного файла.
Правило второе: переходы от нижнего к верхнему — строчная буква или цифра, за которой следует заглавная, начинает новое слово.
Шаблон для строчной буквы или цифры, за которой следует прописная буква, вставляет границу перед прописной буквой. Это превращает parseResponse в parse + Response и позволяет 2Json стать 2 + Json. Это правило само по себе не отделяет предыдущее слово от его последней цифры: ToolAcre рассматривает Response2 как один токен перед разделением заглавной J. Хотите ли вы Response + 2, это решение руководства по стилю, поэтому проверяйте числовые идентификаторы, а не предполагайте, что каждый преобразователь делает один и тот же выбор.
Правило третье: края аббревиатуры — серия заглавных букв, за которой следует пара заглавных и строчных букв, завершает аббревиатуру перед последней заглавной буквой.
Акрониму нужен еще один просмотр вперед. В HTTPResponse заглавная буква HTTP заканчивается перед R, поскольку за R следует ответ в нижнем регистре. Правило, соответствующее прогону и паре заглавных и строчных букв, вставляет сюда границу: HTTP + Response, а не H + T + T + P + Response. Когда имя заканчивается заглавными буквами, суффикс в нижнем регистре, обозначающий новое слово, отсутствует, и аббревиатура остается вместе. В этом разница между токенизацией идентификаторов и вставкой разделителя перед каждой заглавной буквой.
Цифры и крайние случаи — где разделяется «2Json» и почему ни один набор правил не удовлетворяет всем руководствам по стилю
Соглашения о цифрах остаются неоднозначными: не все версии version2Parser, HTTP2Json и IP6Address подразумевают одну и ту же группировку слов. ToolAcre группирует цифры с предыдущим токеном до тех пор, пока последующая заглавная буква не активирует следующую границу. Аналогично, буква с прописными буквами, зависящими от локали, может расширяться или вести себя иначе, чем ASCII: турецкий пунктир/dotless i и немецкий ß заслуживают ручной проверки. Инструмент выполняет детерминированное преобразование, а не претендует на понимание семантического именования переменной.
Рабочий пример — запуск parseHTTPResponse2Json и класса CSS через дефис через змейку, кебаб, верблюд и Pascal.
Запустите parseHTTPResponse2Json через конвертер фактического регистра. Он создает parse_http_response2_json в случае змеи, parse-http-response2-json в случае кебаба, parseHttpResponse2Json в случае верблюда и ParseHttpResponse2Json в случае Pascal. Для button--primary последовательные разделители сворачиваются в button_primary и button-primary. Эти выходные данные демонстрируют как успешное правило акронимов, так и выбор группировки цифр. Прежде чем использовать поиск и замену в базе кода, протестируйте пункт назначения API.
Что здесь не распространяется — специфичный для региона регистр, например, турецкий пунктирный i, для которого есть отдельный пост.
Этот механизм не реализует свертывание регистра в каждом языке, не делает вывод о том, что аббревиатура обозначает определенный термин предметной области, или не переименовывает ссылки во всей программе. Преобразование строк и идентификаторов отличается от рефакторинга исходного кода с учетом символов. Инструмент не может обещать, что служба Python примет переименованное поле JSON; вызывающие абоненты могут по-прежнему зависеть от старого написания. Запустите тесты схемы после изменения имен общедоступных полей.
Вывод: преобразователь регистров Text Toolkit применяет эти три правила и мгновенно отображает результат, чтобы вы могли проверить его перед вставкой в код.
Сначала идентифицируйте токены, используя разделители, переходы и края акронимов; только тогда присоединяйтесь и делайте их. Text Toolkit делает эти правила видимыми с немедленным выводом и позволяет отменить преобразование. Для имени поля, состоящего из аббревиатур, сравните реальные результаты Snake/kebab, а не слепо применяйте простое регулярное выражение с заглавными буквами ко всему репозиторию.