[clang-tools-extra] [clangd] Add new highlighting modifier `CommandLineDefined`. (PR #175495)

via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 13 21:25:17 PST 2026


anonymouspc wrote:

> Can you elaborate on the motivation for this? What are some scenarios in which it's necessary or important for a user to distinguish between macros defined in source code and macros defined on the command-line?

Here are a few scenarios:

1. Users need to know whether a macro is fixed (defined as part of the source) or configuration-dependent (supplied by the build).
   - **source-defined** macros are typically part of an API contract or an implementation technique. For example:
     - `stdin`, `offsetof`
     - `UINT8_MAX`
     - `BOOST_FUSION_ADAPT_STRUCT`, `BOOST_PP_REPEAT`
     
     They generally aren’t meant to be toggled per build.

   - **command-line-defined** macros are commonly used to select between build variants. For example:
     - `DEBUG`, `NDEBUG`
     - `PKG_STATIC`, `PKG_SHARED`,
     - `_GLIBCXX_USE_CXX11_ABI`. 
     
     These can change depending on the compile command, CMake options, toolchain, etc.

2. Editors/IDEs may want to visually de-emphasize code that is never reachable under the current configuration, but should be careful **not to mislead the user**. For example, 
   - code guarded by `#if __cpp_concepts`, `#if __cpp_lib_ranges` can be safely dimmed in `-std=c++17`.
   - code guarded by `#if NDEBUG`, `#if TBB_SHARED` is dependent on command line. They should not be treated as dead code in the same way.
  
-----

I’m adding an additional flag so that:
- Users who care about the distinction (like me) can quickly identify command-line-defined vs source-defined macros.
- Users who don’t care can ignore it without changing their workflow.

https://github.com/llvm/llvm-project/pull/175495


More information about the cfe-commits mailing list