clang  5.0.0
UnwrappedLineFormatter.h
Go to the documentation of this file.
1 //===--- UnwrappedLineFormatter.h - Format C++ code -------------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 ///
10 /// \file
11 /// \brief Implements a combinartorial exploration of all the different
12 /// linebreaks unwrapped lines can be formatted in.
13 ///
14 //===----------------------------------------------------------------------===//
15 
16 #ifndef LLVM_CLANG_LIB_FORMAT_UNWRAPPEDLINEFORMATTER_H
17 #define LLVM_CLANG_LIB_FORMAT_UNWRAPPEDLINEFORMATTER_H
18 
19 #include "ContinuationIndenter.h"
20 #include "clang/Format/Format.h"
21 #include <map>
22 
23 namespace clang {
24 namespace format {
25 
26 class ContinuationIndenter;
27 class WhitespaceManager;
28 
30 public:
32  WhitespaceManager *Whitespaces,
33  const FormatStyle &Style,
34  const AdditionalKeywords &Keywords,
35  const SourceManager &SourceMgr,
37  : Indenter(Indenter), Whitespaces(Whitespaces), Style(Style),
38  Keywords(Keywords), SourceMgr(SourceMgr),
39  Status(Status) {}
40 
41  /// \brief Format the current block and return the penalty.
42  unsigned format(const SmallVectorImpl<AnnotatedLine *> &Lines,
43  bool DryRun = false, int AdditionalIndent = 0,
44  bool FixBadIndentation = false);
45 
46 private:
47  /// \brief Add a new line and the required indent before the first Token
48  /// of the \c UnwrappedLine if there was no structural parsing error.
49  void formatFirstToken(const AnnotatedLine &Line,
50  const AnnotatedLine *PreviousLine, unsigned Indent);
51 
52  /// \brief Returns the column limit for a line, taking into account whether we
53  /// need an escaped newline due to a continued preprocessor directive.
54  unsigned getColumnLimit(bool InPPDirective,
55  const AnnotatedLine *NextLine) const;
56 
57  // Cache to store the penalty of formatting a vector of AnnotatedLines
58  // starting from a specific additional offset. Improves performance if there
59  // are many nested blocks.
60  std::map<std::pair<const SmallVectorImpl<AnnotatedLine *> *, unsigned>,
61  unsigned>
62  PenaltyCache;
63 
64  ContinuationIndenter *Indenter;
65  WhitespaceManager *Whitespaces;
66  const FormatStyle &Style;
67  const AdditionalKeywords &Keywords;
68  const SourceManager &SourceMgr;
70 };
71 } // end namespace format
72 } // end namespace clang
73 
74 #endif // LLVM_CLANG_LIB_FORMAT_UNWRAPPEDLINEFORMATTER_H
Manages the whitespaces around tokens and their replacements.
UnwrappedLineFormatter(ContinuationIndenter *Indenter, WhitespaceManager *Whitespaces, const FormatStyle &Style, const AdditionalKeywords &Keywords, const SourceManager &SourceMgr, FormattingAttemptStatus *Status)
AnnotatedLine & Line
Various functions to configurably format source code.
Encapsulates keywords that are context sensitive or for languages not properly supported by Clang's l...
Definition: FormatToken.h:621
The FormatStyle is used to configure the formatting to follow specific guidelines.
Definition: Format.h:46
unsigned format(const SmallVectorImpl< AnnotatedLine * > &Lines, bool DryRun=false, int AdditionalIndent=0, bool FixBadIndentation=false)
Format the current block and return the penalty.
Represents the status of a formatting attempt.
Definition: Format.h:1642
This file implements an indenter that manages the indentation of continuations.
const unsigned AdditionalIndent
This class handles loading and caching of source files into memory.
unsigned Indent
The current line's indent.