blob: abbb33b0c68152440499fedecdd8ce6c2329ed10 [file] [log] [blame]
//===--- Edit.cpp - Misc edit utilities -----------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#include "llvm/Support/raw_ostream.h"
#include "swift/Basic/Edit.h"
#include "swift/Basic/SourceManager.h"
void swift::
writeEditsInJson(ArrayRef<SingleEdit> AllEdits, llvm::raw_ostream &OS) {
OS << "[\n";
for (auto &Edit : AllEdits) {
SourceManager &SM = Edit.SM;
CharSourceRange Range = Edit.Range;
StringRef Text = Edit.Text;
SourceLoc Loc = Range.getStart();
unsigned BufID = SM.findBufferContainingLoc(Loc);
unsigned Offset = SM.getLocOffsetInBuffer(Loc, BufID);
unsigned Length = Range.getByteLength();
StringRef Path(SM.getIdentifierForBuffer(BufID));
OS << " {\n";
OS << " \"file\": \"";
OS.write_escaped(Path) << "\",\n";
OS << " \"offset\": " << Offset << ",\n";
if (Length != 0)
OS << " \"remove\": " << Length << ",\n";
if (!Text.empty()) {
OS << " \"text\": \"";
OS.write_escaped(Text) << "\",\n";
}
OS << " },\n";
}
OS << "]\n";
}