From 48fad110e08a5765632d45e6a3c30186b21cc81a Mon Sep 17 00:00:00 2001 From: Kadir Cetinkaya Date: Thu, 27 Feb 2020 10:35:14 +0100 Subject: [PATCH] [clangd] Get rid of lexer usage in ObjCLocalizeStringLiteral tweak Reviewers: hokein Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D75230 --- .../refactor/tweaks/ObjCLocalizeStringLiteral.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/clang-tools-extra/clangd/refactor/tweaks/ObjCLocalizeStringLiteral.cpp b/clang-tools-extra/clangd/refactor/tweaks/ObjCLocalizeStringLiteral.cpp index 4e25219..62a306c 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/ObjCLocalizeStringLiteral.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/ObjCLocalizeStringLiteral.cpp @@ -63,15 +63,19 @@ bool ObjCLocalizeStringLiteral::prepare(const Selection &Inputs) { Expected ObjCLocalizeStringLiteral::apply(const Selection &Inputs) { - auto &SM = Inputs.AST->getSourceManager(); - auto &LangOpts = Inputs.AST->getASTContext().getLangOpts(); + auto *AST = Inputs.AST; + auto &SM = AST->getSourceManager(); + const auto &TB = AST->getTokens(); + auto Toks = TB.spelledForExpanded(TB.expandedTokens(Str->getSourceRange())); + if (!Toks || Toks->empty()) + return llvm::createStringError(llvm::inconvertibleErrorCode(), + "Failed to find tokens to replace."); + // Insert `NSLocalizedString(` before the literal. auto Reps = tooling::Replacements(tooling::Replacement( - SM, CharSourceRange::getCharRange(Str->getBeginLoc()), - "NSLocalizedString(", LangOpts)); - SourceLocation EndLoc = Lexer::getLocForEndOfToken( - Str->getEndLoc(), 0, Inputs.AST->getSourceManager(), LangOpts); - if (auto Err = Reps.add(tooling::Replacement( - SM, CharSourceRange::getCharRange(EndLoc), ", @\"\")", LangOpts))) + SM, Toks->front().location(), 0, "NSLocalizedString(")); + // Insert `, @"")` after the literal. + if (auto Err = Reps.add( + tooling::Replacement(SM, Toks->back().endLocation(), 0, ", @\"\")"))) return std::move(Err); return Effect::mainFileEdit(SM, std::move(Reps)); } -- 2.7.4