1 //===--- NamespaceEndCommentsFixer.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 NamespaceEndCommentsFixer, a TokenAnalyzer that 11 /// fixes namespace end comments. 12 /// 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_CLANG_LIB_FORMAT_NAMESPACEENDCOMMENTSFIXER_H 16 #define LLVM_CLANG_LIB_FORMAT_NAMESPACEENDCOMMENTSFIXER_H 17 18 #include "TokenAnalyzer.h" 19 20 namespace clang { 21 namespace format { 22 23 // Finds the namespace token corresponding to a closing namespace `}`, if that 24 // is to be formatted. 25 // If \p Line contains the closing `}` of a namespace, is affected and is not in 26 // a preprocessor directive, the result will be the matching namespace token. 27 // Otherwise returns null. 28 // \p AnnotatedLines is the sequence of lines from which \p Line is a member of. 29 const FormatToken * 30 getNamespaceToken(const AnnotatedLine *Line, 31 const SmallVectorImpl<AnnotatedLine *> &AnnotatedLines); 32 33 class NamespaceEndCommentsFixer : public TokenAnalyzer { 34 public: 35 NamespaceEndCommentsFixer(const Environment &Env, const FormatStyle &Style); 36 37 std::pair<tooling::Replacements, unsigned> 38 analyze(TokenAnnotator &Annotator, 39 SmallVectorImpl<AnnotatedLine *> &AnnotatedLines, 40 FormatTokenLexer &Tokens) override; 41 }; 42 43 } // end namespace format 44 } // end namespace clang 45 46 #endif 47