xref: /freebsd-src/contrib/llvm-project/clang/lib/Format/ObjCPropertyAttributeOrderFixer.h (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
1*5f757f3fSDimitry Andric //===--- ObjCPropertyAttributeOrderFixer.h ------------------------------*- C++
2*5f757f3fSDimitry Andric //-*-===//
3*5f757f3fSDimitry Andric //
4*5f757f3fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*5f757f3fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
6*5f757f3fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7*5f757f3fSDimitry Andric //
8*5f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
9*5f757f3fSDimitry Andric ///
10*5f757f3fSDimitry Andric /// \file
11*5f757f3fSDimitry Andric /// This file declares ObjCPropertyAttributeOrderFixer, a TokenAnalyzer that
12*5f757f3fSDimitry Andric /// adjusts the order of attributes in an ObjC `@property(...)` declaration,
13*5f757f3fSDimitry Andric /// depending on the style.
14*5f757f3fSDimitry Andric ///
15*5f757f3fSDimitry Andric //===----------------------------------------------------------------------===//
16*5f757f3fSDimitry Andric 
17*5f757f3fSDimitry Andric #ifndef LLVM_CLANG_LIB_FORMAT_OBJCPROPERTYATTRIBUTEORDERFIXER_H
18*5f757f3fSDimitry Andric #define LLVM_CLANG_LIB_FORMAT_OBJCPROPERTYATTRIBUTEORDERFIXER_H
19*5f757f3fSDimitry Andric 
20*5f757f3fSDimitry Andric #include "TokenAnalyzer.h"
21*5f757f3fSDimitry Andric 
22*5f757f3fSDimitry Andric namespace clang {
23*5f757f3fSDimitry Andric namespace format {
24*5f757f3fSDimitry Andric 
25*5f757f3fSDimitry Andric class ObjCPropertyAttributeOrderFixer : public TokenAnalyzer {
26*5f757f3fSDimitry Andric   llvm::StringMap<unsigned> SortOrderMap;
27*5f757f3fSDimitry Andric 
28*5f757f3fSDimitry Andric   void analyzeObjCPropertyDecl(const SourceManager &SourceMgr,
29*5f757f3fSDimitry Andric                                const AdditionalKeywords &Keywords,
30*5f757f3fSDimitry Andric                                tooling::Replacements &Fixes,
31*5f757f3fSDimitry Andric                                const FormatToken *Tok);
32*5f757f3fSDimitry Andric 
33*5f757f3fSDimitry Andric   void sortPropertyAttributes(const SourceManager &SourceMgr,
34*5f757f3fSDimitry Andric                               tooling::Replacements &Fixes,
35*5f757f3fSDimitry Andric                               const FormatToken *BeginTok,
36*5f757f3fSDimitry Andric                               const FormatToken *EndTok);
37*5f757f3fSDimitry Andric 
38*5f757f3fSDimitry Andric   std::pair<tooling::Replacements, unsigned>
39*5f757f3fSDimitry Andric   analyze(TokenAnnotator &Annotator,
40*5f757f3fSDimitry Andric           SmallVectorImpl<AnnotatedLine *> &AnnotatedLines,
41*5f757f3fSDimitry Andric           FormatTokenLexer &Tokens) override;
42*5f757f3fSDimitry Andric 
43*5f757f3fSDimitry Andric public:
44*5f757f3fSDimitry Andric   ObjCPropertyAttributeOrderFixer(const Environment &Env,
45*5f757f3fSDimitry Andric                                   const FormatStyle &Style);
46*5f757f3fSDimitry Andric };
47*5f757f3fSDimitry Andric 
48*5f757f3fSDimitry Andric } // end namespace format
49*5f757f3fSDimitry Andric } // end namespace clang
50*5f757f3fSDimitry Andric 
51*5f757f3fSDimitry Andric #endif
52