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