ReplacementsYaml.h revision 263508
1//===-- ReplacementsYaml.h -- Serialiazation for Replacements ---*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9/// 10/// \file 11/// \brief This file defines the structure of a YAML document for serializing 12/// replacements. 13/// 14//===----------------------------------------------------------------------===// 15 16#ifndef LLVM_CLANG_TOOLING_REPLACEMENTS_YAML_H 17#define LLVM_CLANG_TOOLING_REPLACEMENTS_YAML_H 18 19#include "clang/Tooling/Refactoring.h" 20#include "llvm/Support/YAMLTraits.h" 21#include <vector> 22#include <string> 23 24LLVM_YAML_IS_SEQUENCE_VECTOR(clang::tooling::Replacement) 25 26namespace llvm { 27namespace yaml { 28 29/// \brief ScalarTraits to read/write std::string objects. 30template <> struct ScalarTraits<std::string> { 31 static void output(const std::string &Val, void *, llvm::raw_ostream &Out) { 32 Out << Val; 33 } 34 35 static StringRef input(StringRef Scalar, void *, std::string &Val) { 36 Val = Scalar; 37 return StringRef(); 38 } 39}; 40 41/// \brief Specialized MappingTraits to describe how a Replacement is 42/// (de)serialized. 43template <> struct MappingTraits<clang::tooling::Replacement> { 44 /// \brief Helper to (de)serialize a Replacement since we don't have direct 45 /// access to its data members. 46 struct NormalizedReplacement { 47 NormalizedReplacement(const IO &) 48 : FilePath(""), Offset(0), Length(0), ReplacementText("") {} 49 50 NormalizedReplacement(const IO &, const clang::tooling::Replacement &R) 51 : FilePath(R.getFilePath()), Offset(R.getOffset()), 52 Length(R.getLength()), ReplacementText(R.getReplacementText()) {} 53 54 clang::tooling::Replacement denormalize(const IO &) { 55 return clang::tooling::Replacement(FilePath, Offset, Length, 56 ReplacementText); 57 } 58 59 std::string FilePath; 60 unsigned int Offset; 61 unsigned int Length; 62 std::string ReplacementText; 63 }; 64 65 static void mapping(IO &Io, clang::tooling::Replacement &R) { 66 MappingNormalization<NormalizedReplacement, clang::tooling::Replacement> 67 Keys(Io, R); 68 Io.mapRequired("FilePath", Keys->FilePath); 69 Io.mapRequired("Offset", Keys->Offset); 70 Io.mapRequired("Length", Keys->Length); 71 Io.mapRequired("ReplacementText", Keys->ReplacementText); 72 } 73}; 74 75/// \brief Specialized MappingTraits to describe how a 76/// TranslationUnitReplacements is (de)serialized. 77template <> struct MappingTraits<clang::tooling::TranslationUnitReplacements> { 78 static void mapping(IO &Io, 79 clang::tooling::TranslationUnitReplacements &Doc) { 80 Io.mapRequired("MainSourceFile", Doc.MainSourceFile); 81 Io.mapOptional("Context", Doc.Context, std::string()); 82 Io.mapRequired("Replacements", Doc.Replacements); 83 } 84}; 85} // end namespace yaml 86} // end namespace llvm 87 88#endif // LLVM_CLANG_TOOLING_REPLACEMENTS_YAML_H 89