Whitespace looks simple until tabs, indentation, nonbreaking spaces and final line endings meet. A useful comparison tool must state which characters participate in equality. TextDiff always normalizes transport line endings, then applies exactly one selected rule inside each line. The displayed original and revised spelling never changes. That separation lets a reviewer suppress known noise without pretending the ignored characters disappeared from the documents.
Three modes answer different questions
Exact mode compares every character and the line-termination flag. Edge mode trims Unicode whitespace only at the start and end of each line before building a comparison key; indentation changes can therefore match while interior spacing remains significant. All-whitespace mode removes every Unicode whitespace run from the key, so `role: editor` and `role: editor` match. None of these operations rewrites the text shown in the diff. Switching modes changes the analytical question, not either source.
CRLF and LF are transport differences here
A Windows checkout may use CRLF where another system uses LF, and older content may contain lone CR. TextDiff converts all three separators to LF before tokenization, so a repository-wide line-ending conversion does not make every unchanged line look replaced. This is an intentional product rule, not exact byte comparison. If byte-for-byte line endings matter, use a binary or version-control inspection tool. TextDiff compares normalized plain text and keeps no original delimiter type in its result.
The final newline is document structure
After separator normalization, the presence of a final LF remains attached to the last logical line. Many source formats conventionally end every line with a terminator, while copied snippets often do not. Hiding that state can make a pasted comparison disagree with a code review. TextDiff therefore treats the states as different and places a visible no-newline marker after the unterminated record in its unified view. The marker is explanatory text; the copied view is not promised to be an installable POSIX patch.