@@ -2108,7 +2108,7 @@ ParseError validateQualifierOrder(FormatStyle *Style) {
2108
2108
std::error_code parseConfiguration (llvm::MemoryBufferRef Config,
2109
2109
FormatStyle *Style, bool AllowUnknownOptions,
2110
2110
llvm::SourceMgr::DiagHandlerTy DiagHandler,
2111
- void *DiagHandlerCtxt) {
2111
+ void *DiagHandlerCtxt, bool IsDotHFile ) {
2112
2112
assert (Style);
2113
2113
FormatStyle::LanguageKind Language = Style->Language ;
2114
2114
assert (Language != FormatStyle::LK_None);
@@ -2155,6 +2155,10 @@ std::error_code parseConfiguration(llvm::MemoryBufferRef Config,
2155
2155
// For backward compatibility.
2156
2156
(Lang == FormatStyle::LK_Cpp && Language == FormatStyle::LK_C)) {
2157
2157
LanguageFound = true ;
2158
+ } else if (IsDotHFile && Language == FormatStyle::LK_Cpp &&
2159
+ (Lang == FormatStyle::LK_C || Lang == FormatStyle::LK_ObjC)) {
2160
+ Language = Lang;
2161
+ LanguageFound = true ;
2158
2162
}
2159
2163
}
2160
2164
if (!LanguageFound) {
@@ -4177,13 +4181,15 @@ const char *DefaultFallbackStyle = "LLVM";
4177
4181
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
4178
4182
loadAndParseConfigFile (StringRef ConfigFile, llvm::vfs::FileSystem *FS,
4179
4183
FormatStyle *Style, bool AllowUnknownOptions,
4180
- llvm::SourceMgr::DiagHandlerTy DiagHandler) {
4184
+ llvm::SourceMgr::DiagHandlerTy DiagHandler,
4185
+ bool IsDotHFile) {
4181
4186
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Text =
4182
4187
FS->getBufferForFile (ConfigFile.str ());
4183
4188
if (auto EC = Text.getError ())
4184
4189
return EC;
4185
4190
if (auto EC = parseConfiguration (*Text.get (), Style, AllowUnknownOptions,
4186
- DiagHandler)) {
4191
+ DiagHandler, /* DiagHandlerCtx=*/ nullptr ,
4192
+ IsDotHFile)) {
4187
4193
return EC;
4188
4194
}
4189
4195
return Text;
@@ -4221,13 +4227,15 @@ Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName,
4221
4227
FS = llvm::vfs::getRealFileSystem ().get ();
4222
4228
assert (FS);
4223
4229
4230
+ const bool IsDotHFile = FileName.ends_with (" .h" );
4231
+
4224
4232
// User provided clang-format file using -style=file:path/to/format/file.
4225
4233
if (!Style.InheritsParentConfig &&
4226
4234
StyleName.starts_with_insensitive (" file:" )) {
4227
4235
auto ConfigFile = StyleName.substr (5 );
4228
4236
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Text =
4229
4237
loadAndParseConfigFile (ConfigFile, FS, &Style, AllowUnknownOptions,
4230
- DiagHandler);
4238
+ DiagHandler, IsDotHFile );
4231
4239
if (auto EC = Text.getError ()) {
4232
4240
return make_string_error (" Error reading " + ConfigFile + " : " +
4233
4241
EC.message ());
@@ -4303,7 +4311,7 @@ Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName,
4303
4311
4304
4312
llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Text =
4305
4313
loadAndParseConfigFile (ConfigFile, FS, &Style, AllowUnknownOptions,
4306
- DiagHandler);
4314
+ DiagHandler, IsDotHFile );
4307
4315
if (auto EC = Text.getError ()) {
4308
4316
if (EC != ParseError::Unsuitable) {
4309
4317
return make_string_error (" Error reading " + ConfigFile + " : " +
0 commit comments