r332720 - Move #include manipulation code to new lib/Tooling/Inclusions.

Vedant Kumar via cfe-commits cfe-commits at lists.llvm.org
Fri May 18 11:54:22 PDT 2018


> On May 18, 2018, at 11:48 AM, Eric Liu <ioeric at google.com> wrote:
> 
> So I have reverted this with r332751.

Thanks!


> I can't see how this introduced cyclic dependencies in module build, as the dependencies should be clangTooling -> clangFormat -> clangToolingInclusions. I'm wondering if there is any module configurations that I need to update to make this work. Right now, module doesn't seem to make any difference between clangTooling and clangToolingInclusions... I'd appreciate it if someone who knows how clang module build is set up could help take a look.

+ Bruno & David who have more experience in this area than I do.


> Unfortunately, I couldn't reproduce this on my workstation as the module build seemed to be broken due to other errors.

The build is dependent on having a set of modularized system headers -- perhaps that's the issue.


> I was seeing a lot of warnings; the clang I used to build llvm was built near HEAD. Maybe my clang is too new?

This sounds a bit suspicious. Can new clang diagnostics land without clean stage2 builds? If so, we can look into enabling -Werror on our stage2 bots to catch this sort of thing earlier.

vedant

> 
> Thanks,
> Eric
> 
> On Fri, May 18, 2018 at 7:52 PM Eric Liu <ioeric at google.com <mailto:ioeric at google.com>> wrote:
> Sorry, I'll look into it right now. Will revert it if I can't find a quick fix.
> 
> On Fri, May 18, 2018, 19:49 Amara Emerson <aemerson at apple.com <mailto:aemerson at apple.com>> wrote:
> Hi Eric,
> 
> Green dragon buildbots have started failing too, e.g.: http://green.lab.llvm.org/green/job/clang-stage2-Rthinlto/10222/ <http://green.lab.llvm.org/green/job/clang-stage2-Rthinlto/10222/>
> 
> If you don’t have a quick fix can you please revert it.
> 
> Thanks,
> Amara
> 
> 
>> On May 18, 2018, at 7:46 PM, Eric Liu <ioeric at google.com <mailto:ioeric at google.com>> wrote:
>> 
>> Hi Vedant,
>> 
>> It seems that your build was not using cmake files in the source tree? lib/Tooling/Inclusions/ is a (new) standalone library (clangToolingInclusions, similar to clangToolingCore). You might need update your build to reflect this change. Let me know if you have any further question.
>> 
>> Thanks,
>> Eric
>> 
>> On Fri, May 18, 2018 at 6:41 PM Vedant Kumar <vsk at apple.com <mailto:vsk at apple.com>> wrote:
>> Hi Eric,
>> 
>> I think there might be a cyclic dependency issue here, possibly one that's only visible with LLVM_ENABLE_MODULES=On. I see:
>> 
>> While building module 'Clang_Tooling' imported from /Users/vsk/src/llvm.org <http://llvm.org/>-master/llvm/tools/clang/lib/Tooling/Execution.cpp:10:                             
>> While building module 'Clang_Format' imported from /Users/vsk/src/llvm.org <http://llvm.org/>-master/llvm/tools/clang/include/clang/Tooling/Refactoring/AtomicChange.h:19:       
>> In file included from <module-includes>:1:                                                                                                                   
>> /Users/vsk/src/llvm.org <http://llvm.org/>-master/llvm/tools/clang/include/clang/Format/Format.h:20:10: fatal error: cyclic dependency in module 'Clang_Tooling': Clang_Tooling $> Clang_Format -> Clang_Tooling                                                                                                    
>> #include "clang/Tooling/Inclusions/IncludeStyle.h"
>>          ^                          
>> While building module 'Clang_Tooling' imported from /Users/vsk/src/llvm.org <http://llvm.org/>-master/llvm/tools/clang/lib/Tooling/Execution.cpp:10:
>> In file included from <module-includes>:22:                                                          
>> In file included from /Users/vsk/src/llvm.org <http://llvm.org/>-master/llvm/tools/clang/include/clang/Tooling/Refactoring/RefactoringAction.h:14:
>> In file included from /Users/vsk/src/llvm.org <http://llvm.org/>-master/llvm/tools/clang/include/clang/Tooling/Refactoring/RefactoringActionRules.h:14:
>> In file included from /Users/vsk/src/llvm.org <http://llvm.org/>-master/llvm/tools/clang/include/clang/Tooling/Refactoring/RefactoringActionRulesInternal.h:16:
>> In file included from /Users/vsk/src/llvm.org <http://llvm.org/>-master/llvm/tools/clang/include/clang/Tooling/Refactoring/RefactoringResultConsumer.h:14:
>> /Users/vsk/src/llvm.org <http://llvm.org/>-master/llvm/tools/clang/include/clang/Tooling/Refactoring/AtomicChange.h:19:10: fatal error: could not build module 'Clang_Format'
>> #include "clang/Format/Format.h"
>>  ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
>> /Users/vsk/src/llvm.org <http://llvm.org/>-master/llvm/tools/clang/lib/Tooling/Execution.cpp:10:10: fatal error: could not build module 'Clang_Tooling'
>> #include "clang/Tooling/Execution.h"                                            
>>  ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~                            
>> 3 errors generated.
>> 
>> Could you take a look?
>> 
>> thanks,
>> vedant
>> 
>> > On May 18, 2018, at 7:16 AM, Eric Liu via cfe-commits <cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>> wrote:
>> > 
>> > Author: ioeric
>> > Date: Fri May 18 07:16:37 2018
>> > New Revision: 332720
>> > 
>> > URL: http://llvm.org/viewvc/llvm-project?rev=332720&view=rev <http://llvm.org/viewvc/llvm-project?rev=332720&view=rev>
>> > Log:
>> > Move #include manipulation code to new lib/Tooling/Inclusions.
>> > 
>> > Summary:
>> > clangToolingCore is linked into almost everything (incl. clang), but
>> > not few tools need #include manipulation at this point. So pull this into a
>> > separate library in Tooling.
>> > 
>> > Reviewers: ilya-biryukov
>> > 
>> > Subscribers: klimek, mgorny, cfe-commits, thakis
>> > 
>> > Differential Revision: https://reviews.llvm.org/D47068 <https://reviews.llvm.org/D47068>
>> > 
>> > Added:
>> >    cfe/trunk/include/clang/Tooling/Inclusions/
>> >    cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h
>> >      - copied, changed from r332717, cfe/trunk/include/clang/Tooling/Core/HeaderIncludes.h
>> >    cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h
>> >      - copied, changed from r332717, cfe/trunk/include/clang/Tooling/Core/IncludeStyle.h
>> >    cfe/trunk/lib/Tooling/Inclusions/
>> >    cfe/trunk/lib/Tooling/Inclusions/CMakeLists.txt
>> >      - copied, changed from r332717, cfe/trunk/lib/Tooling/Core/CMakeLists.txt
>> >    cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp
>> >      - copied, changed from r332717, cfe/trunk/lib/Tooling/Core/HeaderIncludes.cpp
>> >    cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp
>> >      - copied, changed from r332717, cfe/trunk/lib/Tooling/Core/IncludeStyle.cpp
>> > Removed:
>> >    cfe/trunk/include/clang/Tooling/Core/HeaderIncludes.h
>> >    cfe/trunk/include/clang/Tooling/Core/IncludeStyle.h
>> >    cfe/trunk/lib/Tooling/Core/HeaderIncludes.cpp
>> >    cfe/trunk/lib/Tooling/Core/IncludeStyle.cpp
>> > Modified:
>> >    cfe/trunk/include/clang/Format/Format.h
>> >    cfe/trunk/lib/Format/CMakeLists.txt
>> >    cfe/trunk/lib/Format/Format.cpp
>> >    cfe/trunk/lib/Tooling/CMakeLists.txt
>> >    cfe/trunk/lib/Tooling/Core/CMakeLists.txt
>> >    cfe/trunk/unittests/Tooling/HeaderIncludesTest.cpp
>> > 
>> > Modified: cfe/trunk/include/clang/Format/Format.h
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Format/Format.h?rev=332720&r1=332719&r2=332720&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Format/Format.h?rev=332720&r1=332719&r2=332720&view=diff>
>> > ==============================================================================
>> > --- cfe/trunk/include/clang/Format/Format.h (original)
>> > +++ cfe/trunk/include/clang/Format/Format.h Fri May 18 07:16:37 2018
>> > @@ -16,8 +16,8 @@
>> > #define LLVM_CLANG_FORMAT_FORMAT_H
>> > 
>> > #include "clang/Basic/LangOptions.h"
>> > -#include "clang/Tooling/Core/IncludeStyle.h"
>> > #include "clang/Tooling/Core/Replacement.h"
>> > +#include "clang/Tooling/Inclusions/IncludeStyle.h"
>> > #include "llvm/ADT/ArrayRef.h"
>> > #include "llvm/Support/Regex.h"
>> > #include <system_error>
>> > 
>> > Removed: cfe/trunk/include/clang/Tooling/Core/HeaderIncludes.h
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Core/HeaderIncludes.h?rev=332719&view=auto <http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Core/HeaderIncludes.h?rev=332719&view=auto>
>> > ==============================================================================
>> > --- cfe/trunk/include/clang/Tooling/Core/HeaderIncludes.h (original)
>> > +++ cfe/trunk/include/clang/Tooling/Core/HeaderIncludes.h (removed)
>> > @@ -1,137 +0,0 @@
>> > -//===--- HeaderIncludes.h - Insert/Delete #includes for C++ code--*- C++-*-===//
>> > -//
>> > -//                     The LLVM Compiler Infrastructure
>> > -//
>> > -// This file is distributed under the University of Illinois Open Source
>> > -// License. See LICENSE.TXT for details.
>> > -//
>> > -//===----------------------------------------------------------------------===//
>> > -
>> > -#ifndef LLVM_CLANG_TOOLING_CORE_HEADERINCLUDES_H
>> > -#define LLVM_CLANG_TOOLING_CORE_HEADERINCLUDES_H
>> > -
>> > -#include "clang/Basic/SourceManager.h"
>> > -#include "clang/Tooling/Core/Replacement.h"
>> > -#include "clang/Tooling/Core/IncludeStyle.h"
>> > -#include "llvm/Support/Path.h"
>> > -#include "llvm/Support/Regex.h"
>> > -#include <unordered_map>
>> > -
>> > -namespace clang {
>> > -namespace tooling {
>> > -
>> > -/// This class manages priorities of C++ #include categories and calculates
>> > -/// priorities for headers.
>> > -/// FIXME(ioeric): move this class into implementation file when clang-format's
>> > -/// include sorting functions are also moved here.
>> > -class IncludeCategoryManager {
>> > -public:
>> > -  IncludeCategoryManager(const IncludeStyle &Style, StringRef FileName);
>> > -
>> > -  /// Returns the priority of the category which \p IncludeName belongs to.
>> > -  /// If \p CheckMainHeader is true and \p IncludeName is a main header, returns
>> > -  /// 0. Otherwise, returns the priority of the matching category or INT_MAX.
>> > -  /// NOTE: this API is not thread-safe!
>> > -  int getIncludePriority(StringRef IncludeName, bool CheckMainHeader) const;
>> > -
>> > -private:
>> > -  bool isMainHeader(StringRef IncludeName) const;
>> > -
>> > -  const IncludeStyle Style;
>> > -  bool IsMainFile;
>> > -  std::string FileName;
>> > -  // This refers to a substring in FileName.
>> > -  StringRef FileStem;
>> > -  // Regex is not thread-safe.
>> > -  mutable SmallVector<llvm::Regex, 4> CategoryRegexs;
>> > -};
>> > -
>> > -/// Generates replacements for inserting or deleting #include directives in a
>> > -/// file.
>> > -class HeaderIncludes {
>> > -public:
>> > -  HeaderIncludes(llvm::StringRef FileName, llvm::StringRef Code,
>> > -                 const IncludeStyle &Style);
>> > -
>> > -  /// Inserts an #include directive of \p Header into the code. If \p IsAngled
>> > -  /// is true, \p Header will be quoted with <> in the directive; otherwise, it
>> > -  /// will be quoted with "".
>> > -  ///
>> > -  /// When searching for points to insert new header, this ignores #include's
>> > -  /// after the #include block(s) in the beginning of a file to avoid inserting
>> > -  /// headers into code sections where new #include's should not be added by
>> > -  /// default. These code sections include:
>> > -  ///   - raw string literals (containing #include).
>> > -  ///   - #if blocks.
>> > -  ///   - Special #include's among declarations (e.g. functions).
>> > -  ///
>> > -  /// Returns a replacement that inserts the new header into a suitable #include
>> > -  /// block of the same category. This respects the order of the existing
>> > -  /// #includes in the block; if the existing #includes are not already sorted,
>> > -  /// this will simply insert the #include in front of the first #include of the
>> > -  /// same category in the code that should be sorted after \p IncludeName. If
>> > -  /// \p IncludeName already exists (with exactly the same spelling), this
>> > -  /// returns None.
>> > -  llvm::Optional<tooling::Replacement> insert(llvm::StringRef Header,
>> > -                                              bool IsAngled) const;
>> > -
>> > -  /// Removes all existing #includes of \p Header quoted with <> if \p IsAngled
>> > -  /// is true or "" if \p IsAngled is false.
>> > -  /// This doesn't resolve the header file path; it only deletes #includes with
>> > -  /// exactly the same spelling.
>> > -  tooling::Replacements remove(llvm::StringRef Header, bool IsAngled) const;
>> > -
>> > -private:
>> > -  struct Include {
>> > -    Include(StringRef Name, tooling::Range R) : Name(Name), R(R) {}
>> > -
>> > -    // An include header quoted with either <> or "".
>> > -    std::string Name;
>> > -    // The range of the whole line of include directive including any eading
>> > -    // whitespaces and trailing comment.
>> > -    tooling::Range R;
>> > -  };
>> > -
>> > -  void addExistingInclude(Include IncludeToAdd, unsigned NextLineOffset);
>> > -
>> > -  std::string FileName;
>> > -  std::string Code;
>> > -
>> > -  // Map from include name (quotation trimmed) to a list of existing includes
>> > -  // (in case there are more than one) with the name in the current file. <x>
>> > -  // and "x" will be treated as the same header when deleting #includes.
>> > -  llvm::StringMap<llvm::SmallVector<Include, 1>> ExistingIncludes;
>> > -
>> > -  /// Map from priorities of #include categories to all #includes in the same
>> > -  /// category. This is used to find #includes of the same category when
>> > -  /// inserting new #includes. #includes in the same categories are sorted in
>> > -  /// in the order they appear in the source file.
>> > -  /// See comment for "FormatStyle::IncludeCategories" for details about include
>> > -  /// priorities.
>> > -  std::unordered_map<int, llvm::SmallVector<const Include *, 8>>
>> > -      IncludesByPriority;
>> > -
>> > -  int FirstIncludeOffset;
>> > -  // All new headers should be inserted after this offset (e.g. after header
>> > -  // guards, file comment).
>> > -  unsigned MinInsertOffset;
>> > -  // Max insertion offset in the original code. For example, we want to avoid
>> > -  // inserting new #includes into the actual code section (e.g. after a
>> > -  // declaration).
>> > -  unsigned MaxInsertOffset;
>> > -  IncludeCategoryManager Categories;
>> > -  // Record the offset of the end of the last include in each category.
>> > -  std::unordered_map<int, int> CategoryEndOffsets;
>> > -
>> > -  // All possible priorities.
>> > -  std::set<int> Priorities;
>> > -
>> > -  // Matches a whole #include directive.
>> > -  llvm::Regex IncludeRegex;
>> > -};
>> > -
>> > -
>> > -} // namespace tooling
>> > -} // namespace clang
>> > -
>> > -#endif // LLVM_CLANG_TOOLING_CORE_HEADERINCLUDES_H
>> > 
>> > Removed: cfe/trunk/include/clang/Tooling/Core/IncludeStyle.h
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Core/IncludeStyle.h?rev=332719&view=auto <http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Core/IncludeStyle.h?rev=332719&view=auto>
>> > ==============================================================================
>> > --- cfe/trunk/include/clang/Tooling/Core/IncludeStyle.h (original)
>> > +++ cfe/trunk/include/clang/Tooling/Core/IncludeStyle.h (removed)
>> > @@ -1,133 +0,0 @@
>> > -//===--- IncludeStyle.h - Style of C++ #include directives -------*- C++-*-===//
>> > -//
>> > -//                     The LLVM Compiler Infrastructure
>> > -//
>> > -// This file is distributed under the University of Illinois Open Source
>> > -// License. See LICENSE.TXT for details.
>> > -//
>> > -//===----------------------------------------------------------------------===//
>> > -
>> > -#ifndef LLVM_CLANG_TOOLING_CORE_INCLUDESTYLE_H
>> > -#define LLVM_CLANG_TOOLING_CORE_INCLUDESTYLE_H
>> > -
>> > -#include "llvm/Support/YAMLTraits.h"
>> > -#include <string>
>> > -#include <vector>
>> > -
>> > -namespace clang {
>> > -namespace tooling {
>> > -
>> > -/// Style for sorting and grouping C++ #include directives.
>> > -struct IncludeStyle {
>> > -  /// Styles for sorting multiple ``#include`` blocks.
>> > -  enum IncludeBlocksStyle {
>> > -    /// Sort each ``#include`` block separately.
>> > -    /// \code
>> > -    ///    #include "b.h"               into      #include "b.h"
>> > -    ///
>> > -    ///    #include <lib/main.h>                  #include "a.h"
>> > -    ///    #include "a.h"                         #include <lib/main.h>
>> > -    /// \endcode
>> > -    IBS_Preserve,
>> > -    /// Merge multiple ``#include`` blocks together and sort as one.
>> > -    /// \code
>> > -    ///    #include "b.h"               into      #include "a.h"
>> > -    ///                                           #include "b.h"
>> > -    ///    #include <lib/main.h>                  #include <lib/main.h>
>> > -    ///    #include "a.h"
>> > -    /// \endcode
>> > -    IBS_Merge,
>> > -    /// Merge multiple ``#include`` blocks together and sort as one.
>> > -    /// Then split into groups based on category priority. See
>> > -    /// ``IncludeCategories``.
>> > -    /// \code
>> > -    ///    #include "b.h"               into      #include "a.h"
>> > -    ///                                           #include "b.h"
>> > -    ///    #include <lib/main.h>
>> > -    ///    #include "a.h"                         #include <lib/main.h>
>> > -    /// \endcode
>> > -    IBS_Regroup,
>> > -  };
>> > -
>> > -  /// Dependent on the value, multiple ``#include`` blocks can be sorted
>> > -  /// as one and divided based on category.
>> > -  IncludeBlocksStyle IncludeBlocks;
>> > -
>> > -  /// See documentation of ``IncludeCategories``.
>> > -  struct IncludeCategory {
>> > -    /// The regular expression that this category matches.
>> > -    std::string Regex;
>> > -    /// The priority to assign to this category.
>> > -    int Priority;
>> > -    bool operator==(const IncludeCategory &Other) const {
>> > -      return Regex == Other.Regex && Priority == Other.Priority;
>> > -    }
>> > -  };
>> > -
>> > -  /// Regular expressions denoting the different ``#include`` categories
>> > -  /// used for ordering ``#includes``.
>> > -  ///
>> > -  /// These regular expressions are matched against the filename of an include
>> > -  /// (including the <> or "") in order. The value belonging to the first
>> > -  /// matching regular expression is assigned and ``#includes`` are sorted first
>> > -  /// according to increasing category number and then alphabetically within
>> > -  /// each category.
>> > -  ///
>> > -  /// If none of the regular expressions match, INT_MAX is assigned as
>> > -  /// category. The main header for a source file automatically gets category 0.
>> > -  /// so that it is generally kept at the beginning of the ``#includes``
>> > -  /// (http://llvm.org/docs/CodingStandards.html#include-style <http://llvm.org/docs/CodingStandards.html#include-style>). However, you
>> > -  /// can also assign negative priorities if you have certain headers that
>> > -  /// always need to be first.
>> > -  ///
>> > -  /// To configure this in the .clang-format file, use:
>> > -  /// \code{.yaml}
>> > -  ///   IncludeCategories:
>> > -  ///     - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
>> > -  ///       Priority:        2
>> > -  ///     - Regex:           '^(<|"(gtest|gmock|isl|json)/)'
>> > -  ///       Priority:        3
>> > -  ///     - Regex:           '.*'
>> > -  ///       Priority:        1
>> > -  /// \endcode
>> > -  std::vector<IncludeCategory> IncludeCategories;
>> > -
>> > -  /// Specify a regular expression of suffixes that are allowed in the
>> > -  /// file-to-main-include mapping.
>> > -  ///
>> > -  /// When guessing whether a #include is the "main" include (to assign
>> > -  /// category 0, see above), use this regex of allowed suffixes to the header
>> > -  /// stem. A partial match is done, so that:
>> > -  /// - "" means "arbitrary suffix"
>> > -  /// - "$" means "no suffix"
>> > -  ///
>> > -  /// For example, if configured to "(_test)?$", then a header a.h would be seen
>> > -  /// as the "main" include in both a.cc <http://a.cc/> and a_test.cc <http://a_test.cc/>.
>> > -  std::string IncludeIsMainRegex;
>> > -};
>> > -
>> > -} // namespace tooling
>> > -} // namespace clang
>> > -
>> > -LLVM_YAML_IS_SEQUENCE_VECTOR(clang::tooling::IncludeStyle::IncludeCategory)
>> > -
>> > -namespace llvm {
>> > -namespace yaml {
>> > -
>> > -template <>
>> > -struct MappingTraits<clang::tooling::IncludeStyle::IncludeCategory> {
>> > -  static void mapping(IO &IO,
>> > -                      clang::tooling::IncludeStyle::IncludeCategory &Category);
>> > -};
>> > -
>> > -template <>
>> > -struct ScalarEnumerationTraits<
>> > -    clang::tooling::IncludeStyle::IncludeBlocksStyle> {
>> > -  static void
>> > -  enumeration(IO &IO, clang::tooling::IncludeStyle::IncludeBlocksStyle &Value);
>> > -};
>> > -
>> > -} // namespace yaml
>> > -} // namespace llvm
>> > -
>> > -#endif // LLVM_CLANG_TOOLING_CORE_INCLUDESTYLE_H
>> > 
>> > Copied: cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h (from r332717, cfe/trunk/include/clang/Tooling/Core/HeaderIncludes.h)
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h?p2=cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h&p1=cfe/trunk/include/clang/Tooling/Core/HeaderIncludes.h&r1=332717&r2=332720&rev=332720&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h?p2=cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h&p1=cfe/trunk/include/clang/Tooling/Core/HeaderIncludes.h&r1=332717&r2=332720&rev=332720&view=diff>
>> > ==============================================================================
>> > --- cfe/trunk/include/clang/Tooling/Core/HeaderIncludes.h (original)
>> > +++ cfe/trunk/include/clang/Tooling/Inclusions/HeaderIncludes.h Fri May 18 07:16:37 2018
>> > @@ -7,12 +7,12 @@
>> > //
>> > //===----------------------------------------------------------------------===//
>> > 
>> > -#ifndef LLVM_CLANG_TOOLING_CORE_HEADERINCLUDES_H
>> > -#define LLVM_CLANG_TOOLING_CORE_HEADERINCLUDES_H
>> > +#ifndef LLVM_CLANG_TOOLING_INCLUSIONS_HEADERINCLUDES_H
>> > +#define LLVM_CLANG_TOOLING_INCLUSIONS_HEADERINCLUDES_H
>> > 
>> > #include "clang/Basic/SourceManager.h"
>> > #include "clang/Tooling/Core/Replacement.h"
>> > -#include "clang/Tooling/Core/IncludeStyle.h"
>> > +#include "clang/Tooling/Inclusions/IncludeStyle.h"
>> > #include "llvm/Support/Path.h"
>> > #include "llvm/Support/Regex.h"
>> > #include <unordered_map>
>> > @@ -134,4 +134,4 @@ private:
>> > } // namespace tooling
>> > } // namespace clang
>> > 
>> > -#endif // LLVM_CLANG_TOOLING_CORE_HEADERINCLUDES_H
>> > +#endif // LLVM_CLANG_TOOLING_INCLUSIONS_HEADERINCLUDES_H
>> > 
>> > Copied: cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h (from r332717, cfe/trunk/include/clang/Tooling/Core/IncludeStyle.h)
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h?p2=cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h&p1=cfe/trunk/include/clang/Tooling/Core/IncludeStyle.h&r1=332717&r2=332720&rev=332720&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h?p2=cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h&p1=cfe/trunk/include/clang/Tooling/Core/IncludeStyle.h&r1=332717&r2=332720&rev=332720&view=diff>
>> > ==============================================================================
>> > --- cfe/trunk/include/clang/Tooling/Core/IncludeStyle.h (original)
>> > +++ cfe/trunk/include/clang/Tooling/Inclusions/IncludeStyle.h Fri May 18 07:16:37 2018
>> > @@ -7,8 +7,8 @@
>> > //
>> > //===----------------------------------------------------------------------===//
>> > 
>> > -#ifndef LLVM_CLANG_TOOLING_CORE_INCLUDESTYLE_H
>> > -#define LLVM_CLANG_TOOLING_CORE_INCLUDESTYLE_H
>> > +#ifndef LLVM_CLANG_TOOLING_INCLUSIONS_INCLUDESTYLE_H
>> > +#define LLVM_CLANG_TOOLING_INCLUSIONS_INCLUDESTYLE_H
>> > 
>> > #include "llvm/Support/YAMLTraits.h"
>> > #include <string>
>> > @@ -130,4 +130,4 @@ struct ScalarEnumerationTraits<
>> > } // namespace yaml
>> > } // namespace llvm
>> > 
>> > -#endif // LLVM_CLANG_TOOLING_CORE_INCLUDESTYLE_H
>> > +#endif // LLVM_CLANG_TOOLING_INCLUSIONS_INCLUDESTYLE_H
>> > 
>> > Modified: cfe/trunk/lib/Format/CMakeLists.txt
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/CMakeLists.txt?rev=332720&r1=332719&r2=332720&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/CMakeLists.txt?rev=332720&r1=332719&r2=332720&view=diff>
>> > ==============================================================================
>> > --- cfe/trunk/lib/Format/CMakeLists.txt (original)
>> > +++ cfe/trunk/lib/Format/CMakeLists.txt Fri May 18 07:16:37 2018
>> > @@ -20,4 +20,5 @@ add_clang_library(clangFormat
>> >   clangBasic
>> >   clangLex
>> >   clangToolingCore
>> > +  clangToolingInclusions
>> >   )
>> > 
>> > Modified: cfe/trunk/lib/Format/Format.cpp
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=332720&r1=332719&r2=332720&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=332720&r1=332719&r2=332720&view=diff>
>> > ==============================================================================
>> > --- cfe/trunk/lib/Format/Format.cpp (original)
>> > +++ cfe/trunk/lib/Format/Format.cpp Fri May 18 07:16:37 2018
>> > @@ -31,7 +31,7 @@
>> > #include "clang/Basic/SourceManager.h"
>> > #include "clang/Basic/VirtualFileSystem.h"
>> > #include "clang/Lex/Lexer.h"
>> > -#include "clang/Tooling/Core/HeaderIncludes.h"
>> > +#include "clang/Tooling/Inclusions/HeaderIncludes.h"
>> > #include "llvm/ADT/STLExtras.h"
>> > #include "llvm/ADT/StringRef.h"
>> > #include "llvm/Support/Allocator.h"
>> > 
>> > Modified: cfe/trunk/lib/Tooling/CMakeLists.txt
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CMakeLists.txt?rev=332720&r1=332719&r2=332720&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CMakeLists.txt?rev=332720&r1=332719&r2=332720&view=diff>
>> > ==============================================================================
>> > --- cfe/trunk/lib/Tooling/CMakeLists.txt (original)
>> > +++ cfe/trunk/lib/Tooling/CMakeLists.txt Fri May 18 07:16:37 2018
>> > @@ -4,6 +4,7 @@ set(LLVM_LINK_COMPONENTS
>> >   )
>> > 
>> > add_subdirectory(Core)
>> > +add_subdirectory(Inclusions)
>> > add_subdirectory(Refactoring)
>> > add_subdirectory(ASTDiff)
>> > 
>> > 
>> > Modified: cfe/trunk/lib/Tooling/Core/CMakeLists.txt
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Core/CMakeLists.txt?rev=332720&r1=332719&r2=332720&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Core/CMakeLists.txt?rev=332720&r1=332719&r2=332720&view=diff>
>> > ==============================================================================
>> > --- cfe/trunk/lib/Tooling/Core/CMakeLists.txt (original)
>> > +++ cfe/trunk/lib/Tooling/Core/CMakeLists.txt Fri May 18 07:16:37 2018
>> > @@ -2,8 +2,6 @@ set(LLVM_LINK_COMPONENTS support)
>> > 
>> > add_clang_library(clangToolingCore
>> >   Diagnostic.cpp
>> > -  HeaderIncludes.cpp
>> > -  IncludeStyle.cpp
>> >   Lookup.cpp
>> >   Replacement.cpp
>> > 
>> > 
>> > Removed: cfe/trunk/lib/Tooling/Core/HeaderIncludes.cpp
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Core/HeaderIncludes.cpp?rev=332719&view=auto <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Core/HeaderIncludes.cpp?rev=332719&view=auto>
>> > ==============================================================================
>> > --- cfe/trunk/lib/Tooling/Core/HeaderIncludes.cpp (original)
>> > +++ cfe/trunk/lib/Tooling/Core/HeaderIncludes.cpp (removed)
>> > @@ -1,330 +0,0 @@
>> > -//===--- HeaderIncludes.cpp - Insert/Delete #includes --*- C++ -*----------===//
>> > -//
>> > -//                     The LLVM Compiler Infrastructure
>> > -//
>> > -// This file is distributed under the University of Illinois Open Source
>> > -// License. See LICENSE.TXT for details.
>> > -//
>> > -//===----------------------------------------------------------------------===//
>> > -
>> > -#include "clang/Tooling/Core/HeaderIncludes.h"
>> > -#include "clang/Basic/SourceManager.h"
>> > -#include "clang/Lex/Lexer.h"
>> > -
>> > -namespace clang {
>> > -namespace tooling {
>> > -namespace {
>> > -
>> > -LangOptions createLangOpts() {
>> > -  LangOptions LangOpts;
>> > -  LangOpts.CPlusPlus = 1;
>> > -  LangOpts.CPlusPlus11 = 1;
>> > -  LangOpts.CPlusPlus14 = 1;
>> > -  LangOpts.LineComment = 1;
>> > -  LangOpts.CXXOperatorNames = 1;
>> > -  LangOpts.Bool = 1;
>> > -  LangOpts.ObjC1 = 1;
>> > -  LangOpts.ObjC2 = 1;
>> > -  LangOpts.MicrosoftExt = 1;    // To get kw___try, kw___finally.
>> > -  LangOpts.DeclSpecKeyword = 1; // To get __declspec.
>> > -  LangOpts.WChar = 1;           // To get wchar_t
>> > -  return LangOpts;
>> > -}
>> > -
>> > -// Returns the offset after skipping a sequence of tokens, matched by \p
>> > -// GetOffsetAfterSequence, from the start of the code.
>> > -// \p GetOffsetAfterSequence should be a function that matches a sequence of
>> > -// tokens and returns an offset after the sequence.
>> > -unsigned getOffsetAfterTokenSequence(
>> > -    StringRef FileName, StringRef Code, const IncludeStyle &Style,
>> > -    llvm::function_ref<unsigned(const SourceManager &, Lexer &, Token &)>
>> > -        GetOffsetAfterSequence) {
>> > -  SourceManagerForFile VirtualSM(FileName, Code);
>> > -  SourceManager &SM = VirtualSM.get();
>> > -  Lexer Lex(SM.getMainFileID(), SM.getBuffer(SM.getMainFileID()), SM,
>> > -            createLangOpts());
>> > -  Token Tok;
>> > -  // Get the first token.
>> > -  Lex.LexFromRawLexer(Tok);
>> > -  return GetOffsetAfterSequence(SM, Lex, Tok);
>> > -}
>> > -
>> > -// Check if a sequence of tokens is like "#<Name> <raw_identifier>". If it is,
>> > -// \p Tok will be the token after this directive; otherwise, it can be any token
>> > -// after the given \p Tok (including \p Tok).
>> > -bool checkAndConsumeDirectiveWithName(Lexer &Lex, StringRef Name, Token &Tok) {
>> > -  bool Matched = Tok.is <http://tok.is/>(tok::hash) && !Lex.LexFromRawLexer(Tok) &&
>> > -                 Tok.is <http://tok.is/>(tok::raw_identifier) &&
>> > -                 Tok.getRawIdentifier() == Name && !Lex.LexFromRawLexer(Tok) &&
>> > -                 Tok.is <http://tok.is/>(tok::raw_identifier);
>> > -  if (Matched)
>> > -    Lex.LexFromRawLexer(Tok);
>> > -  return Matched;
>> > -}
>> > -
>> > -void skipComments(Lexer &Lex, Token &Tok) {
>> > -  while (Tok.is <http://tok.is/>(tok::comment))
>> > -    if (Lex.LexFromRawLexer(Tok))
>> > -      return;
>> > -}
>> > -
>> > -// Returns the offset after header guard directives and any comments
>> > -// before/after header guards. If no header guard presents in the code, this
>> > -// will returns the offset after skipping all comments from the start of the
>> > -// code.
>> > -unsigned getOffsetAfterHeaderGuardsAndComments(StringRef FileName,
>> > -                                               StringRef Code,
>> > -                                               const IncludeStyle &Style) {
>> > -  return getOffsetAfterTokenSequence(
>> > -      FileName, Code, Style,
>> > -      [](const SourceManager &SM, Lexer &Lex, Token Tok) {
>> > -        skipComments(Lex, Tok);
>> > -        unsigned InitialOffset = SM.getFileOffset(Tok.getLocation());
>> > -        if (checkAndConsumeDirectiveWithName(Lex, "ifndef", Tok)) {
>> > -          skipComments(Lex, Tok);
>> > -          if (checkAndConsumeDirectiveWithName(Lex, "define", Tok))
>> > -            return SM.getFileOffset(Tok.getLocation());
>> > -        }
>> > -        return InitialOffset;
>> > -      });
>> > -}
>> > -
>> > -// Check if a sequence of tokens is like
>> > -//    "#include ("header.h" | <header.h>)".
>> > -// If it is, \p Tok will be the token after this directive; otherwise, it can be
>> > -// any token after the given \p Tok (including \p Tok).
>> > -bool checkAndConsumeInclusiveDirective(Lexer &Lex, Token &Tok) {
>> > -  auto Matched = [&]() {
>> > -    Lex.LexFromRawLexer(Tok);
>> > -    return true;
>> > -  };
>> > -  if (Tok.is <http://tok.is/>(tok::hash) && !Lex.LexFromRawLexer(Tok) &&
>> > -      Tok.is <http://tok.is/>(tok::raw_identifier) && Tok.getRawIdentifier() == "include") {
>> > -    if (Lex.LexFromRawLexer(Tok))
>> > -      return false;
>> > -    if (Tok.is <http://tok.is/>(tok::string_literal))
>> > -      return Matched();
>> > -    if (Tok.is <http://tok.is/>(tok::less)) {
>> > -      while (!Lex.LexFromRawLexer(Tok) && Tok.isNot(tok::greater)) {
>> > -      }
>> > -      if (Tok.is <http://tok.is/>(tok::greater))
>> > -        return Matched();
>> > -    }
>> > -  }
>> > -  return false;
>> > -}
>> > -
>> > -// Returns the offset of the last #include directive after which a new
>> > -// #include can be inserted. This ignores #include's after the #include block(s)
>> > -// in the beginning of a file to avoid inserting headers into code sections
>> > -// where new #include's should not be added by default.
>> > -// These code sections include:
>> > -//      - raw string literals (containing #include).
>> > -//      - #if blocks.
>> > -//      - Special #include's among declarations (e.g. functions).
>> > -//
>> > -// If no #include after which a new #include can be inserted, this returns the
>> > -// offset after skipping all comments from the start of the code.
>> > -// Inserting after an #include is not allowed if it comes after code that is not
>> > -// #include (e.g. pre-processing directive that is not #include, declarations).
>> > -unsigned getMaxHeaderInsertionOffset(StringRef FileName, StringRef Code,
>> > -                                     const IncludeStyle &Style) {
>> > -  return getOffsetAfterTokenSequence(
>> > -      FileName, Code, Style,
>> > -      [](const SourceManager &SM, Lexer &Lex, Token Tok) {
>> > -        skipComments(Lex, Tok);
>> > -        unsigned MaxOffset = SM.getFileOffset(Tok.getLocation());
>> > -        while (checkAndConsumeInclusiveDirective(Lex, Tok))
>> > -          MaxOffset = SM.getFileOffset(Tok.getLocation());
>> > -        return MaxOffset;
>> > -      });
>> > -}
>> > -
>> > -inline StringRef trimInclude(StringRef IncludeName) {
>> > -  return IncludeName.trim("\"<>");
>> > -}
>> > -
>> > -const char IncludeRegexPattern[] =
>> > -    R"(^[\t\ ]*#[\t\ ]*(import|include)[^"<]*(["<][^">]*[">]))";
>> > -
>> > -} // anonymous namespace
>> > -
>> > -IncludeCategoryManager::IncludeCategoryManager(const IncludeStyle &Style,
>> > -                                               StringRef FileName)
>> > -    : Style(Style), FileName(FileName) {
>> > -  FileStem = llvm::sys::path::stem(FileName);
>> > -  for (const auto &Category : Style.IncludeCategories)
>> > -    CategoryRegexs.emplace_back(Category.Regex, llvm::Regex::IgnoreCase);
>> > -  IsMainFile = FileName.endswith(".c") || FileName.endswith(".cc") ||
>> > -               FileName.endswith(".cpp") || FileName.endswith(".c++") ||
>> > -               FileName.endswith(".cxx") || FileName.endswith(".m") ||
>> > -               FileName.endswith(".mm");
>> > -}
>> > -
>> > -int IncludeCategoryManager::getIncludePriority(StringRef IncludeName,
>> > -                                               bool CheckMainHeader) const {
>> > -  int Ret = INT_MAX;
>> > -  for (unsigned i = 0, e = CategoryRegexs.size(); i != e; ++i)
>> > -    if (CategoryRegexs[i].match(IncludeName)) {
>> > -      Ret = Style.IncludeCategories[i].Priority;
>> > -      break;
>> > -    }
>> > -  if (CheckMainHeader && IsMainFile && Ret > 0 && isMainHeader(IncludeName))
>> > -    Ret = 0;
>> > -  return Ret;
>> > -}
>> > -
>> > -bool IncludeCategoryManager::isMainHeader(StringRef IncludeName) const {
>> > -  if (!IncludeName.startswith("\""))
>> > -    return false;
>> > -  StringRef HeaderStem =
>> > -      llvm::sys::path::stem(IncludeName.drop_front(1).drop_back(1));
>> > -  if (FileStem.startswith(HeaderStem) ||
>> > -      FileStem.startswith_lower(HeaderStem)) {
>> > -    llvm::Regex MainIncludeRegex((HeaderStem + Style.IncludeIsMainRegex).str(),
>> > -                                 llvm::Regex::IgnoreCase);
>> > -    if (MainIncludeRegex.match(FileStem))
>> > -      return true;
>> > -  }
>> > -  return false;
>> > -}
>> > -
>> > -HeaderIncludes::HeaderIncludes(StringRef FileName, StringRef Code,
>> > -                               const IncludeStyle &Style)
>> > -    : FileName(FileName), Code(Code), FirstIncludeOffset(-1),
>> > -      MinInsertOffset(
>> > -          getOffsetAfterHeaderGuardsAndComments(FileName, Code, Style)),
>> > -      MaxInsertOffset(MinInsertOffset +
>> > -                      getMaxHeaderInsertionOffset(
>> > -                          FileName, Code.drop_front(MinInsertOffset), Style)),
>> > -      Categories(Style, FileName),
>> > -      IncludeRegex(llvm::Regex(IncludeRegexPattern)) {
>> > -  // Add 0 for main header and INT_MAX for headers that are not in any
>> > -  // category.
>> > -  Priorities = {0, INT_MAX};
>> > -  for (const auto &Category : Style.IncludeCategories)
>> > -    Priorities.insert(Category.Priority);
>> > -  SmallVector<StringRef, 32> Lines;
>> > -  Code.drop_front(MinInsertOffset).split(Lines, "\n");
>> > -
>> > -  unsigned Offset = MinInsertOffset;
>> > -  unsigned NextLineOffset;
>> > -  SmallVector<StringRef, 4> Matches;
>> > -  for (auto Line : Lines) {
>> > -    NextLineOffset = std::min(Code.size(), Offset + Line.size() + 1);
>> > -    if (IncludeRegex.match(Line, &Matches)) {
>> > -      // If this is the last line without trailing newline, we need to make
>> > -      // sure we don't delete across the file boundary.
>> > -      addExistingInclude(
>> > -          Include(Matches[2],
>> > -                  tooling::Range(
>> > -                      Offset, std::min(Line.size() + 1, Code.size() - Offset))),
>> > -          NextLineOffset);
>> > -    }
>> > -    Offset = NextLineOffset;
>> > -  }
>> > -
>> > -  // Populate CategoryEndOfssets:
>> > -  // - Ensure that CategoryEndOffset[Highest] is always populated.
>> > -  // - If CategoryEndOffset[Priority] isn't set, use the next higher value
>> > -  // that is set, up to CategoryEndOffset[Highest].
>> > -  auto Highest = Priorities.begin();
>> > -  if (CategoryEndOffsets.find(*Highest) == CategoryEndOffsets.end()) {
>> > -    if (FirstIncludeOffset >= 0)
>> > -      CategoryEndOffsets[*Highest] = FirstIncludeOffset;
>> > -    else
>> > -      CategoryEndOffsets[*Highest] = MinInsertOffset;
>> > -  }
>> > -  // By this point, CategoryEndOffset[Highest] is always set appropriately:
>> > -  //  - to an appropriate location before/after existing #includes, or
>> > -  //  - to right after the header guard, or
>> > -  //  - to the beginning of the file.
>> > -  for (auto I = ++Priorities.begin(), E = Priorities.end(); I != E; ++I)
>> > -    if (CategoryEndOffsets.find(*I) == CategoryEndOffsets.end())
>> > -      CategoryEndOffsets[*I] = CategoryEndOffsets[*std::prev(I)];
>> > -}
>> > -
>> > -// \p Offset: the start of the line following this include directive.
>> > -void HeaderIncludes::addExistingInclude(Include IncludeToAdd,
>> > -                                        unsigned NextLineOffset) {
>> > -  auto Iter =
>> > -      ExistingIncludes.try_emplace(trimInclude(IncludeToAdd.Name)).first;
>> > -  Iter->second.push_back(std::move(IncludeToAdd));
>> > -  auto &CurInclude = Iter->second.back();
>> > -  // The header name with quotes or angle brackets.
>> > -  // Only record the offset of current #include if we can insert after it.
>> > -  if (CurInclude.R.getOffset() <= MaxInsertOffset) {
>> > -    int Priority = Categories.getIncludePriority(
>> > -        CurInclude.Name, /*CheckMainHeader=*/FirstIncludeOffset < 0);
>> > -    CategoryEndOffsets[Priority] = NextLineOffset;
>> > -    IncludesByPriority[Priority].push_back(&CurInclude);
>> > -    if (FirstIncludeOffset < 0)
>> > -      FirstIncludeOffset = CurInclude.R.getOffset();
>> > -  }
>> > -}
>> > -
>> > -llvm::Optional<tooling::Replacement>
>> > -HeaderIncludes::insert(llvm::StringRef IncludeName, bool IsAngled) const {
>> > -  assert(IncludeName == trimInclude(IncludeName));
>> > -  // If a <header> ("header") already exists in code, "header" (<header>) with
>> > -  // different quotation will still be inserted.
>> > -  // FIXME: figure out if this is the best behavior.
>> > -  auto It = ExistingIncludes.find(IncludeName);
>> > -  if (It != ExistingIncludes.end())
>> > -    for (const auto &Inc : It->second)
>> > -      if ((IsAngled && StringRef(Inc.Name).startswith("<")) ||
>> > -          (!IsAngled && StringRef(Inc.Name).startswith("\"")))
>> > -        return llvm::None;
>> > -  std::string Quoted = IsAngled ? ("<" + IncludeName + ">").str()
>> > -                                : ("\"" + IncludeName + "\"").str();
>> > -  StringRef QuotedName = Quoted;
>> > -  int Priority = Categories.getIncludePriority(
>> > -      QuotedName, /*CheckMainHeader=*/FirstIncludeOffset < 0);
>> > -  auto CatOffset = CategoryEndOffsets.find(Priority);
>> > -  assert(CatOffset != CategoryEndOffsets.end());
>> > -  unsigned InsertOffset = CatOffset->second; // Fall back offset
>> > -  auto Iter = IncludesByPriority.find(Priority);
>> > -  if (Iter != IncludesByPriority.end()) {
>> > -    for (const auto *Inc : Iter->second) {
>> > -      if (QuotedName < Inc->Name) {
>> > -        InsertOffset = Inc->R.getOffset();
>> > -        break;
>> > -      }
>> > -    }
>> > -  }
>> > -  assert(InsertOffset <= Code.size());
>> > -  std::string NewInclude = ("#include " + QuotedName + "\n").str();
>> > -  // When inserting headers at end of the code, also append '\n' to the code
>> > -  // if it does not end with '\n'.
>> > -  // FIXME: when inserting multiple #includes at the end of code, only one
>> > -  // newline should be added.
>> > -  if (InsertOffset == Code.size() && (!Code.empty() && Code.back() != '\n'))
>> > -    NewInclude = "\n" + NewInclude;
>> > -  return tooling::Replacement(FileName, InsertOffset, 0, NewInclude);
>> > -}
>> > -
>> > -tooling::Replacements HeaderIncludes::remove(llvm::StringRef IncludeName,
>> > -                                             bool IsAngled) const {
>> > -  assert(IncludeName == trimInclude(IncludeName));
>> > -  tooling::Replacements Result;
>> > -  auto Iter = ExistingIncludes.find(IncludeName);
>> > -  if (Iter == ExistingIncludes.end())
>> > -    return Result;
>> > -  for (const auto &Inc : Iter->second) {
>> > -    if ((IsAngled && StringRef(Inc.Name).startswith("\"")) ||
>> > -        (!IsAngled && StringRef(Inc.Name).startswith("<")))
>> > -      continue;
>> > -    llvm::Error Err = Result.add(tooling::Replacement(
>> > -        FileName, Inc.R.getOffset(), Inc.R.getLength(), ""));
>> > -    if (Err) {
>> > -      auto ErrMsg = "Unexpected conflicts in #include deletions: " +
>> > -                    llvm::toString(std::move(Err));
>> > -      llvm_unreachable(ErrMsg.c_str());
>> > -    }
>> > -  }
>> > -  return Result;
>> > -}
>> > -
>> > -
>> > -} // namespace tooling
>> > -} // namespace clang
>> > 
>> > Removed: cfe/trunk/lib/Tooling/Core/IncludeStyle.cpp
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Core/IncludeStyle.cpp?rev=332719&view=auto <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Core/IncludeStyle.cpp?rev=332719&view=auto>
>> > ==============================================================================
>> > --- cfe/trunk/lib/Tooling/Core/IncludeStyle.cpp (original)
>> > +++ cfe/trunk/lib/Tooling/Core/IncludeStyle.cpp (removed)
>> > @@ -1,32 +0,0 @@
>> > -//===--- IncludeStyle.cpp - Style of C++ #include directives -----*- C++-*-===//
>> > -//
>> > -//                     The LLVM Compiler Infrastructure
>> > -//
>> > -// This file is distributed under the University of Illinois Open Source
>> > -// License. See LICENSE.TXT for details.
>> > -//
>> > -//===----------------------------------------------------------------------===//
>> > -
>> > -#include "clang/Tooling/Core/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);
>> > -}
>> > -
>> > -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);
>> > -}
>> > -
>> > -} // namespace yaml
>> > -} // namespace llvm
>> > 
>> > Copied: cfe/trunk/lib/Tooling/Inclusions/CMakeLists.txt (from r332717, cfe/trunk/lib/Tooling/Core/CMakeLists.txt)
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Inclusions/CMakeLists.txt?p2=cfe/trunk/lib/Tooling/Inclusions/CMakeLists.txt&p1=cfe/trunk/lib/Tooling/Core/CMakeLists.txt&r1=332717&r2=332720&rev=332720&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Inclusions/CMakeLists.txt?p2=cfe/trunk/lib/Tooling/Inclusions/CMakeLists.txt&p1=cfe/trunk/lib/Tooling/Core/CMakeLists.txt&r1=332717&r2=332720&rev=332720&view=diff>
>> > ==============================================================================
>> > --- cfe/trunk/lib/Tooling/Core/CMakeLists.txt (original)
>> > +++ cfe/trunk/lib/Tooling/Inclusions/CMakeLists.txt Fri May 18 07:16:37 2018
>> > @@ -1,15 +1,12 @@
>> > set(LLVM_LINK_COMPONENTS support)
>> > 
>> > -add_clang_library(clangToolingCore
>> > -  Diagnostic.cpp
>> > +add_clang_library(clangToolingInclusions
>> >   HeaderIncludes.cpp
>> >   IncludeStyle.cpp
>> > -  Lookup.cpp
>> > -  Replacement.cpp
>> > 
>> >   LINK_LIBS
>> > -  clangAST
>> >   clangBasic
>> >   clangLex
>> >   clangRewrite
>> > +  clangToolingCore
>> >   )
>> > 
>> > Copied: cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp (from r332717, cfe/trunk/lib/Tooling/Core/HeaderIncludes.cpp)
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp?p2=cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp&p1=cfe/trunk/lib/Tooling/Core/HeaderIncludes.cpp&r1=332717&r2=332720&rev=332720&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp?p2=cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp&p1=cfe/trunk/lib/Tooling/Core/HeaderIncludes.cpp&r1=332717&r2=332720&rev=332720&view=diff>
>> > ==============================================================================
>> > --- cfe/trunk/lib/Tooling/Core/HeaderIncludes.cpp (original)
>> > +++ cfe/trunk/lib/Tooling/Inclusions/HeaderIncludes.cpp Fri May 18 07:16:37 2018
>> > @@ -7,7 +7,7 @@
>> > //
>> > //===----------------------------------------------------------------------===//
>> > 
>> > -#include "clang/Tooling/Core/HeaderIncludes.h"
>> > +#include "clang/Tooling/Inclusions/HeaderIncludes.h"
>> > #include "clang/Basic/SourceManager.h"
>> > #include "clang/Lex/Lexer.h"
>> > 
>> > 
>> > Copied: cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp (from r332717, cfe/trunk/lib/Tooling/Core/IncludeStyle.cpp)
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp?p2=cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp&p1=cfe/trunk/lib/Tooling/Core/IncludeStyle.cpp&r1=332717&r2=332720&rev=332720&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp?p2=cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp&p1=cfe/trunk/lib/Tooling/Core/IncludeStyle.cpp&r1=332717&r2=332720&rev=332720&view=diff>
>> > ==============================================================================
>> > --- cfe/trunk/lib/Tooling/Core/IncludeStyle.cpp (original)
>> > +++ cfe/trunk/lib/Tooling/Inclusions/IncludeStyle.cpp Fri May 18 07:16:37 2018
>> > @@ -7,8 +7,7 @@
>> > //
>> > //===----------------------------------------------------------------------===//
>> > 
>> > -#include "clang/Tooling/Core/IncludeStyle.h"
>> > -
>> > +#include "clang/Tooling/Inclusions/IncludeStyle.h"
>> > 
>> > using clang::tooling::IncludeStyle;
>> > 
>> > 
>> > Modified: cfe/trunk/unittests/Tooling/HeaderIncludesTest.cpp
>> > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/HeaderIncludesTest.cpp?rev=332720&r1=332719&r2=332720&view=diff <http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Tooling/HeaderIncludesTest.cpp?rev=332720&r1=332719&r2=332720&view=diff>
>> > ==============================================================================
>> > --- cfe/trunk/unittests/Tooling/HeaderIncludesTest.cpp (original)
>> > +++ cfe/trunk/unittests/Tooling/HeaderIncludesTest.cpp Fri May 18 07:16:37 2018
>> > @@ -7,7 +7,7 @@
>> > //
>> > //===----------------------------------------------------------------------===//
>> > 
>> > -#include "clang/Tooling/Core/HeaderIncludes.h"
>> > +#include "clang/Tooling/Inclusions/HeaderIncludes.h"
>> > #include "../Tooling/ReplacementTest.h"
>> > #include "../Tooling/RewriterTestContext.h"
>> > #include "clang/Format/Format.h"
>> > 
>> > 
>> > _______________________________________________
>> > cfe-commits mailing list
>> > cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits>
>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180518/e5d09a0a/attachment-0001.html>


More information about the cfe-commits mailing list