diff --git a/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp b/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp @@ -131,15 +131,12 @@ return QualifiedFunc->substr(FuncBegin, FuncEnd - FuncBegin + 1); } -// Returns Replacements deleting given keywords from function defintion. -// Removes matching instances of given token preceeding the function defition. +// Returns replacements to delete tokens with kind `Kind` in the range +// `FromRange`. Removes matching instances of given token preceeding the +// function defition. llvm::Expected -getDelKeywordReplacements(const FunctionDecl *FD, - const syntax::TokenBuffer &TokBuf, - tok::TokenKind Kind, SourceRange FromRange) { - auto &AST = FD->getASTContext(); - auto &SM = AST.getSourceManager(); - +deleteTokensWithKind(const syntax::TokenBuffer &TokBuf, tok::TokenKind Kind, + SourceRange FromRange) { tooling::Replacements DelKeywordCleanups; llvm::Error Errors = llvm::Error::success(); bool FoundAny = false; @@ -155,6 +152,7 @@ tok::getKeywordSpelling(Kind))); break; } + auto &SM = TokBuf.sourceManager(); CharSourceRange DelRange = syntax::Token::range(SM, Spelling->front(), Spelling->back()) .toCharRange(SM); @@ -294,7 +292,7 @@ DelAttr(FD->getAttr()); auto DelKeyword = [&](tok::TokenKind Kind, SourceRange FromRange) { - auto DelKeywords = getDelKeywordReplacements(FD, TokBuf, Kind, FromRange); + auto DelKeywords = deleteTokensWithKind(TokBuf, Kind, FromRange); if (!DelKeywords) { Errors = llvm::joinErrors(std::move(Errors), DelKeywords.takeError()); return; @@ -485,20 +483,17 @@ if (!Effect) return Effect.takeError(); - tooling::Replacements HeaderUpdates; - const tooling::Replacement DeleteFuncBody( + tooling::Replacements HeaderUpdates(tooling::Replacement( Sel.AST->getSourceManager(), CharSourceRange::getTokenRange(*toHalfOpenFileRange( SM, Sel.AST->getLangOpts(), getDeletionRange(Source, Sel.AST->getTokens()))), - ";"); - if (auto Err = HeaderUpdates.add(DeleteFuncBody)) - return Err; + ";")); if (Source->isInlineSpecified()) { - auto DelInline = getDelKeywordReplacements( - Source, Sel.AST->getTokens(), tok::kw_inline, - {Source->getBeginLoc(), Source->getLocation()}); + auto DelInline = + deleteTokensWithKind(Sel.AST->getTokens(), tok::kw_inline, + {Source->getBeginLoc(), Source->getLocation()}); if (!DelInline) return DelInline.takeError(); HeaderUpdates = HeaderUpdates.merge(*DelInline);