annotate clang/lib/Format/AffectedRangeManager.h @ 173:0572611fdcc8 llvm10 llvm12

reorgnization done
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 11:55:54 +0900
parents 1d019706d866
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 //===--- AffectedRangeManager.h - Format C++ code ---------------*- C++ -*-===//
anatofuz
parents:
diff changeset
2 //
anatofuz
parents:
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
6 //
anatofuz
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
8 ///
anatofuz
parents:
diff changeset
9 /// \file
anatofuz
parents:
diff changeset
10 /// AffectedRangeManager class manages affected ranges in the code.
anatofuz
parents:
diff changeset
11 ///
anatofuz
parents:
diff changeset
12 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
13
anatofuz
parents:
diff changeset
14 #ifndef LLVM_CLANG_LIB_FORMAT_AFFECTEDRANGEMANAGER_H
anatofuz
parents:
diff changeset
15 #define LLVM_CLANG_LIB_FORMAT_AFFECTEDRANGEMANAGER_H
anatofuz
parents:
diff changeset
16
anatofuz
parents:
diff changeset
17 #include "clang/Basic/SourceManager.h"
anatofuz
parents:
diff changeset
18
anatofuz
parents:
diff changeset
19 namespace clang {
anatofuz
parents:
diff changeset
20 namespace format {
anatofuz
parents:
diff changeset
21
anatofuz
parents:
diff changeset
22 struct FormatToken;
anatofuz
parents:
diff changeset
23 class AnnotatedLine;
anatofuz
parents:
diff changeset
24
anatofuz
parents:
diff changeset
25 class AffectedRangeManager {
anatofuz
parents:
diff changeset
26 public:
anatofuz
parents:
diff changeset
27 AffectedRangeManager(const SourceManager &SourceMgr,
anatofuz
parents:
diff changeset
28 const ArrayRef<CharSourceRange> Ranges)
anatofuz
parents:
diff changeset
29 : SourceMgr(SourceMgr), Ranges(Ranges.begin(), Ranges.end()) {}
anatofuz
parents:
diff changeset
30
anatofuz
parents:
diff changeset
31 // Determines which lines are affected by the SourceRanges given as input.
anatofuz
parents:
diff changeset
32 // Returns \c true if at least one line in \p Lines or one of their
anatofuz
parents:
diff changeset
33 // children is affected.
anatofuz
parents:
diff changeset
34 bool computeAffectedLines(SmallVectorImpl<AnnotatedLine *> &Lines);
anatofuz
parents:
diff changeset
35
anatofuz
parents:
diff changeset
36 // Returns true if 'Range' intersects with one of the input ranges.
anatofuz
parents:
diff changeset
37 bool affectsCharSourceRange(const CharSourceRange &Range);
anatofuz
parents:
diff changeset
38
anatofuz
parents:
diff changeset
39 private:
anatofuz
parents:
diff changeset
40 // Returns true if the range from 'First' to 'Last' intersects with one of the
anatofuz
parents:
diff changeset
41 // input ranges.
anatofuz
parents:
diff changeset
42 bool affectsTokenRange(const FormatToken &First, const FormatToken &Last,
anatofuz
parents:
diff changeset
43 bool IncludeLeadingNewlines);
anatofuz
parents:
diff changeset
44
anatofuz
parents:
diff changeset
45 // Returns true if one of the input ranges intersect the leading empty lines
anatofuz
parents:
diff changeset
46 // before 'Tok'.
anatofuz
parents:
diff changeset
47 bool affectsLeadingEmptyLines(const FormatToken &Tok);
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 // Marks all lines between I and E as well as all their children as affected.
anatofuz
parents:
diff changeset
50 void markAllAsAffected(SmallVectorImpl<AnnotatedLine *>::iterator I,
anatofuz
parents:
diff changeset
51 SmallVectorImpl<AnnotatedLine *>::iterator E);
anatofuz
parents:
diff changeset
52
anatofuz
parents:
diff changeset
53 // Determines whether 'Line' is affected by the SourceRanges given as input.
anatofuz
parents:
diff changeset
54 // Returns \c true if line or one if its children is affected.
anatofuz
parents:
diff changeset
55 bool nonPPLineAffected(AnnotatedLine *Line, const AnnotatedLine *PreviousLine,
anatofuz
parents:
diff changeset
56 SmallVectorImpl<AnnotatedLine *> &Lines);
anatofuz
parents:
diff changeset
57
anatofuz
parents:
diff changeset
58 const SourceManager &SourceMgr;
anatofuz
parents:
diff changeset
59 const SmallVector<CharSourceRange, 8> Ranges;
anatofuz
parents:
diff changeset
60 };
anatofuz
parents:
diff changeset
61
anatofuz
parents:
diff changeset
62 } // namespace format
anatofuz
parents:
diff changeset
63 } // namespace clang
anatofuz
parents:
diff changeset
64
anatofuz
parents:
diff changeset
65 #endif // LLVM_CLANG_LIB_FORMAT_AFFECTEDRANGEMANAGER_H