mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-23 20:16:06 +00:00

Resolves #27008, #39735, #53013, #63619. Hello, this PR adds the MainIncludeChar option to clang-format, allowing to select which include syntax must be considered when searching for the main header: quotes (`#include "foo.hpp"`, the default), brackets (`#include <foo.hpp>`), or both. The lack of support for brackets has been reported many times, see the linked issues, so I am pretty sure there is a need for it :) A short note about why I did not implement a regex approach as discussed in #53013: while a regex would have allowed many extra ways to describe the main header, the bug descriptions listed above suggest a very simple need: support brackets for the main header. This PR answers this needs in a quite simple way, with a very simple style option. IMHO the feature space covered by the regex (again, for which there is no demand :)) can be implemented latter, in addition to the proposed option. The PR also includes tests for the option with and without grouped includes.
40 lines
1.5 KiB
C++
40 lines
1.5 KiB
C++
//===--- IncludeStyle.cpp - Style of C++ #include directives -----*- C++-*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "clang/Tooling/Inclusions/IncludeStyle.h"
|
|
|
|
using clang::tooling::IncludeStyle;
|
|
|
|
namespace llvm {
|
|
namespace yaml {
|
|
|
|
void MappingTraits<IncludeStyle::IncludeCategory>::mapping(
|
|
IO &IO, IncludeStyle::IncludeCategory &Category) {
|
|
IO.mapOptional("Regex", Category.Regex);
|
|
IO.mapOptional("Priority", Category.Priority);
|
|
IO.mapOptional("SortPriority", Category.SortPriority);
|
|
IO.mapOptional("CaseSensitive", Category.RegexIsCaseSensitive);
|
|
}
|
|
|
|
void ScalarEnumerationTraits<IncludeStyle::IncludeBlocksStyle>::enumeration(
|
|
IO &IO, IncludeStyle::IncludeBlocksStyle &Value) {
|
|
IO.enumCase(Value, "Preserve", IncludeStyle::IBS_Preserve);
|
|
IO.enumCase(Value, "Merge", IncludeStyle::IBS_Merge);
|
|
IO.enumCase(Value, "Regroup", IncludeStyle::IBS_Regroup);
|
|
}
|
|
|
|
void ScalarEnumerationTraits<IncludeStyle::MainIncludeCharDiscriminator>::
|
|
enumeration(IO &IO, IncludeStyle::MainIncludeCharDiscriminator &Value) {
|
|
IO.enumCase(Value, "Quote", IncludeStyle::MICD_Quote);
|
|
IO.enumCase(Value, "AngleBracket", IncludeStyle::MICD_AngleBracket);
|
|
IO.enumCase(Value, "Any", IncludeStyle::MICD_Any);
|
|
}
|
|
|
|
} // namespace yaml
|
|
} // namespace llvm
|