Improve semantic highlight in templates

This commit is contained in:
Fangrui Song 2018-11-07 17:20:41 -08:00
parent 09669fff76
commit 02a6f39559

View File

@ -79,15 +79,19 @@ struct ScanLineEvent {
Position end_pos; // Second key when there is a tie for insertion events. Position end_pos; // Second key when there is a tie for insertion events.
int id; int id;
CclsSemanticHighlightSymbol *symbol; CclsSemanticHighlightSymbol *symbol;
bool operator<(const ScanLineEvent &other) const { bool operator<(const ScanLineEvent &o) const {
// See the comments below when insertion/deletion events are inserted. // See the comments below when insertion/deletion events are inserted.
if (!(pos == other.pos)) if (!(pos == o.pos))
return pos < other.pos; return pos < o.pos;
if (!(other.end_pos == end_pos)) if (!(o.end_pos == end_pos))
return other.end_pos < end_pos; return o.end_pos < end_pos;
// This comparison essentially order Macro after non-Macro, // This comparison essentially order Macro after non-Macro,
// So that macros will not be rendered as Var/Type/... // So that macros will not be rendered as Var/Type/...
return symbol->kind < other.symbol->kind; if (symbol->kind != o.symbol->kind)
return symbol->kind < o.symbol->kind;
// If symbol A and B occupy the same place, we want one to be placed
// before the other consistantly.
return symbol->id < o.symbol->id;
} }
}; };
} // namespace } // namespace