@@ -2108,7 +2108,7 @@ ParseError validateQualifierOrder(FormatStyle *Style) {
21082108std::error_code parseConfiguration (llvm::MemoryBufferRef Config,
21092109 FormatStyle *Style, bool AllowUnknownOptions,
21102110 llvm::SourceMgr::DiagHandlerTy DiagHandler,
2111- void *DiagHandlerCtxt) {
2111+ void *DiagHandlerCtxt, bool IsDotHFile ) {
21122112 assert (Style);
21132113 FormatStyle::LanguageKind Language = Style->Language ;
21142114 assert (Language != FormatStyle::LK_None);
@@ -2155,6 +2155,10 @@ std::error_code parseConfiguration(llvm::MemoryBufferRef Config,
21552155 // For backward compatibility.
21562156 (Lang == FormatStyle::LK_Cpp && Language == FormatStyle::LK_C)) {
21572157 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 ;
21582162 }
21592163 }
21602164 if (!LanguageFound) {
@@ -4177,13 +4181,15 @@ const char *DefaultFallbackStyle = "LLVM";
41774181llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
41784182loadAndParseConfigFile (StringRef ConfigFile, llvm::vfs::FileSystem *FS,
41794183 FormatStyle *Style, bool AllowUnknownOptions,
4180- llvm::SourceMgr::DiagHandlerTy DiagHandler) {
4184+ llvm::SourceMgr::DiagHandlerTy DiagHandler,
4185+ bool IsDotHFile) {
41814186 llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Text =
41824187 FS->getBufferForFile (ConfigFile.str ());
41834188 if (auto EC = Text.getError ())
41844189 return EC;
41854190 if (auto EC = parseConfiguration (*Text.get (), Style, AllowUnknownOptions,
4186- DiagHandler)) {
4191+ DiagHandler, /* DiagHandlerCtx=*/ nullptr ,
4192+ IsDotHFile)) {
41874193 return EC;
41884194 }
41894195 return Text;
@@ -4221,13 +4227,15 @@ Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName,
42214227 FS = llvm::vfs::getRealFileSystem ().get ();
42224228 assert (FS);
42234229
4230+ const bool IsDotHFile = FileName.ends_with (" .h" );
4231+
42244232 // User provided clang-format file using -style=file:path/to/format/file.
42254233 if (!Style.InheritsParentConfig &&
42264234 StyleName.starts_with_insensitive (" file:" )) {
42274235 auto ConfigFile = StyleName.substr (5 );
42284236 llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Text =
42294237 loadAndParseConfigFile (ConfigFile, FS, &Style, AllowUnknownOptions,
4230- DiagHandler);
4238+ DiagHandler, IsDotHFile );
42314239 if (auto EC = Text.getError ()) {
42324240 return make_string_error (" Error reading " + ConfigFile + " : " +
42334241 EC.message ());
@@ -4303,7 +4311,7 @@ Expected<FormatStyle> getStyle(StringRef StyleName, StringRef FileName,
43034311
43044312 llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> Text =
43054313 loadAndParseConfigFile (ConfigFile, FS, &Style, AllowUnknownOptions,
4306- DiagHandler);
4314+ DiagHandler, IsDotHFile );
43074315 if (auto EC = Text.getError ()) {
43084316 if (EC != ParseError::Unsuitable) {
43094317 return make_string_error (" Error reading " + ConfigFile + " : " +
0 commit comments