diff --git a/clang/include/clang/Format/Format.h b/clang/include/clang/Format/Format.h index e9b2160a7b924..af635a89d2131 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 getStyle(StringRef StyleName, StringRef FileName, - StringRef FallbackStyle, - StringRef Code = "", - llvm::vfs::FileSystem *FS = nullptr, - bool AllowUnknownOptions = false); +llvm::Expected +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 2f6b52510099a..f5190745165ef 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 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);