Path: blob/main/contrib/llvm-project/clang/lib/Format/QualifierAlignmentFixer.h
35233 views
//===--- QualifierAlignmentFixer.h -------------------------------*- C++-*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7///8/// \file9/// This file declares QualifierAlignmentFixer, a TokenAnalyzer that10/// enforces either east or west const depending on the style.11///12//===----------------------------------------------------------------------===//1314#ifndef LLVM_CLANG_LIB_FORMAT_QUALIFIERALIGNMENTFIXER_H15#define LLVM_CLANG_LIB_FORMAT_QUALIFIERALIGNMENTFIXER_H1617#include "TokenAnalyzer.h"1819namespace clang {20namespace format {2122typedef std::function<std::pair<tooling::Replacements, unsigned>(23const Environment &)>24AnalyzerPass;2526void addQualifierAlignmentFixerPasses(const FormatStyle &Style,27SmallVectorImpl<AnalyzerPass> &Passes);2829void prepareLeftRightOrderingForQualifierAlignmentFixer(30const std::vector<std::string> &Order, std::vector<std::string> &LeftOrder,31std::vector<std::string> &RightOrder,32std::vector<tok::TokenKind> &Qualifiers);3334// Is the Token a simple or qualifier type35bool isQualifierOrType(const FormatToken *Tok, const LangOptions &LangOpts);36bool isConfiguredQualifierOrType(const FormatToken *Tok,37const std::vector<tok::TokenKind> &Qualifiers,38const LangOptions &LangOpts);3940// Is the Token likely a Macro41bool isPossibleMacro(const FormatToken *Tok);4243class LeftRightQualifierAlignmentFixer : public TokenAnalyzer {44std::string Qualifier;45bool RightAlign;46SmallVector<tok::TokenKind, 8> QualifierTokens;47std::vector<tok::TokenKind> ConfiguredQualifierTokens;4849public:50LeftRightQualifierAlignmentFixer(51const Environment &Env, const FormatStyle &Style,52const std::string &Qualifier,53const std::vector<tok::TokenKind> &ConfiguredQualifierTokens,54bool RightAlign);5556std::pair<tooling::Replacements, unsigned>57analyze(TokenAnnotator &Annotator,58SmallVectorImpl<AnnotatedLine *> &AnnotatedLines,59FormatTokenLexer &Tokens) override;6061static tok::TokenKind getTokenFromQualifier(const std::string &Qualifier);6263void fixQualifierAlignment(SmallVectorImpl<AnnotatedLine *> &AnnotatedLines,64FormatTokenLexer &Tokens,65tooling::Replacements &Fixes);6667const FormatToken *analyzeRight(const SourceManager &SourceMgr,68const AdditionalKeywords &Keywords,69tooling::Replacements &Fixes,70const FormatToken *Tok,71const std::string &Qualifier,72tok::TokenKind QualifierType);7374const FormatToken *analyzeLeft(const SourceManager &SourceMgr,75const AdditionalKeywords &Keywords,76tooling::Replacements &Fixes,77const FormatToken *Tok,78const std::string &Qualifier,79tok::TokenKind QualifierType);80};8182} // end namespace format83} // end namespace clang8485#endif868788