ckandeler added inline comments.
================ Comment at: clang-tools-extra/clangd/SemanticHighlighting.cpp:382 + + // For the inner element of a nested template instantiation with no space + // between the '>' characters, TemplateSpecializationLocInfo::RAngleLoc has ---------------- kadircet wrote: > i am actually having a hard time following the logic here. it feels like what > you really want is map `>` back to its file location, possibly to a `>>` > token, and deal with second case specially. > so maybe something like: > ``` > // RLoc might be pointing at a virtual buffer when it's part of a `>>` token. > RLoc = SM.getFileLoc(RLoc); > // Make sure token is part of the main file. > RLoc = getHighlightableSpellingToken(RLoc); > if(!RLoc.isValid()) > return; > > const auto *RTok = TB.spelledTokenAt(RLoc); > // Handle `>>`. RLoc is always pointing at the right location, just change > // the end to be offset by 1. > // We'll either point at the beginning of `>>`, hence get a proper spelled > // or point in the middle of `>>` hence get no spelled tok. > if (!RTok || RTok->kind() == tok::greatergreater) { > Position Begin = sourceLocToPosition(SourceMgr, RLoc); > Position End = sourceLocToPosition(SourceMgr, RLoc.getLocWithOffset(1)); > addToken(*LRange, HighlightingKind::Bracket); > addToken({Begin, End}, HighlightingKind::Bracket); > return; > } > > // Easy case, we have the `>` token directly available. > if (RTok->kind() == tok::greater) { > if (auto RRange = getRangeForSourceLocation(RLoc)) { > addToken(*LRange, HighlightingKind::Bracket); > addToken(*RRange, HighlightingKind::Bracket); > } > return; > } > ``` > > This should also make sure you're handling line continuations properly. Indeed, thanks. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D139926/new/ https://reviews.llvm.org/D139926 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits