1//===--- DefinitionBlockSeparator.h -----------------------------*- C++ -*-===//
2//
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
6//
7//===----------------------------------------------------------------------===//
8///
9/// \file
10/// This file declares DefinitionBlockSeparator, a TokenAnalyzer that inserts or
11/// removes empty lines separating definition blocks like classes, structs,
12/// functions, enums, and namespaces in between.
13///
14//===----------------------------------------------------------------------===//
15
16#ifndef LLVM_CLANG_LIB_FORMAT_DEFINITIONBLOCKSEPARATOR_H
17#define LLVM_CLANG_LIB_FORMAT_DEFINITIONBLOCKSEPARATOR_H
18
19#include "TokenAnalyzer.h"
20#include "WhitespaceManager.h"
21
22namespace clang {
23namespace format {
24class DefinitionBlockSeparator : public TokenAnalyzer {
25public:
26 DefinitionBlockSeparator(const Environment &Env, const FormatStyle &Style)
27 : TokenAnalyzer(Env, Style) {}
28
29 std::pair<tooling::Replacements, unsigned>
30 analyze(TokenAnnotator &Annotator,
31 SmallVectorImpl<AnnotatedLine *> &AnnotatedLines,
32 FormatTokenLexer &Tokens) override;
33
34private:
35 void separateBlocks(SmallVectorImpl<AnnotatedLine *> &Lines,
36 tooling::Replacements &Result, FormatTokenLexer &Tokens);
37};
38} // namespace format
39} // namespace clang
40
41#endif
42