Hi Ben, Your change is causing a test failure on one of the bots, can you take a look?
http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/builds/25515 FAIL: Clang Tools :: clang-apply-replacements/format.cpp (12526 of 38114) ******************** TEST 'Clang Tools :: clang-apply-replacements/format.cpp' FAILED ******************** Script: -- mkdir -p /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format grep -Ev "// *[A-Z-]+:" /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/tools/extra/test/clang-apply-replacements/Inputs/format/yes.cpp > /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format/yes.cpp grep -Ev "// *[A-Z-]+:" /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/tools/extra/test/clang-apply-replacements/Inputs/format/no.cpp > /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format/no.cpp sed "s#\$(path)#/home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format#" /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/tools/extra/test/clang-apply-replacements/Inputs/format/yes.yaml > /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format/yes.yaml sed "s#\$(path)#/home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format#" /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/tools/extra/test/clang-apply-replacements/Inputs/format/no.yaml > /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format/no.yaml clang-apply-replacements -format /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format FileCheck --strict-whitespace -input-file=/home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format/yes.cpp /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/tools/extra/test/clang-apply-replacements/Inputs/format/yes.cpp FileCheck --strict-whitespace -input-file=/home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format/no.cpp /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/tools/extra/test/clang-apply-replacements/Inputs/format/no.cpp -- Exit Code: 134 Command Output (stderr): -- clang-apply-replacements: /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.src/tools/clang/lib/Basic/SourceManager.cpp:393: const clang::SrcMgr::ContentCache *clang::SourceManager::getOrCreateContentCache(const clang::FileEntry *, bool): Assertion `FileEnt && "Didn't specify a file entry to use?"' failed. /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/format.cpp.script: line 8: 49680 Aborted (core dumped) clang-apply-replacements -format /home/buildslave/ps4-buildslave4/llvm-clang-lld-x86_64-scei-ps4-ubuntu-fast/llvm.obj/tools/clang/tools/extra/test/clang-apply-replacements/Output/Inputs/format -- ******************** Douglas Yung > -----Original Message----- > From: cfe-commits [mailto:cfe-commits-boun...@lists.llvm.org] On Behalf Of Ben > Hamilton via cfe-commits > Sent: Wednesday, February 21, 2018 7:55 > To: cfe-commits@lists.llvm.org > Subject: r325691 - [clang-format] New API guessLanguage() > > Author: benhamilton > Date: Wed Feb 21 07:54:31 2018 > New Revision: 325691 > > URL: http://llvm.org/viewvc/llvm-project?rev=325691&view=rev > Log: > [clang-format] New API guessLanguage() > > Summary: > For clients which don't have a filesystem, calling getStyle() doesn't make > much sense (there's no .clang-format files to search for). > > In this diff, I hoist out the language-guessing logic from getStyle() and move > it into a new API guessLanguage(). > > I also added support for guessing the language of files which have no > extension (they could be C++ or ObjC). > > Test Plan: New tests added. Ran tests with: > % make -j12 FormatTests && ./tools/clang/unittests/Format/FormatTests > > Reviewers: jolesiak, krasimir > > Reviewed By: jolesiak, krasimir > > Subscribers: klimek, cfe-commits, sammccall > > Differential Revision: https://reviews.llvm.org/D43522 > > Modified: > cfe/trunk/include/clang/Format/Format.h > cfe/trunk/lib/Format/Format.cpp > cfe/trunk/unittests/Format/FormatTest.cpp > > Modified: cfe/trunk/include/clang/Format/Format.h > URL: http://llvm.org/viewvc/llvm- > project/cfe/trunk/include/clang/Format/Format.h?rev=325691&r1=325690&r2=325691 > &view=diff > ============================================================================== > --- cfe/trunk/include/clang/Format/Format.h (original) > +++ cfe/trunk/include/clang/Format/Format.h Wed Feb 21 07:54:31 2018 > @@ -1981,6 +1981,10 @@ llvm::Expected<FormatStyle> getStyle(Str > StringRef Code = "", > vfs::FileSystem *FS = nullptr); > > +// \brief Guesses the language from the ``FileName`` and ``Code`` to be > formatted. > +// Defaults to FormatStyle::LK_Cpp. > +FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef > +Code); > + > // \brief Returns a string representation of ``Language``. > inline StringRef getLanguageName(FormatStyle::LanguageKind Language) { > switch (Language) { > > Modified: cfe/trunk/lib/Format/Format.cpp > URL: http://llvm.org/viewvc/llvm- > project/cfe/trunk/lib/Format/Format.cpp?rev=325691&r1=325690&r2=325691&view=di > ff > ============================================================================== > --- cfe/trunk/lib/Format/Format.cpp (original) > +++ cfe/trunk/lib/Format/Format.cpp Wed Feb 21 07:54:31 2018 > @@ -2294,6 +2294,25 @@ static FormatStyle::LanguageKind getLang > 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(Str > 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)) > > Modified: cfe/trunk/unittests/Format/FormatTest.cpp > URL: http://llvm.org/viewvc/llvm- > project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=325691&r1=325690&r2=3256 > 91&view=diff > ============================================================================== > --- cfe/trunk/unittests/Format/FormatTest.cpp (original) > +++ cfe/trunk/unittests/Format/FormatTest.cpp Wed Feb 21 07:54:31 2018 > @@ -11952,6 +11952,34 @@ TEST_F(FormatTest, StructuredBindings) { > verifyFormat("auto const &[ a, b ] = f();", Spaces); } > > +struct GuessLanguageTestCase { > + const char *const FileName; > + const char *const Code; > + const FormatStyle::LanguageKind ExpectedResult; }; > + > +class GuessLanguageTest > + : public FormatTest, > + public ::testing::WithParamInterface<GuessLanguageTestCase> {}; > + > +TEST_P(GuessLanguageTest, FileAndCode) { > + auto TestCase = GetParam(); > + EXPECT_EQ(TestCase.ExpectedResult, > + guessLanguage(TestCase.FileName, TestCase.Code)); } > + > +static const GuessLanguageTestCase TestCases[] = { > + {"foo.cc", "", FormatStyle::LK_Cpp}, > + {"foo.m", "", FormatStyle::LK_ObjC}, > + {"foo.mm", "", FormatStyle::LK_ObjC}, > + {"foo.h", "", FormatStyle::LK_Cpp}, > + {"foo.h", "@interface Foo\n@end\n", FormatStyle::LK_ObjC}, > + {"foo", "", FormatStyle::LK_Cpp}, > + {"foo", "@interface Foo\n@end\n", FormatStyle::LK_ObjC}, }; > +INSTANTIATE_TEST_CASE_P(ValidLanguages, GuessLanguageTest, > + ::testing::ValuesIn(TestCases)); > + > } // end namespace > } // end namespace format > } // end namespace clang > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits