ilya-biryukov added a comment.

Sorry for the delayed response. It seems we absolutely need this if mirroring  
libclang is an absolute requirement.
We seem to have multiple implementation options:

Which classes to use for representing diagnostics? We can:

1. Reuse existing hierarchy for diagnostics. (current option)
2. Have separate hierarchies for "flat" (fixits with notes) and "grouped" 
(fix-its are always attached to main diag). "flat" diagnostics can be stored 
exactly as they come from clang, with notes and main diags in the same vector, 
main diag should lack the "notes" field. I.e. if we choose to go with "raw" 
clang mode, we can as well avoid grouping the notes altogether instead of 
having code that does something in between the classical libclang and new 
clangd approach.

I think the added separation is worth it for code clarity, but also realize 
it's a bunch of boilerplate, so others may disagree. WDYT?

Another alternative that we might explore is always producing fix-its attached 
to notes at the lowest level (in `Diagnostics.cpp`) and reconstructing the 
current diagnostics hierarchy somewhere higher up the chain, e.g. at the 
LSPServer level.
This would allow to keep the option at the LSPServer level and would only 
require extracting a (seemingly simple) conversion function that can be called 
at the LSP Server level.
Having the option handled at the top-level seems like a win, since most of the 
code does not need to care about this option.

+@sammccall, who wanted to take a look at this issue.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D50814



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to