1 //===--- AffectedRangeManager.h - Format C++ code ---------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
10 /// AffectedRangeManager class manages affected ranges in the code.
12 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_CLANG_LIB_FORMAT_AFFECTEDRANGEMANAGER_H
15 #define LLVM_CLANG_LIB_FORMAT_AFFECTEDRANGEMANAGER_H
17 #include "clang/Basic/SourceManager.h"
25 class AffectedRangeManager
{
27 AffectedRangeManager(const SourceManager
&SourceMgr
,
28 const ArrayRef
<CharSourceRange
> Ranges
)
29 : SourceMgr(SourceMgr
), Ranges(Ranges
.begin(), Ranges
.end()) {}
31 // Determines which lines are affected by the SourceRanges given as input.
32 // Returns \c true if at least one line in \p Lines or one of their
33 // children is affected.
34 bool computeAffectedLines(SmallVectorImpl
<AnnotatedLine
*> &Lines
);
36 // Returns true if 'Range' intersects with one of the input ranges.
37 bool affectsCharSourceRange(const CharSourceRange
&Range
);
40 // Returns true if the range from 'First' to 'Last' intersects with one of the
42 bool affectsTokenRange(const FormatToken
&First
, const FormatToken
&Last
,
43 bool IncludeLeadingNewlines
);
45 // Returns true if one of the input ranges intersect the leading empty lines
47 bool affectsLeadingEmptyLines(const FormatToken
&Tok
);
49 // Marks all lines between I and E as well as all their children as affected.
50 void markAllAsAffected(SmallVectorImpl
<AnnotatedLine
*>::iterator I
,
51 SmallVectorImpl
<AnnotatedLine
*>::iterator E
);
53 // Determines whether 'Line' is affected by the SourceRanges given as input.
54 // Returns \c true if line or one if its children is affected.
55 bool nonPPLineAffected(AnnotatedLine
*Line
, const AnnotatedLine
*PreviousLine
,
56 SmallVectorImpl
<AnnotatedLine
*> &Lines
);
58 const SourceManager
&SourceMgr
;
59 const SmallVector
<CharSourceRange
, 8> Ranges
;
65 #endif // LLVM_CLANG_LIB_FORMAT_AFFECTEDRANGEMANAGER_H