source_file
block_comment
/* "/*"
*/ "*/"
use_declaration
use "use"
scoped_use_list
identifier "tree_sitter"
:: "::"
use_list
{ "{"
identifier "Node"
, ","
identifier "Point"
, ","
identifier "Range"
} "}"
; ";"
use_declaration (+41 nodes collapsed)
block_comment
/* "/*"
outer_doc_comment_marker "*"
doc_comment "\n* The API that can be used to transform the AST Diff, which"...
*/ "*/"
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Clone"
, ","
identifier "Default"
) ")"
] "]"
struct_item (+30 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " The text of `node`'s own span that isn't covered by any of "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `line_comment` node with one `//` child, this is everything"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " actual words), since nothing else claims those bytes. For a"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " a `module`, ...), this is normally just the whitespace/punc"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " content almost always lives inside a named child, not in th"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " This is what makes it possible to tell \"this node's own un-"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " comment) apart from \"this node is a container and something"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `block` that gained/lost/rearranged a child) without hardco"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " a container's own gap text rarely differs at all beyond whi"...
function_item (+226 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Like `own_content`, but returns the single contiguous gap's"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " of concatenating every gap into a `String` - `None` if the "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " more than one gap (e.g. a container with content both befor"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " last). Precise sub-node positions (see `intra_node_update_r"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " contiguous span; a node with multiple gaps keeps reporting "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " before this existed.\n"
function_item (+267 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Byte length of the longest common prefix between `a` and `b"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " boundaries (never splits a multi-byte character) - the retu"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " matching character, which is guaranteed to be a valid byte-"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " matched characters have identical `len_utf8()`, and if the "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " string is a character-wise prefix of the other, the returne"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " string's own byte length (also always a valid boundary in i"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " too, since every character up to it matched one-for-one).\n"
function_item (+141 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Byte length of the longest common suffix between `a` and `b"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `common_prefix_byte_len`, mirrored from the end. Callers pa"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " common prefix, so the returned length can never overlap it."...
function_item (+147 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " The `tree_sitter::Point` reached after advancing `offset` b"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `start`. Byte-based, not char-based, to match tree-sitter's"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `text_range::row_col_to_byte_index`'s doc comment) - `offse"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `text`, which every call site guarantees (see `common_prefi"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " above).\n"
function_item (+116 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Builds a `TextRange` from two `tree_sitter::Point`s directl"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " never a real tree-sitter node's own range (e.g. the changed"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " string/comment). `TextRange::from_treesitter_range` only re"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `tree_sitter::Range` argument, not the byte fields (it reco"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `columns_per_row` itself), so the synthetic range's byte fi"...
function_item (+71 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " One side's own text plus what's needed to turn a byte offse"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the point it starts at in the full file, and that file's pe"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `text_range_from_points`'s end-of-row normalization). Bundl"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `intra_node_update_ranges` under clippy's argument-count li"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " otherwise completely independent, never compared against ea"...
struct_item (+41 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Splits an `Update`/`MatchButNotIdentical` node's own text i"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " common Identical prefix, the differing Update middle, and a"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " of reporting the node's entire text as changed. This is wha"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " string, comment, or identifier highlight only the part that"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Falls back to a single whole-span `Update` range (`whole_so"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `last_non_move_range` exactly like the pre-existing behavio"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " common prefix or suffix at all - the two texts differ from "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " character, so there's nothing more precise to report.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " The prefix/suffix `Identical` sub-ranges get *real* destina"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `destination_start`, the actual matched node/span's own sta"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " placeholder `last_non_move_range` anchor: unlike a plain De"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " counterpart really does exist at a real position, and givin"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " destinations would risk corrupting `extend_into` accumulati"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " genuinely-Identical neighbor range that does carry a real d"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " uses the placeholder anchor, matching the pre-existing conv"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " ranges carry cross-file-accurate destinations.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Symmetric by construction: `common_prefix_byte_len`/`common"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " characters pairwise for equality, which doesn't depend on w"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " \"destination\" - so calling this with the two texts swapped "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " before->after and once for after->before) always produces t"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the same operations, in the same order. `ranges`'s caller i"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " this guarantee: pushing a multi-range result straight into "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " usual same-operation-neighbor-merging accumulator, since th"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " (possibly different) surrounding text and could otherwise m"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " diverge after accumulation even though this function itself"...
function_item (+613 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Returns the RangeMatches from source to destination.\n"
function_item
fn "fn"
identifier "ranges"
parameters (+31 nodes collapsed)
-> "->"
generic_type
type_identifier "Vec"
type_arguments
< "<"
type_identifier "RangeMatch"
> ">"
block
{ "{"
let_declaration
let "let"
mutable_specifier "mut"
identifier "ranges"
= "="
call_expression
scoped_identifier
identifier "Vec"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
line_comment
// "//"
let_declaration
let "let"
identifier "source_columns"
= "="
call_expression
identifier "compute_columns_per_row"
arguments
( "("
reference_expression
& "&"
field_expression
identifier "source"
. "."
field_identifier "contents"
) ")"
; ";"
let_declaration
let "let"
identifier "destination_columns"
= "="
call_expression
identifier "compute_columns_per_row"
arguments
( "("
reference_expression
& "&"
field_expression
identifier "destination"
. "."
field_identifier "contents"
) ")"
; ";"
expression_statement
match_expression
match "match"
tuple_expression
( "("
reference_expression
& "&"
field_expression
identifier "source"
. "."
field_identifier "ast"
, ","
reference_expression
& "&"
field_expression
identifier "destination"
. "."
field_identifier "ast"
) ")"
match_block
{ "{"
match_arm
match_pattern
tuple_pattern
( "("
identifier "None"
, ","
identifier "None"
) ")"
=> "=>"
block
{ "{"
line_comment
// "//"
line_comment
// "//"
} "}"
match_arm (+101 nodes collapsed)
match_arm (+101 nodes collapsed)
match_arm
match_pattern
tuple_pattern
( "("
tuple_struct_pattern
identifier "Some"
( "("
identifier "source_tree"
) ")"
, ","
tuple_struct_pattern
identifier "Some"
( "("
identifier "_destination_tree"
) ")"
) ")"
=> "=>"
block
{ "{"
let_declaration
let "let"
identifier "root_node"
= "="
call_expression
field_expression
identifier "source_tree"
. "."
field_identifier "root_node"
arguments
( "("
) ")"
; ";"
line_comment
// "//"
line_comment
// "//"
let_declaration
let "let"
mutable_specifier "mut"
identifier "stack"
= "="
call_expression
scoped_identifier
identifier "Vec"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
field_expression
identifier "stack"
. "."
field_identifier "push"
arguments
( "("
identifier "root_node"
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "last_non_move_range"
= "="
call_expression
scoped_identifier
identifier "TextRange"
:: "::"
identifier "zero"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "current_range"
= "="
call_expression
scoped_identifier
identifier "RangeMatch"
:: "::"
identifier "zero"
arguments
( "("
) ")"
; ";"
expression_statement
while_expression
while "while"
let_condition
let "let"
tuple_struct_pattern
identifier "Some"
( "("
identifier "node"
) ")"
= "="
call_expression
field_expression
identifier "stack"
. "."
field_identifier "pop"
arguments
( "("
) ")"
block
{ "{"
expression_statement
if_expression
if "if"
let_condition (+31 nodes collapsed)
block
{ "{"
let_declaration (+21 nodes collapsed)
let_declaration
let "let"
mutable_specifier "mut"
identifier "descend"
= "="
boolean_literal
true "true"
; ";"
expression_statement
match_expression
match "match"
field_expression
identifier "mapping"
. "."
field_identifier "operation"
match_block
{ "{"
match_arm
match_pattern
scoped_identifier
identifier "ASTMappingOperation"
:: "::"
identifier "Identical"
=> "=>"
block
{ "{"
expression_statement
if_expression
if "if"
let_condition
let "let"
tuple_struct_pattern
identifier "Some"
( "("
identifier "destination_node"
) ")"
= "="
call_expression
field_expression
identifier "node_cache"
. "."
field_identifier "get_in_any"
arguments
( "("
reference_expression
& "&"
identifier "mapped_id"
) ")"
block
{ "{"
let_declaration (+25 nodes collapsed)
let_declaration (+26 nodes collapsed)
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
let_declaration (+44 nodes collapsed)
expression_statement
if_expression
if "if"
binary_expression
binary_expression
field_expression
identifier "s"
. "."
field_identifier "start_column"
== "=="
field_expression
identifier "d"
. "."
field_identifier "start_column"
&& "&&"
unary_expression
! "!"
identifier "crossed_backwards"
block (+49 nodes collapsed)
else_clause (+38 nodes collapsed)
expression_statement
assignment_expression
identifier "descend"
= "="
boolean_literal
false "false"
; ";"
} "}"
} "}"
match_arm (+48 nodes collapsed)
match_arm (+48 nodes collapsed)
match_arm (+53 nodes collapsed)
match_arm (+53 nodes collapsed)
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
match_arm (+237 nodes collapsed)
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
match_arm (+300 nodes collapsed)
match_arm
match_pattern
_ "_"
=> "=>"
block
{ "{"
line_comment
// "//"
} "}"
} "}"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
expression_statement (+165 nodes collapsed)
expression_statement
if_expression
if "if"
unary_expression
! "!"
identifier "descend"
block
{ "{"
expression_statement
continue_expression
continue "continue"
; ";"
} "}"
} "}"
line_comment
// "//"
let_declaration
let "let"
mutable_specifier "mut"
identifier "child_cursor"
= "="
call_expression
field_expression
identifier "node"
. "."
field_identifier "walk"
arguments
( "("
) ")"
; ";"
let_declaration (+31 nodes collapsed)
expression_statement (+34 nodes collapsed)
} "}"
expression_statement (+27 nodes collapsed)
} "}"
} "}"
identifier "ranges"
} "}"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Build the `RangeMatch` for a non-Identical, non-Move node: "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " its own right limit (we're appending after whatever was las"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " range's destination there, since the node has no real desti"...
function_item (+67 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Same as `advance_and_build_range`, but for a caller that al"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " use as the source (e.g. `intra_node_update_ranges`'s middle"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " node rather than a whole node's own `node.range()`).\n"
function_item (+69 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Take the destination range, and merge it into the source ra"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Inserted node in the destination are invisible in the sourc"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " ranges and makes the range vectors symetric.\n"
function_item (+216 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " How many rows a range covers, in `line_operations`' convent"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " means \"up to, not including, this row\", so only a genuinely"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Never zero - a sub-line range still occupies the row it sit"...
function_item (+70 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Makes the two sides agree on *which* matched pair relocated"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " blames fewer rows.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `TextDiff::from` builds each side by walking that side's tr"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `crossed_backwards` test asks whether a node's destination "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " anchor. That is a question about walk order, not about the "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " walks name *different* pairs. Moving one import below a blo"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the mover first (advancing its anchor past the block) and t"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " it flags the five; the after walk passes the five in order "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " so it flags one. Both are self-consistent and only one can "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Neither the union nor the intersection is the answer. The i"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " pair is flagged by exactly one walk - which loses the reord"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `crossed_backwards` exists to prevent. The union paints all"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " walk alone. What separates them is size: relocating one lin"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " and the walk that says \"one\" is the one that matched a read"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " So: sum the rows each side blames *where the two disagree*,"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " rewriting the other side to match it. Agreed pairs are neve"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " already agree comes out byte-identical.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Two limits worth stating rather than discovering later. The"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " reorder**: a file containing two independent reorders that "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " one global verdict, and the minority one is decided wrongly"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " clusters needs a notion of which reorder a pair belongs to "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the winner's counterpart needs to *find* it - an exact exte"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " range list, which is not quite total (measured at 99.2% for"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `generate_mapping_site`), so a counterpart that isn't found"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " invented.\n"
function_item (+822 nodes collapsed)
impl_item (+244 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `myers_lcs`'s edit-distance search gives up past this and f"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " file as replaced. `myers_lcs` allocates O(max_edit²) `usize"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the worst case (two sides with no common lines at all) - at"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " genuinely slow search, so this only pays that cost for a fi"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " different; an ordinary edit to a large file (even a 10k-lin"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " returns long before reaching the cap, since Myers' search t"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " *actual* edit distance, however small, rather than always r"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " much higher than `apted::common::FALLBACK_MAX_EDIT` (1000):"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " *subtree* forest, typically small even for a large file, wh"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " *lines*, where 1000 was too easy to exceed on real config/l"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " legitimately large (but not pathological) number of changed"...
const_item
const "const"
identifier "PLAIN_TEXT_MAX_EDIT"
: ":"
primitive_type "usize"
= "="
integer_literal "10_000"
; ";"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " A plain line-level diff (Myers LCS over hashed lines, no AS"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " grammar - `app::compute_diff`'s fallback when either side's"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " unrecognized extension, e.g. a `Makefile`). Returns `(befor"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " shape `TextDiff::all(0)`/`all(1)` produce, so every downstr"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " rendering, `headless::render_text_diff`, `json_output::buil"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `DiffSummary`) works unchanged - none of them actually requ"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " list.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Never produces `Move`: detecting one needs a notion of iden"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " hashed lines give none - a line that moved elsewhere is a d"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " same as a plain `diff -u`.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " It *does* produce `Update`, with sub-line columns, which `d"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " rows inside a hunk by [`shared_affix`] rather than position"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " through [`intra_line_ranges`], which splits it into an iden"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " differing middle, and an identical suffix. So a rewritten l"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the changed characters marked, not as an adjacent delete+in"...
function_item (+51 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `plain_text_line_diff`'s actual implementation, parameteriz"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " tests can exercise the \"gave up\" path with a small cap inst"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " squared (10,000² ≈ 1.6GB and genuinely slow) just to prove "...
function_item (+246 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " The parser-independent line-diff core, shared between `plai"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " path (via `plain_text_line_diff_with_max_edit`) and the mat"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " rearchitecture (`TODO.md`, `~/.claude/plans/iterative-herdi"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `myers_lcs` gave up past `max_edit` - callers fall back to "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " (`whole_file_replaced`) rather than trusting a partial/none"...
struct_item (+49 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Classification of a whole-file line diff, used to license ("...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " constrained, delete-free/insert-free resolver downstream - "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " plan's \"Step 2 - text-diff-first classification\" section. C"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " granularity (72/338 fixtures `InsertOnly`/`DeleteOnly`, zer"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " yet validated at hunk granularity within `Mixed` files.\n"
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Clone"
, ","
identifier "Copy"
, ","
identifier "PartialEq"
, ","
identifier "Eq"
) ")"
] "]"
enum_item (+45 nodes collapsed)
impl_item (+152 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Whole-file classification at the pipeline's default edit-di"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the entry point Phase 3a's dispatcher uses. A `myers_lcs` g"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " license should ever be granted from an edit distance too la"...
function_item (+68 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Runs `myers_lcs` over hashed lines. Returns `None` if it ga"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `PLAIN_TEXT_MAX_EDIT`'s doc comment) - callers must not tre"...
function_item (+187 nodes collapsed)
function_item (+111 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " One whole line as a `TextRange`: `(row, 0)` to `(row + 1, 0"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " \"all of row, including its own line break\" (see `text_range"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " a full row via `(row + 1, 0)`).\n"
function_item (+33 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " How much of the longer of two unmatched lines their common "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " [`intra_line_ranges`] will decompose them into \"same, chang"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " a whole-line delete + insert.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " A *ratio* on the longer line, not an absolute length: struc"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " coincidence all the time (two unrelated rows of a wide CSV "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " absolute bar trivially), and decomposing an unrelated pair "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " all - it invents a \"common prefix\" out of two rows that mer"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the real change inside a span labelled `Identical`. 50% was"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `research/data/quality/optimal_solutions_benchmark.csv`, wh"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " its `elapsed_ms` field (~97% shared affix) while two unrela"...
const_item
const "const"
identifier "MIN_SHARED_AFFIX_PERCENT"
: ":"
primitive_type "usize"
= "="
integer_literal "50"
; ";"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Byte lengths of the common prefix and suffix of two unmatch"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " dissimilar to be treated as one line rewritten (see [`MIN_S"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " from [`intra_line_ranges`] because [`plan_gap`] needs the *"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " which lines pair with which, and only pays for the ranges o"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " The suffix is measured on the already-prefix-trimmed remain"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `intra_node_update_ranges` does), so prefix + suffix can ne"...
function_item (+197 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Sub-line ranges for one *changed* line pair: the common pre"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " and only the differing middle as `Update`, so a one-field e"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " field instead of the whole row. `None` under the same condi"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Columns are byte offsets within the row, matching tree-sitt"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `TextRange` inherits - see `text_range::row_col_to_byte_ind"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " multi-byte-character crash that established it. `common_pre"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " both guarantee char boundaries, and the suffix is measured "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " remainders (exactly as `intra_node_update_ranges` does) so "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the shorter line.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Both sides always get the same number of ranges. That symme"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " vectors are consumed index-comparably downstream (see `merg"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " note in `ranges` about bypassing the merging accumulator to"...
function_item (+420 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Walks `pairs` (matched `(before_row, after_row)`, ascending"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " preserves relative order on both sides) once, emitting one "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " and one merged `Delete`/`Insert` `RangeMatch` per *gap* bet"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " block reads, and n/p-navigates, as a single change rather t"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Every unmatched run's `destination` is anchored at the othe"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " match, advanced past it via `right_limit` - the exact conve"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " advance_and_build_range` uses for the AST path's own plain "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " cross-panel cursor lands at \"where this content would be if"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " instead of at a coordinate-space-confused row (before-side "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " diverge once there's been any earlier insert/delete).\n"
function_item (+411 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " One unmatched run - the before-rows and after-rows between "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " after the last one).\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Default behaviour is one merged `Delete` and one merged `In"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " what makes a block insert/delete read, and `n`/`p`-navigate"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " step per line. That is preserved exactly whenever the run i"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " off similarly enough for [`intra_line_ranges`], this emits "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " When lines do pair off - the same row rewritten rather than"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " one field changed - the run is emitted per [`plan_gap`] ins"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the part that actually differs. Consecutive unpaired rows a"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " block sitting inside an otherwise-rewritten run keeps readi"...
attribute_item
# "#"
[ "["
attribute
identifier "allow"
token_tree
( "("
identifier "clippy"
:: "::"
identifier "too_many_arguments"
) ")"
] "]"
function_item (+997 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " One decision in a gap's line-by-line plan. `Pair` means \"th"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " [`intra_line_ranges`]; the other two are ordinary whole-lin"...
enum_item (+29 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " How far [`plan_gap`] will look ahead on one side to resynch"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " of step, i.e. the longest run of pure insertions or deletio"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " recognise the rows after it as pairs.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Needed because a gap's two sides are only aligned at their "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `research/data/quality/optimal_solutions_benchmark.csv` gai"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " mismatch count, those rows land *among* the existing ones. "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " recognised the first 33 rows and then silently gave up on a"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " row - the whole file downstream of it read as one block rew"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Bounded rather than unbounded so the scan stays O(gap x win"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " genuinely unrelated pair of blocks can't find a spurious pa"...
const_item
const "const"
identifier "GAP_RESYNC_WINDOW"
: ":"
primitive_type "usize"
= "="
integer_literal "16"
; ";"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Decides, for one unmatched run, which before-rows are rewri"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Walks both sides together. Where the current pair clears [`"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " it doesn't, the run has fallen out of step, so this looks a"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " on each side for the nearest position that does clear it, a"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " plain inserts or deletes. Nearest wins, and insertions are "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " result is deterministic.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " The walk is monotonic on both sides - pairs never cross - w"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " range vectors have to come out in ascending row order for `"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " logic to line up.\n"
function_item (+581 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `myers_lcs` gave up (edit distance past `PLAIN_TEXT_MAX_EDI"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " replaced rather than paying for an unbounded search - same "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `apted::common::resolve_residual_forest_via_myers_lcs` alre"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " range at all for an empty side, matching `diff::text::range"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " either side\" case.\n"
function_item (+178 nodes collapsed)
block_comment
/* "/*"
outer_doc_comment_marker "*"
doc_comment "\n* A textual range match. For a given source match, it provi"...
*/ "*/"
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Clone"
, ","
identifier "PartialEq"
) ")"
] "]"
struct_item (+29 nodes collapsed)
impl_item (+267 nodes collapsed)
block_comment
/* "/*"
outer_doc_comment_marker "*"
doc_comment "\n* The diff operation.\n*\n* Why not re-use ASTMappingOperatio"...
*/ "*/"
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Clone"
, ","
identifier "Default"
, ","
identifier "PartialEq"
) ")"
] "]"
enum_item (+62 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " How much of a diff to actually paint.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Not a difference in what was computed - the mapping is iden"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " of it is worth showing. Both readings of the same diff are "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " human-authored ground truth records them as two separate pa"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " a mistake (see `HumanTextMapping`, and `research/data/quali"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the measurements this is built from).\n"
attribute_item (+28 nodes collapsed)
enum_item (+70 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " The characters [`RenderMode::Minimal`] treats as structural"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " whitespace.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " **Operators are deliberately absent.** `+`, `=`, `<`, `&&` "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " carry the entire meaning of a change to a reader: an edit f"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " and a mode that hid it would be reporting a different diff "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " token this actually drops was observed being dropped by han"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " here is included on the grounds that it merely looks like p"...
const_item (+34 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Whether `text` is nothing but structural punctuation and wh"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " covering it says anything a reader needs in [`RenderMode::M"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Empty text is *not* structural: a zero-width range is an in"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " position, and dropping those would remove the only mark one"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " gained or lost.\n"
function_item (+72 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " One side's ranges as `mode` would paint them.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `Full` returns them unchanged. `Minimal` drops the ranges w"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " and drops nothing else - in particular it never merges, spl"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " range that survives is byte-for-byte the one `Full` would h"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " comparable: any disagreement between them is a whole range "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " same region described two ways.\n"
function_item (+198 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " The text `range` covers in `source`, or `None` if it falls "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Rows split on `'\\n'` and columns are byte offsets into a ro"...
function_item (+252 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Assigns one `TextOperation` to each of `line_count` lines, "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " (`TextDiff::all`).\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Deliberately row-granular, not column-precise: a range's co"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " whether it's a zero-width placeholder, never to split a sin"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `diff::text` ranges are whitespace-insensitive and can leav"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " indentation - see `python_leetcode_1_added_if_block_all_ran"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " sub-line spans for a plain-text consumer would be fragile; "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " for each row, the *most specific* operation among all the r"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " precedence comment below). Used by both `tui::headless` (it"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the TUI itself stays column-precise) and `benchmark_other` "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " own or a synthetic one built from a human mapping - to a pe"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " external line-based tool like Unix `diff`).\n"
function_item (+233 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Line-level +/-/~ counts for a completed diff - e.g. for a c"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `+12 -4 ~2`.\n"
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Clone"
, ","
identifier "Copy"
, ","
identifier "Default"
, ","
identifier "PartialEq"
, ","
identifier "Eq"
) ")"
] "]"
struct_item (+36 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Counts each side's own [`line_operations`] output independe"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " (a line that exists only in after), `Delete` from the befor"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " before). `Update` is counted once, from the after side only"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " sides at the same row, so counting it from both sides would"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the after side only for the same reason - a moved line exis"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " rows), so its destination is the single representative.\n"
function_item (+276 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " A quick, common-case classification of a diff's overall sha"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " to compute on every completed diff (see `summarize_diff`) f"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " produces, no extra tree-sitter/AST work needed - `CommentOn"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " needs AST-level node-kind access (`is_comment_only_diff`) a"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `summarize_diff_with_comment_check`, not `summarize_diff` i"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " presentation-agnostic (a label, not a color or an icon): ca"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " variant to their own styling, the same separation `tui::hea"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " already draw around `TextOperation`.\n"
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Clone"
, ","
identifier "Copy"
, ","
identifier "PartialEq"
, ","
identifier "Eq"
) ")"
] "]"
enum_item (+186 nodes collapsed)
impl_item (+110 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Whether `a` and `b` contain the same characters once every "...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " each - the check behind `DiffSummary::WhitespaceOnly`. Comp"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " building two new `String`s, since this runs on full file co"...
function_item (+91 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Classifies a diff's overall shape into one of `DiffSummary`"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " doesn't cleanly fit any of them (the ordinary case - most d"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `before_ranges`/`after_ranges` are `TextDiff::all(0)`/`Text"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `DiffSessionData`'s own fields, in `tui::app`), and `before"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " raw source each side was parsed from.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Checked in order from most to least specific, returning the"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `DiffSummary` variant's own doc comment for why that partic"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " (`WhitespaceOnly` before `RefactorMovedOnly` in particular)"...
function_item (+408 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Whether every \"real\" change between `before` and `after` (p"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " nodes (`nodes::is_comment`) - the check behind `DiffSummary"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " error, if either side has no AST (nothing to walk).\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " \"Real\" means the same handful of AST-mapping operations `ra"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " visible change - `DeleteWithChildren`, `InsertWithChildren`"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `Update`, or a `MatchButNotIdentical` whose `own_content` d"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " criteria `ranges` itself uses (mirrored deliberately, not r"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " and merges the two sides' ranges, work this doesn't need fo"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `Identical`, `Move`, a non-childless plain `Delete`/`Insert"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `own_content` doesn't differ - is bookkeeping for an ancest"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " the change itself, so it's skipped by descending into it ra"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Returns `false`, not `true`, if no qualifying operation exi"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `Move`s): \"comment-only\" is a claim about *what* changed, a"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " diff where nothing did.\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment "\n"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Checks comment-ness via `is_comment_or_inside_comment`, not"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " kind())`: at least one grammar (Rust's `line_comment`) repr"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " tree of its own rather than one opaque token (confirmed emp"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " separate child node), so the specific node actually carryin"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " comment-kind piece *of* a comment.\n"
function_item (+771 nodes collapsed)
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Same as `summarize_diff`, but folds in `DiffSummary::Commen"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " precedence than every other case (see that variant's own do"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " A separate function, not an extra parameter on `summarize_d"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " AST-level node-kind access (`is_comment_only_diff`, over `A"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " `summarize_diff`'s own inputs (`TextDiff`'s already-flatten"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " callers without that access, or that don't need it, can kee"...
function_item (+114 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "test"
) ")"
] "]"
mod_item (+12540 nodes collapsed)