HighCommander4 wrote: > I thought the `GuessObjC` flag would allow clangd to skip the guessing ObjC > part for those "users who merely use these libraries (and so may open them in > the editor to look at the header, but will not try to format it)".
Ok, I see what you're getting at. Clangd calls into `guessLanguage()` via `format::getStyle()` which [calls `guessLanguage()`](https://searchfox.org/llvm/rev/60a904b2ad9842b93cc5fa0ad5bda5e22c550b7e/clang/lib/Format/Format.cpp#3956). I audited clangd's code to see what it uses the returned `FormatStyle` for: 1. When hovering over a symbol, we call `format::reformat()` on the code snippet shown in the hover (e.g. definition of the variable whose use you are hovering over). 2. Formatting edits (via `format::cleanupAroundReplacements()` and `format::formatReplacements()`) made by various clangd operations (e.g. accepting a code completion proposal, performing a rename or other code action, etc.) 3. Inserting new `#include` directives (e.g. associated with a code completion proposal, or a quick-fix for a diagnostic). For this one, clangd inspects `IncludeStyle` manually to choose an insertion point. 4. Formatting the whole file (or a selected range of text) using `format::reformat()`. Of these, (1) is the only one that can be triggered without modifying the file. So, if `format::getStyle()` had a `GuessObjC` parameter (which it propagated into `guessLanguage()`), I think we could refactor things such that (1) used `GuessObjC=false` and the others used `GuessObjC=true`. (We may even be able to use `GuessObjC=false` for (2) and (3), since those are just formatting a small amount of code.) @owenca if you're ok in principle with this libFormat API extension (adding an optional `GuessObjC` parameter to `format::getStyle()`), I'm happy to try prototyping these changes in clangd. https://github.com/llvm/llvm-project/pull/78925 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits