forked from OSchip/llvm-project
clang-format: fix fallback style set to "none" not always formatting
This fixes clang-format not formatting if fallback-style is explicitly set to "none", and either a config file is found or YAML is passed in without a "BasedOnStyle". With this change, passing "none" in these cases will have no affect, and LLVM style will be used as the base style. Differential Revision: https://reviews.llvm.org/D28844 llvm-svn: 292562
This commit is contained in:
parent
187ffb4a8e
commit
7eb7507aeb
|
@ -1888,8 +1888,8 @@ static FormatStyle::LanguageKind getLanguageByFileName(StringRef FileName) {
|
|||
}
|
||||
|
||||
llvm::Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName,
|
||||
StringRef FallbackStyle, StringRef Code,
|
||||
vfs::FileSystem *FS) {
|
||||
StringRef FallbackStyleName,
|
||||
StringRef Code, vfs::FileSystem *FS) {
|
||||
if (!FS) {
|
||||
FS = vfs::getRealFileSystem().get();
|
||||
}
|
||||
|
@ -1903,9 +1903,9 @@ llvm::Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName,
|
|||
(Code.contains("\n- (") || Code.contains("\n+ (")))
|
||||
Style.Language = FormatStyle::LK_ObjC;
|
||||
|
||||
// FIXME: If FallbackStyle is explicitly "none", format is disabled.
|
||||
if (!getPredefinedStyle(FallbackStyle, Style.Language, &Style))
|
||||
return make_string_error("Invalid fallback style \"" + FallbackStyle.str());
|
||||
FormatStyle FallbackStyle = getNoStyle();
|
||||
if (!getPredefinedStyle(FallbackStyleName, Style.Language, &FallbackStyle))
|
||||
return make_string_error("Invalid fallback style \"" + FallbackStyleName);
|
||||
|
||||
if (StyleName.startswith("{")) {
|
||||
// Parse YAML/JSON style from the command line.
|
||||
|
@ -1977,7 +1977,7 @@ llvm::Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName,
|
|||
return make_string_error("Configuration file(s) do(es) not support " +
|
||||
getLanguageName(Style.Language) + ": " +
|
||||
UnsuitableConfigFiles);
|
||||
return Style;
|
||||
return FallbackStyle;
|
||||
}
|
||||
|
||||
} // namespace format
|
||||
|
|
|
@ -11,6 +11,21 @@
|
|||
// RUN: clang-format -style=file -assume-filename=%T/foo.cpp < %s | FileCheck -strict-whitespace -check-prefix=CHECK7 %s
|
||||
// RUN: clang-format -style="{BasedOnStyle: LLVM, PointerBindsToType: true}" %s | FileCheck -strict-whitespace -check-prefix=CHECK8 %s
|
||||
// RUN: clang-format -style="{BasedOnStyle: WebKit, PointerBindsToType: false}" %s | FileCheck -strict-whitespace -check-prefix=CHECK9 %s
|
||||
|
||||
// Fallback style tests
|
||||
// RUN: rm %T/_clang-format
|
||||
// Test no config file found, WebKit fallback style is applied
|
||||
// RUN: clang-format -style=file -fallback-style=WebKit -assume-filename=%T/foo.cpp < %s 2>&1 | FileCheck -strict-whitespace -check-prefix=CHECK10 %s
|
||||
// Test no config file and no fallback style, LLVM style is applied
|
||||
// RUN: clang-format -style=file -assume-filename=%T/foo.cpp < %s 2>&1 | FileCheck -strict-whitespace -check-prefix=CHECK11 %s
|
||||
// Test no config file and fallback style "none", no formatting is applied
|
||||
// RUN: clang-format -style=file -fallback-style=none -assume-filename=%T/foo.cpp < %s 2>&1 | FileCheck -strict-whitespace -check-prefix=CHECK12 %s
|
||||
// Test config file with no based style, and fallback style "none", formatting is applied
|
||||
// RUN: printf "IndentWidth: 6\n" > %T/_clang-format
|
||||
// RUN: clang-format -style=file -fallback-style=none -assume-filename=%T/foo.cpp < %s 2>&1 | FileCheck -strict-whitespace -check-prefix=CHECK13 %s
|
||||
// Test yaml with no based style, and fallback style "none", LLVM formatting applied
|
||||
// RUN: clang-format -style="{IndentWidth: 7}" -fallback-style=none %s | FileCheck -strict-whitespace -check-prefix=CHECK14 %s
|
||||
|
||||
void f() {
|
||||
// CHECK1: {{^ int\* i;$}}
|
||||
// CHECK2: {{^ int \*i;$}}
|
||||
|
@ -22,6 +37,11 @@ void f() {
|
|||
// CHECK7: {{^ int\* i;$}}
|
||||
// CHECK8: {{^ int\* i;$}}
|
||||
// CHECK9: {{^ int \*i;$}}
|
||||
// CHECK10: {{^ int\* i;$}}
|
||||
// CHECK11: {{^ int \*i;$}}
|
||||
// CHECK12: {{^int\*i;$}}
|
||||
// CHECK13: {{^ int \*i;$}}
|
||||
// CHECK14: {{^ int \*i;$}}
|
||||
int*i;
|
||||
int j;
|
||||
}
|
||||
|
|
|
@ -10978,13 +10978,31 @@ TEST(FormatStyle, GetStyleOfFile) {
|
|||
ASSERT_TRUE((bool)Style1);
|
||||
ASSERT_EQ(*Style1, getLLVMStyle());
|
||||
|
||||
// Test 2: fallback to default.
|
||||
// Test 2.1: fallback to default.
|
||||
ASSERT_TRUE(
|
||||
FS.addFile("/b/test.cpp", 0, llvm::MemoryBuffer::getMemBuffer("int i;")));
|
||||
auto Style2 = getStyle("file", "/b/test.cpp", "Mozilla", "", &FS);
|
||||
ASSERT_TRUE((bool)Style2);
|
||||
ASSERT_EQ(*Style2, getMozillaStyle());
|
||||
|
||||
// Test 2.2: no format on 'none' fallback style.
|
||||
Style2 = getStyle("file", "/b/test.cpp", "none", "", &FS);
|
||||
ASSERT_TRUE((bool)Style2);
|
||||
ASSERT_EQ(*Style2, getNoStyle());
|
||||
|
||||
// Test 2.3: format if config is found with no based style while fallback is
|
||||
// 'none'.
|
||||
ASSERT_TRUE(FS.addFile("/b/.clang-format", 0,
|
||||
llvm::MemoryBuffer::getMemBuffer("IndentWidth: 2")));
|
||||
Style2 = getStyle("file", "/b/test.cpp", "none", "", &FS);
|
||||
ASSERT_TRUE((bool)Style2);
|
||||
ASSERT_EQ(*Style2, getLLVMStyle());
|
||||
|
||||
// Test 2.4: format if yaml with no based style, while fallback is 'none'.
|
||||
Style2 = getStyle("{}", "a.h", "none", "", &FS);
|
||||
ASSERT_TRUE((bool)Style2);
|
||||
ASSERT_EQ(*Style2, getLLVMStyle());
|
||||
|
||||
// Test 3: format file in parent directory.
|
||||
ASSERT_TRUE(
|
||||
FS.addFile("/c/.clang-format", 0,
|
||||
|
|
Loading…
Reference in New Issue