Инструменты разработчика · Сравнение текста
Что на самом деле игнорирует команда «Игнорировать пробелы» в построчном тексте
· Как это работает
разница текста рабочий процесс разработчика пробелы
Разбивает типы пробелов, которые можно нормализовать сравнением, от ведущих отступов до внутренних проходов, и предупреждает, где пробелы имеют смысл и не следует игнорировать.
Каждая строка изменилась, но на самом деле ничего не изменилось — открывается файл с измененным отступом от табуляции к пробелам, который выглядит как стена различий.
Средство форматирования заменяет отступ из четырех пробелов на два пробела, а строковый diff отображает весь файл как измененный. Изменение может быть визуальным шумом, поэтому представление без учета пробелов может помочь рецензенту найти реальные изменения. Но «тот же текст без пробелов» — это не то же самое, что «та же программа». Прежде чем утверждать конфигурацию или исходный файл, сравните обычное и нормализованное представления.
Четыре вида разницы в пробелах — разделяют начальный отступ, конечные пробелы, внутренние проходы и пустые строки, поскольку каждый из них вызван разными инструментами или привычками.
Изменения пробелов происходят в нескольких местах. Ведущий отступ часто возникает в результате форматирования; конечные пробелы из copy/paste;, повторяющиеся пробелы или табуляции внутри строки могут разделять слова или столбцы; пустая строка может разделять блоки. Параметр «Игнорировать пробелы» в ToolAcre обрезает каждую строку и сжимает каждый внутренний пробел до одного пробела для сравнения. Он не просто удаляет все пробелы или считает разные количества строк одинаковыми: две пустые строки остаются двумя единицами сравнения, если другая операция не удаляет их.
Как происходит нормализация перед сравнением — объясняет, что этот параметр преобразует каждую строку в каноническую форму для сопоставления, в то время как исходный текст — это то, что вы читаете.
Ключ строки вычисляется на основе исходного текста перед сопоставлением: функция Trim() удаляет ведущие пробелы /trailing, а регулярное выражение заменяет внутренние строки одним пробелом. Алгоритм сравнения сравнивает ключи, но сохраняет исходный текст в отображаемых строках. Общие префиксы и суффиксы отбрасываются перед построением таблицы LCS, поэтому небольшие изменения в больших документах не обязательно требуют сравнения каждой строки с другой. Существует ограничение на количество различающихся строк 2,000, поскольку таблица динамического программирования увеличивается с длиной обеих сторон.
Рабочий пример: функция Python с измененным отступом и файл YAML — показывает вариант очистки представления Python, а затем скрывает изменение отступа YAML, которое фактически изменяет структуру документа.
Представьте себе функцию Python, все тело которой меняется с четырех пробелов на два, оставаясь при этом на том же уровне вложенности. Игнорирование отступов может скрыть шум форматирования. В YAML перемещение ключа из-под services.web в нижнюю часть служб изменяет его родительское сопоставление, даже если символы каждой строки идентичны после обрезки пробелов. Запустите эту опцию в обоих фрагментах: представление Python станет легче просматривать, а изменение YAML может исчезнуть, несмотря на изменение дерева данных. Никогда не используйте вывод без учета пробелов только для утверждения форматов, чувствительных к отступам.
Когда пробелы являются данными — перечисляет форматы, в которых пробелы имеют значение: YAML, файлы Makefile, блоки кода Markdown, экспорт фиксированной ширины и строковые литералы.
Пробелы — это данные с отступом YAML, рецепты Makefile, блоки кода Markdown и экспорт фиксированной ширины. Внутри строковых литералов замена нескольких пробелов может изменить видимый пользователю текст или подписываемое или хешируемое значение. Даже код с в целом гибким форматированием имеет контексты, в которых пробелы значительны: очевидными примерами являются блоки Python и здесь-документы оболочки. Опция не может вывести эти контексты, поскольку она видит простые строки, а не грамматику языка. Выбирайте его только тогда, когда вы понимаете сравниваемый файл.
Комбинирование параметров пробелов и регистра — описывает, как включение обоих сужает сравнение до одних и тех же букв в том же порядке и что это скрывает.
Сочетание «Игнорировать пробелы» с «Игнорировать регистр» сужает соответствие до строк, в которых остальные буквы и знаки препинания совпадают независимо от регистра или интервала. Это может сделать документ с большим количеством форматирования тихим, но также может скрыть измененный чувствительный к регистру идентификатор, ключ заголовка или путь к файловой системе. ToolAcre переводит ключ сравнения в нижний регистр только тогда, когда вы включаете вторую опцию; он по-прежнему отображает исходный текст строки. Переключайте параметры по одному, чтобы вы могли видеть, какое изменение удалено.
Чего это не касается — опция сравнивает строки после нормализации; он не перекомпоновывает абзацы, не обнаруживает перемещенные блоки и не сравнивает форматирование в расширенных документах.
Эта функция не перекомпоновывает абзацы, не обнаруживает перемещенные блоки, не сравнивает рендеринг HTML и не решает, эквивалентны ли два программных AST. Разница ToolAcre представляет собой построчное динамическое программирование LCS с обрезкой по общему префиксу /suffix, а не алгоритм Майерса, описанный в некоторых общих руководствах по различиям. В больших вставленных файлах он остановится вместо выделения неограниченной матрицы. Используйте анализатор с поддержкой языка или проверку контроля версий для структурных утверждений.
Вывод: переключите его, не используйте по умолчанию — рекомендует запускать оба сравнения и показывает, как сравнение текста ToolAcre позволяет включать и выключать опцию пробелов для одной и той же пары текстов.
Toggle Игнорировать пробелы как представление, а не истину по умолчанию. Сравнение текста сохраняет все, что вы вставляете в браузер, позволяя сравнивать оба представления одних и тех же версий без загрузки контракта или файла конфигурации. Если изменение исчезает в нормализованном представлении, спросите, имеет ли базовый формат значение пробелов, прежде чем решить, что оно безвредно.