clangd --clang-tidy: // NOLINT only works sometimes

I recently started using clangd (9.0.1) with --clang-tidy. I noticed
that suppressing diagnostics only sometimes works.

For example:
    using std::array; // NOLINT(misc-unused-using-decls)
works with clang-tidy and clangd, but
    curl_global_init(CURL_GLOBAL_ALL); // NOLINT(hicpp-signed-bitwise)
works only with clang-tidy, not with clangd.

I found the review[1] of the feature when it was introduced but I don't
really understand what's going on there…

Is this a bug or can some warnings not be suppressed?

Kind regards, tastytea

[1] <>

+Sam in case he’s got some thoughts or can rope in others who might.


The issue here is that the warned construct (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) is inside a macro. clangd checks for the NOLINT comment only where the code is spelled (on the macro definition), clang-tidy checks both the spelling location and the expansion location (curl_global_init call).

The inconsistency is a bug: filed

Cheers, Sam