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