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