xref: /freebsd-src/contrib/llvm-project/clang/lib/Format/DefinitionBlockSeparator.h (revision 04eeddc0aa8e0a417a16eaf9d7d095207f4a8623)
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