1*04eeddc0SDimitry Andric //===--- DefinitionBlockSeparator.h -----------------------------*- C++ -*-===// 2*04eeddc0SDimitry Andric // 3*04eeddc0SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*04eeddc0SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*04eeddc0SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*04eeddc0SDimitry Andric // 7*04eeddc0SDimitry Andric //===----------------------------------------------------------------------===// 8*04eeddc0SDimitry Andric /// 9*04eeddc0SDimitry Andric /// \file 10*04eeddc0SDimitry Andric /// This file declares DefinitionBlockSeparator, a TokenAnalyzer that inserts or 11*04eeddc0SDimitry Andric /// removes empty lines separating definition blocks like classes, structs, 12*04eeddc0SDimitry Andric /// functions, enums, and namespaces in between. 13*04eeddc0SDimitry Andric /// 14*04eeddc0SDimitry Andric //===----------------------------------------------------------------------===// 15*04eeddc0SDimitry Andric 16*04eeddc0SDimitry Andric #ifndef LLVM_CLANG_LIB_FORMAT_DEFINITIONBLOCKSEPARATOR_H 17*04eeddc0SDimitry Andric #define LLVM_CLANG_LIB_FORMAT_DEFINITIONBLOCKSEPARATOR_H 18*04eeddc0SDimitry Andric 19*04eeddc0SDimitry Andric #include "TokenAnalyzer.h" 20*04eeddc0SDimitry Andric #include "WhitespaceManager.h" 21*04eeddc0SDimitry Andric 22*04eeddc0SDimitry Andric namespace clang { 23*04eeddc0SDimitry Andric namespace format { 24*04eeddc0SDimitry Andric class DefinitionBlockSeparator : public TokenAnalyzer { 25*04eeddc0SDimitry Andric public: DefinitionBlockSeparator(const Environment & Env,const FormatStyle & Style)26*04eeddc0SDimitry Andric DefinitionBlockSeparator(const Environment &Env, const FormatStyle &Style) 27*04eeddc0SDimitry Andric : TokenAnalyzer(Env, Style) {} 28*04eeddc0SDimitry Andric 29*04eeddc0SDimitry Andric std::pair<tooling::Replacements, unsigned> 30*04eeddc0SDimitry Andric analyze(TokenAnnotator &Annotator, 31*04eeddc0SDimitry Andric SmallVectorImpl<AnnotatedLine *> &AnnotatedLines, 32*04eeddc0SDimitry Andric FormatTokenLexer &Tokens) override; 33*04eeddc0SDimitry Andric 34*04eeddc0SDimitry Andric private: 35*04eeddc0SDimitry Andric void separateBlocks(SmallVectorImpl<AnnotatedLine *> &Lines, 36*04eeddc0SDimitry Andric tooling::Replacements &Result, FormatTokenLexer &Tokens); 37*04eeddc0SDimitry Andric }; 38*04eeddc0SDimitry Andric } // namespace format 39*04eeddc0SDimitry Andric } // namespace clang 40*04eeddc0SDimitry Andric 41*04eeddc0SDimitry Andric #endif 42