HomePhabricator

[clangd] Emit ranges for clangd diagnostics, and fix off-by-one positions

Description

[clangd] Emit ranges for clangd diagnostics, and fix off-by-one positions

Summary:

  • when the diagnostic has an explicit range, we prefer that
  • if the diagnostic has a fixit, its RemoveRange is our next choice
  • otherwise we try to expand the diagnostic location into a whole token. (inspired by VSCode, which does this client-side when given an empty range)
  • if all else fails, we return the zero-width range as now. (clients react in different ways to this, highlighting a token or a char)
  • this includes the off-by-one fix from D40860, and borrows heavily from it

Reviewers: rwols, hokein

Subscribers: klimek, ilya-biryukov, cfe-commits

Differential Revision: https://reviews.llvm.org/D41118