Before has 3 comment nodes, after has only 2. But realistically a human would just expect a 3:2 Update mapping.

Before

…lines 1–299 unchanged (299 lines)
300 else if (isSingleDriverUDNT)
301 code = diag::MultipleUDNTDrivers;
302 else if (second->kind == DriverKind::Continuous && first->kind == DriverKind::Continuous)
303 code = diag::MultipleContAssigns;
304 else
305 code = diag::MixedVarAssigns;
306
307 // Use the "second" driver for printing the LSP, unless we see that it's
308 // an indirect port connection or we're printing a message about single-driver
309 // procedures, in which case we'll try the other one.
310 if (second->flags.has(DriverFlags::ViaIndirectPort) ||
311 (bothProcedural && !second->isInSingleDriverProcedure())) {
312 std::swap(first, second);
313 }
314
315 auto secondRange = second->getSourceRange();
316 auto& diag = context.addDiag(symbol, code, secondRange);
317 diag << getLSPName(symbol, *second);
318
319 if (bothProcedural) {
…lines 320–723 unchanged (404 lines)

After

…lines 1–299 unchanged (299 lines)
300 else if (isSingleDriverUDNT)
301 code = diag::MultipleUDNTDrivers;
302 else if (second->kind == DriverKind::Continuous && first->kind == DriverKind::Continuous)
303 code = diag::MultipleContAssigns;
304 else
305 code = diag::MixedVarAssigns;
306
307 // If we're reporting a message about single driver procedures, make sure
308 // the "primary" location is inside a single driver procedure.
309 if (bothProcedural && !second->isInSingleDriverProcedure())
310 std::swap(first, second);
311
312 auto secondRange = second->getSourceRange();
313 auto& diag = context.addDiag(symbol, code, secondRange);
314 diag << getLSPName(symbol, *second);
315
316 if (bothProcedural) {
317 auto pbk = static_cast<ProceduralBlockKind>(second->source);
…lines 318–720 unchanged (403 lines)

Before

translation_unit
comment "//----------------------------------------------------------"...
comment "// DriverTracker.cpp"
comment "// Centralized tracking of assigned / driven symbols"
comment "//"
comment "// SPDX-FileCopyrightText: Michael Popoloski"
comment "// SPDX-License-Identifier: MIT"
comment "//----------------------------------------------------------"...
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/analysis/DriverTracker.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/analysis/AnalysisManager.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/analysis/AnalyzedProcedure.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/ast/ASTVisitor.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/ast/EvalContext.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/ast/LSPUtilities.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/ast/symbols/MemberSymbols.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/diagnostics/AnalysisDiags.h"
" "\""
namespace_definition
namespace "namespace"
nested_namespace_specifier
namespace_identifier "slang"
:: "::"
namespace_identifier "analysis"
declaration_list
{ "{"
using_declaration
using "using"
namespace "namespace"
identifier "ast"
; ";"
function_definition (+51 nodes collapsed)
function_definition (+288 nodes collapsed)
function_definition (+283 nodes collapsed)
function_definition (+128 nodes collapsed)
function_definition (+64 nodes collapsed)
function_definition (+181 nodes collapsed)
function_definition (+173 nodes collapsed)
function_definition (+368 nodes collapsed)
function_definition (+202 nodes collapsed)
function_definition (+174 nodes collapsed)
function_definition (+125 nodes collapsed)
function_definition (+90 nodes collapsed)
function_definition (+75 nodes collapsed)
function_definition
storage_class_specifier
static "static"
primitive_type "bool"
function_declarator (+54 nodes collapsed)
compound_statement
{ "{"
comment "// The default handling case for mixed vs multiple assignmen"...
comment "// First check for more specialized cases here:"
comment "// 1. If this is a non-uwire net for an input or output port"
comment "// 2. If this is a variable for an input port"
declaration (+32 nodes collapsed)
if_statement (+248 nodes collapsed)
if_statement (+181 nodes collapsed)
declaration (+30 nodes collapsed)
declaration
type_identifier "DiagCode"
identifier "code"
; ";"
if_statement (+98 nodes collapsed)
comment "// Use the \"second\" driver for printing the LSP, unless we s"...
comment "// an indirect port connection or we're printing a message a"...
comment "// procedures, in which case we'll try the other one."
if_statement
if "if"
condition_clause
( "("
binary_expression
call_expression
field_expression
field_expression
identifier "second"
-> "->"
field_identifier "flags"
. "."
field_identifier "has"
argument_list
( "("
qualified_identifier
namespace_identifier "DriverFlags"
:: "::"
identifier "ViaIndirectPort"
) ")"
|| "||"
parenthesized_expression
( "("
binary_expression
identifier "bothProcedural"
&& "&&"
unary_expression
! "!"
call_expression
field_expression
identifier "second"
-> "->"
field_identifier "isInSingleDriverProcedure"
argument_list
( "("
) ")"
) ")"
) ")"
compound_statement
{ "{"
expression_statement
call_expression
qualified_identifier
namespace_identifier "std"
:: "::"
identifier "swap"
argument_list
( "("
identifier "first"
, ","
identifier "second"
) ")"
; ";"
} "}"
declaration
placeholder_type_specifier
auto "auto"
init_declarator
identifier "secondRange"
= "="
call_expression
field_expression
identifier "second"
-> "->"
field_identifier "getSourceRange"
argument_list
( "("
) ")"
; ";"
declaration (+22 nodes collapsed)
expression_statement
binary_expression
identifier "diag"
<< "<<"
call_expression
identifier "getLSPName"
argument_list
( "("
identifier "symbol"
, ","
pointer_expression
* "*"
identifier "second"
) ")"
; ";"
if_statement (+73 nodes collapsed)
declaration
type_identifier "SourceLocation"
identifier "overrideLoc"
; ";"
declaration (+135 nodes collapsed)
expression_statement
call_expression
identifier "addOriginalNote"
argument_list
( "("
pointer_expression
* "*"
identifier "second"
) ")"
; ";"
comment "// If the two locations are the same, the symbol is driven b"...
comment "// the same source location but two different parts of the h"...
comment "// In those cases we want a different note about what's goin"...
declaration
placeholder_type_specifier
auto "auto"
init_declarator
identifier "firstRange"
= "="
call_expression
field_expression
identifier "first"
-> "->"
field_identifier "getSourceRange"
argument_list
( "("
) ")"
; ";"
if_statement (+105 nodes collapsed)
expression_statement
call_expression
identifier "addOriginalNote"
argument_list
( "("
pointer_expression
* "*"
identifier "first"
) ")"
; ";"
return_statement
return "return"
false "false"
; ";"
} "}"
function_definition (+1296 nodes collapsed)
function_definition (+542 nodes collapsed)
function_definition (+1074 nodes collapsed)
function_definition (+531 nodes collapsed)
} "}"
comment "// namespace slang::analysis"

After

translation_unit
comment "//----------------------------------------------------------"...
comment "// DriverTracker.cpp"
comment "// Centralized tracking of assigned / driven symbols"
comment "//"
comment "// SPDX-FileCopyrightText: Michael Popoloski"
comment "// SPDX-License-Identifier: MIT"
comment "//----------------------------------------------------------"...
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/analysis/DriverTracker.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/analysis/AnalysisManager.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/analysis/AnalyzedProcedure.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/ast/ASTVisitor.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/ast/EvalContext.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/ast/LSPUtilities.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/ast/symbols/MemberSymbols.h"
" "\""
preproc_include
#include "#include"
string_literal
" "\""
string_content "slang/diagnostics/AnalysisDiags.h"
" "\""
namespace_definition
namespace "namespace"
nested_namespace_specifier
namespace_identifier "slang"
:: "::"
namespace_identifier "analysis"
declaration_list
{ "{"
using_declaration
using "using"
namespace "namespace"
identifier "ast"
; ";"
function_definition (+51 nodes collapsed)
function_definition (+288 nodes collapsed)
function_definition (+283 nodes collapsed)
function_definition (+128 nodes collapsed)
function_definition (+64 nodes collapsed)
function_definition (+181 nodes collapsed)
function_definition (+173 nodes collapsed)
function_definition (+368 nodes collapsed)
function_definition (+202 nodes collapsed)
function_definition (+174 nodes collapsed)
function_definition (+125 nodes collapsed)
function_definition (+90 nodes collapsed)
function_definition (+75 nodes collapsed)
function_definition
storage_class_specifier
static "static"
primitive_type "bool"
function_declarator (+54 nodes collapsed)
compound_statement
{ "{"
comment "// The default handling case for mixed vs multiple assignmen"...
comment "// First check for more specialized cases here:"
comment "// 1. If this is a non-uwire net for an input or output port"
comment "// 2. If this is a variable for an input port"
declaration (+32 nodes collapsed)
if_statement (+248 nodes collapsed)
if_statement (+181 nodes collapsed)
declaration (+30 nodes collapsed)
declaration
type_identifier "DiagCode"
identifier "code"
; ";"
if_statement (+98 nodes collapsed)
comment "// If we're reporting a message about single driver procedur"...
comment "// the \"primary\" location is inside a single driver procedur"...
if_statement
if "if"
condition_clause
( "("
binary_expression
identifier "bothProcedural"
&& "&&"
unary_expression
! "!"
call_expression
field_expression
identifier "second"
-> "->"
field_identifier "isInSingleDriverProcedure"
argument_list
( "("
) ")"
) ")"
expression_statement
call_expression
qualified_identifier
namespace_identifier "std"
:: "::"
identifier "swap"
argument_list
( "("
identifier "first"
, ","
identifier "second"
) ")"
; ";"
declaration
placeholder_type_specifier
auto "auto"
init_declarator
identifier "secondRange"
= "="
call_expression
field_expression
identifier "second"
-> "->"
field_identifier "getSourceRange"
argument_list
( "("
) ")"
; ";"
declaration (+22 nodes collapsed)
expression_statement
binary_expression
identifier "diag"
<< "<<"
call_expression
identifier "getLSPName"
argument_list
( "("
identifier "symbol"
, ","
pointer_expression
* "*"
identifier "second"
) ")"
; ";"
if_statement (+73 nodes collapsed)
declaration
type_identifier "SourceLocation"
identifier "overrideLoc"
; ";"
declaration (+135 nodes collapsed)
expression_statement
call_expression
identifier "addOriginalNote"
argument_list
( "("
pointer_expression
* "*"
identifier "second"
) ")"
; ";"
comment "// If the two locations are the same, the symbol is driven b"...
comment "// the same source location but two different parts of the h"...
comment "// In those cases we want a different note about what's goin"...
declaration
placeholder_type_specifier
auto "auto"
init_declarator
identifier "firstRange"
= "="
call_expression
field_expression
identifier "first"
-> "->"
field_identifier "getSourceRange"
argument_list
( "("
) ")"
; ";"
if_statement (+105 nodes collapsed)
expression_statement
call_expression
identifier "addOriginalNote"
argument_list
( "("
pointer_expression
* "*"
identifier "first"
) ")"
; ";"
return_statement
return "return"
false "false"
; ";"
} "}"
function_definition (+1296 nodes collapsed)
function_definition (+542 nodes collapsed)
function_definition (+1074 nodes collapsed)
function_definition (+531 nodes collapsed)
} "}"
comment "// namespace slang::analysis"