diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Format/Format.cpp | 31 | 
1 files changed, 20 insertions, 11 deletions
| diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index e77314d255d..54b10f474c0 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -2294,6 +2294,25 @@ static FormatStyle::LanguageKind getLanguageByFileName(StringRef FileName) {    return FormatStyle::LK_Cpp;  } +FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef Code) { +  FormatStyle::LanguageKind result = getLanguageByFileName(FileName); +  if (result == 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") { +      std::unique_ptr<Environment> Env = +          Environment::CreateVirtualEnvironment(Code, FileName, /*Ranges=*/{}); +      ObjCHeaderStyleGuesser Guesser(*Env, getLLVMStyle()); +      Guesser.process(); +      if (Guesser.isObjC()) { +        result = FormatStyle::LK_ObjC; +      } +    } +  } +  return result; +} +  llvm::Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName,                                       StringRef FallbackStyleName,                                       StringRef Code, vfs::FileSystem *FS) { @@ -2301,17 +2320,7 @@ llvm::Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName,      FS = vfs::getRealFileSystem().get();    }    FormatStyle Style = getLLVMStyle(); -  Style.Language = getLanguageByFileName(FileName); - -  if (Style.Language == FormatStyle::LK_Cpp && FileName.endswith(".h")) { -    std::unique_ptr<Environment> Env = -        Environment::CreateVirtualEnvironment(Code, FileName, /*Ranges=*/{}); -    ObjCHeaderStyleGuesser Guesser(*Env, Style); -    Guesser.process(); -    if (Guesser.isObjC()) { -      Style.Language = FormatStyle::LK_ObjC; -    } -  } +  Style.Language = guessLanguage(FileName, Code);    FormatStyle FallbackStyle = getNoStyle();    if (!getPredefinedStyle(FallbackStyleName, Style.Language, &FallbackStyle)) | 

