https://github.com/owenca created https://github.com/llvm/llvm-project/pull/82911
Add a boolean parameter GuessObjC that defaults to true. This allows e.g. clangd to bypass ObjCHeaderStyleGuesser.process() by passing false for the parameter. >From bd85fd1dff5ac7b72913ed175daec3809896e6c0 Mon Sep 17 00:00:00 2001 From: Owen Pan <owenpi...@gmail.com> Date: Sun, 25 Feb 2024 00:00:23 -0800 Subject: [PATCH] [clang-format] Add a parameter to getStyle() and guessLanguage() Add a boolean parameter GuessObjC that defaults to true. This allows e.g. clangd to bypass ObjCHeaderStyleGuesser.process() by passing false for the parameter. --- clang/include/clang/Format/Format.h | 13 +++++++------ clang/lib/Format/Format.cpp | 9 +++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/clang/include/clang/Format/Format.h b/clang/include/clang/Format/Format.h index e9b2160a7b9243..af635a89d21312 100644 --- a/clang/include/clang/Format/Format.h +++ b/clang/include/clang/Format/Format.h @@ -5228,19 +5228,20 @@ extern const char *DefaultFallbackStyle; /// \param[in] AllowUnknownOptions If true, unknown format options only /// emit a warning. If false, errors are emitted on unknown format /// options. +/// \param[in] GuessObjC If true, guess and see if the language is Objective-C. /// /// \returns FormatStyle as specified by ``StyleName``. If ``StyleName`` is /// "file" and no file is found, returns ``FallbackStyle``. If no style could be /// determined, returns an Error. -llvm::Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName, - StringRef FallbackStyle, - StringRef Code = "", - llvm::vfs::FileSystem *FS = nullptr, - bool AllowUnknownOptions = false); +llvm::Expected<FormatStyle> +getStyle(StringRef StyleName, StringRef FileName, StringRef FallbackStyle, + StringRef Code = "", llvm::vfs::FileSystem *FS = nullptr, + bool AllowUnknownOptions = false, bool GuessObjC = true); // Guesses the language from the ``FileName`` and ``Code`` to be formatted. // Defaults to FormatStyle::LK_Cpp. -FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef Code); +FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef Code, + bool GuessObjC = true); // Returns a string representation of ``Language``. inline StringRef getLanguageName(FormatStyle::LanguageKind Language) { diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 2f6b52510099a7..f5190745165ef6 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -3914,13 +3914,14 @@ static FormatStyle::LanguageKind getLanguageByFileName(StringRef FileName) { return FormatStyle::LK_Cpp; } -FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef Code) { +FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef Code, + bool GuessObjC) { const auto GuessedLanguage = getLanguageByFileName(FileName); if (GuessedLanguage == FormatStyle::LK_Cpp) { auto Extension = llvm::sys::path::extension(FileName); // If there's no file extension (or it's .h), we need to check the contents // of the code to see if it contains Objective-C. - if (Extension.empty() || Extension == ".h") { + if (GuessObjC && (Extension.empty() || Extension == ".h")) { auto NonEmptyFileName = FileName.empty() ? "guess.h" : FileName; Environment Env(Code, NonEmptyFileName, /*Ranges=*/{}); ObjCHeaderStyleGuesser Guesser(Env, getLLVMStyle()); @@ -3952,8 +3953,8 @@ loadAndParseConfigFile(StringRef ConfigFile, llvm::vfs::FileSystem *FS, llvm::Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName, StringRef FallbackStyleName, StringRef Code, llvm::vfs::FileSystem *FS, - bool AllowUnknownOptions) { - FormatStyle Style = getLLVMStyle(guessLanguage(FileName, Code)); + bool AllowUnknownOptions, bool GuessObjC) { + FormatStyle Style = getLLVMStyle(guessLanguage(FileName, Code, GuessObjC)); FormatStyle FallbackStyle = getNoStyle(); if (!getPredefinedStyle(FallbackStyleName, Style.Language, &FallbackStyle)) return make_string_error("Invalid fallback style: " + FallbackStyleName); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits