[clang-format] Tidy up new API guessLanguage()

Summary:
This fixes a few issues djasper@ brought up in his review of D43522.

Test Plan:
  make -j12 FormatTests && ./tools/clang/unittests/Format/FormatTests

Reviewers: djasper

Reviewed By: djasper

Subscribers: klimek, cfe-commits

Differential Revision: https://reviews.llvm.org/D43598

llvm-svn: 326205
This commit is contained in:
Ben Hamilton 2018-02-27 15:56:40 +00:00
parent 497fd98af2
commit 6e066350d8
2 changed files with 13 additions and 32 deletions

View File

@ -2295,8 +2295,8 @@ static FormatStyle::LanguageKind getLanguageByFileName(StringRef FileName) {
}
FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef Code) {
FormatStyle::LanguageKind result = getLanguageByFileName(FileName);
if (result == FormatStyle::LK_Cpp) {
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.
@ -2306,12 +2306,11 @@ FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef Code) {
Environment::CreateVirtualEnvironment(Code, NonEmptyFileName, /*Ranges=*/{});
ObjCHeaderStyleGuesser Guesser(*Env, getLLVMStyle());
Guesser.process();
if (Guesser.isObjC()) {
result = FormatStyle::LK_ObjC;
}
if (Guesser.isObjC())
return FormatStyle::LK_ObjC;
}
}
return result;
return GuessedLanguage;
}
llvm::Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName,

View File

@ -11959,34 +11959,16 @@ 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));
TEST_F(FormatTest, FileAndCode) {
EXPECT_EQ(FormatStyle::LK_Cpp, guessLanguage("foo.cc", ""));
EXPECT_EQ(FormatStyle::LK_ObjC, guessLanguage("foo.m", ""));
EXPECT_EQ(FormatStyle::LK_ObjC, guessLanguage("foo.mm", ""));
EXPECT_EQ(FormatStyle::LK_Cpp, guessLanguage("foo.h", ""));
EXPECT_EQ(FormatStyle::LK_ObjC, guessLanguage("foo.h", "@interface Foo\n@end\n"));
EXPECT_EQ(FormatStyle::LK_Cpp, guessLanguage("foo", ""));
EXPECT_EQ(FormatStyle::LK_ObjC, guessLanguage("foo", "@interface Foo\n@end\n"));
}
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