Author: Sam McCall Date: 2019-12-16T15:46:57+01:00 New Revision: 7dc388bd9596bbf42633f8a8e450224e39740b60
URL: https://github.com/llvm/llvm-project/commit/7dc388bd9596bbf42633f8a8e450224e39740b60 DIFF: https://github.com/llvm/llvm-project/commit/7dc388bd9596bbf42633f8a8e450224e39740b60.diff LOG: [clangd] Make Tweak::Selection movable. NFC Added: Modified: clang-tools-extra/clangd/refactor/Tweak.cpp clang-tools-extra/clangd/refactor/Tweak.h clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp clang-tools-extra/clangd/refactor/tweaks/ExpandMacro.cpp clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp clang-tools-extra/clangd/refactor/tweaks/ObjCLocalizeStringLiteral.cpp clang-tools-extra/clangd/refactor/tweaks/RawStringLiteral.cpp clang-tools-extra/clangd/refactor/tweaks/RemoveUsingNamespace.cpp clang-tools-extra/clangd/refactor/tweaks/SwapIfBranches.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/refactor/Tweak.cpp b/clang-tools-extra/clangd/refactor/Tweak.cpp index 2dc091ed762a..435c36e91efa 100644 --- a/clang-tools-extra/clangd/refactor/Tweak.cpp +++ b/clang-tools-extra/clangd/refactor/Tweak.cpp @@ -47,7 +47,7 @@ void validateRegistry() { Tweak::Selection::Selection(const SymbolIndex *Index, ParsedAST &AST, unsigned RangeBegin, unsigned RangeEnd) - : Index(Index), AST(AST), SelectionBegin(RangeBegin), + : Index(Index), AST(&AST), SelectionBegin(RangeBegin), SelectionEnd(RangeEnd), ASTSelection(AST.getASTContext(), AST.getTokens(), RangeBegin, RangeEnd) { auto &SM = AST.getSourceManager(); diff --git a/clang-tools-extra/clangd/refactor/Tweak.h b/clang-tools-extra/clangd/refactor/Tweak.h index 69ac4ad612e9..14f9ffca4437 100644 --- a/clang-tools-extra/clangd/refactor/Tweak.h +++ b/clang-tools-extra/clangd/refactor/Tweak.h @@ -53,8 +53,8 @@ class Tweak { llvm::StringRef Code; /// The Index for handling codebase related queries. const SymbolIndex *Index = nullptr; - /// Parsed AST of the active file. - ParsedAST &AST; + /// The parsed active file. Never null. (Pointer so Selection is movable). + ParsedAST *AST; /// A location of the cursor in the editor. // FIXME: Cursor is redundant and should be removed SourceLocation Cursor; diff --git a/clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp b/clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp index 2d4d2ac24ea6..8e3eba35b004 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp @@ -44,18 +44,18 @@ Expected<Tweak::Effect> AnnotateHighlightings::apply(const Selection &Inputs) { // Now we hit the TUDecl case where commonAncestor() returns null // intendedly. We only annotate tokens in the main file, so use the default // traversal scope (which is the top level decls of the main file). - HighlightingTokens = getSemanticHighlightings(Inputs.AST); + HighlightingTokens = getSemanticHighlightings(*Inputs.AST); } else { // Store the existing scopes. - const auto &BackupScopes = Inputs.AST.getASTContext().getTraversalScope(); + const auto &BackupScopes = Inputs.AST->getASTContext().getTraversalScope(); // Narrow the traversal scope to the selected node. - Inputs.AST.getASTContext().setTraversalScope( + Inputs.AST->getASTContext().setTraversalScope( {const_cast<Decl *>(CommonDecl)}); - HighlightingTokens = getSemanticHighlightings(Inputs.AST); + HighlightingTokens = getSemanticHighlightings(*Inputs.AST); // Restore the traversal scope. - Inputs.AST.getASTContext().setTraversalScope(BackupScopes); + Inputs.AST->getASTContext().setTraversalScope(BackupScopes); } - auto &SM = Inputs.AST.getSourceManager(); + auto &SM = Inputs.AST->getSourceManager(); tooling::Replacements Result; llvm::StringRef FilePath = SM.getFilename(Inputs.Cursor); for (const auto &Token : HighlightingTokens) { diff --git a/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp b/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp index 57690ee3d684..9db7e302ce6c 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp @@ -438,15 +438,15 @@ class DefineInline : public Tweak { // Check if the decls referenced in function body are visible in the // declaration location. - if (!checkDeclsAreVisible(getNonLocalDeclRefs(Sel.AST, Source), Target, - Sel.AST.getSourceManager())) + if (!checkDeclsAreVisible(getNonLocalDeclRefs(*Sel.AST, Source), Target, + Sel.AST->getSourceManager())) return false; return true; } Expected<Effect> apply(const Selection &Sel) override { - const auto &AST = Sel.AST.getASTContext(); + const auto &AST = Sel.AST->getASTContext(); const auto &SM = AST.getSourceManager(); auto Semicolon = getSemicolonForDecl(Target); diff --git a/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp b/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp index 353da26a0f91..6d27149ef6d4 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp @@ -65,9 +65,9 @@ llvm::Optional<Path> getSourceFile(llvm::StringRef FileName, const Tweak::Selection &Sel) { if (auto Source = getCorrespondingHeaderOrSource( FileName, - &Sel.AST.getSourceManager().getFileManager().getVirtualFileSystem())) + &Sel.AST->getSourceManager().getFileManager().getVirtualFileSystem())) return *Source; - return getCorrespondingHeaderOrSource(FileName, Sel.AST, Sel.Index); + return getCorrespondingHeaderOrSource(FileName, *Sel.AST, Sel.Index); } // Synthesize a DeclContext for TargetNS from CurContext. TargetNS must be empty @@ -309,8 +309,8 @@ class DefineOutline : public Tweak { // Bail out if we are not in a header file. // FIXME: We might want to consider moving method definitions below class // definition even if we are inside a source file. - if (!isHeaderFile(Sel.AST.getSourceManager().getFilename(Sel.Cursor), - Sel.AST.getLangOpts())) + if (!isHeaderFile(Sel.AST->getSourceManager().getFilename(Sel.Cursor), + Sel.AST->getLangOpts())) return false; Source = getSelectedFunction(Sel.ASTSelection.commonAncestor()); @@ -333,7 +333,7 @@ class DefineOutline : public Tweak { } Expected<Effect> apply(const Selection &Sel) override { - const SourceManager &SM = Sel.AST.getSourceManager(); + const SourceManager &SM = Sel.AST->getSourceManager(); auto MainFileName = getCanonicalPath(SM.getFileEntryForID(SM.getMainFileID()), SM); if (!MainFileName) @@ -348,7 +348,7 @@ class DefineOutline : public Tweak { "Couldn't find a suitable implementation file."); auto &FS = - Sel.AST.getSourceManager().getFileManager().getVirtualFileSystem(); + Sel.AST->getSourceManager().getFileManager().getVirtualFileSystem(); auto Buffer = FS.getBufferForFile(*CCFile); // FIXME: Maybe we should consider creating the implementation file if it // doesn't exist? @@ -363,7 +363,7 @@ class DefineOutline : public Tweak { return InsertionPoint.takeError(); auto FuncDef = getFunctionSourceCode( - Source, InsertionPoint->EnclosingNamespace, Sel.AST.getTokens()); + Source, InsertionPoint->EnclosingNamespace, Sel.AST->getTokens()); if (!FuncDef) return FuncDef.takeError(); @@ -377,10 +377,10 @@ class DefineOutline : public Tweak { // FIXME: We should also get rid of inline qualifier. const tooling::Replacement DeleteFuncBody( - Sel.AST.getSourceManager(), + Sel.AST->getSourceManager(), CharSourceRange::getTokenRange(*toHalfOpenFileRange( - SM, Sel.AST.getLangOpts(), - getDeletionRange(Source, Sel.AST.getTokens()))), + SM, Sel.AST->getLangOpts(), + getDeletionRange(Source, Sel.AST->getTokens()))), ";"); auto HeaderFE = Effect::fileEdit(SM, SM.getMainFileID(), tooling::Replacements(DeleteFuncBody)); diff --git a/clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp b/clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp index 879f4d23c24b..f6814003b1ce 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp @@ -61,7 +61,7 @@ REGISTER_TWEAK(DumpAST) llvm::Expected<Tweak::Effect> DumpAST::apply(const Selection &Inputs) { std::string Str; llvm::raw_string_ostream OS(Str); - Node->dump(OS, Inputs.AST.getSourceManager()); + Node->dump(OS, Inputs.AST->getSourceManager()); return Effect::showMessage(std::move(OS.str())); } @@ -110,8 +110,8 @@ class DumpSymbol : public Tweak { llvm::raw_string_ostream Out(Storage); for (auto &Sym : getSymbolInfo( - Inputs.AST, - sourceLocToPosition(Inputs.AST.getSourceManager(), Inputs.Cursor))) + *Inputs.AST, sourceLocToPosition(Inputs.AST->getSourceManager(), + Inputs.Cursor))) Out << Sym; return Effect::showMessage(Out.str()); } @@ -144,7 +144,7 @@ class DumpRecordLayout : public Tweak { Expected<Effect> apply(const Selection &Inputs) override { std::string Str; llvm::raw_string_ostream OS(Str); - Inputs.AST.getASTContext().DumpRecordLayout(Record, OS); + Inputs.AST->getASTContext().DumpRecordLayout(Record, OS); return Effect::showMessage(std::move(OS.str())); } std::string title() const override { diff --git a/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp b/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp index a17324d07dbb..bffd6c02fb6e 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp @@ -71,10 +71,10 @@ bool ExpandAutoType::prepare(const Selection& Inputs) { } Expected<Tweak::Effect> ExpandAutoType::apply(const Selection& Inputs) { - auto& SrcMgr = Inputs.AST.getSourceManager(); + auto &SrcMgr = Inputs.AST->getSourceManager(); - llvm::Optional<clang::QualType> DeducedType = - getDeducedType(Inputs.AST.getASTContext(), CachedLocation->getBeginLoc()); + llvm::Optional<clang::QualType> DeducedType = getDeducedType( + Inputs.AST->getASTContext(), CachedLocation->getBeginLoc()); // if we can't resolve the type, return an error message if (DeducedType == llvm::None) @@ -107,7 +107,7 @@ Expected<Tweak::Effect> ExpandAutoType::apply(const Selection& Inputs) { llvm::Error ExpandAutoType::createErrorMessage(const std::string& Message, const Selection& Inputs) { - auto& SrcMgr = Inputs.AST.getSourceManager(); + auto &SrcMgr = Inputs.AST->getSourceManager(); std::string ErrorMessage = Message + ": " + SrcMgr.getFilename(Inputs.Cursor).str() + " Line " + diff --git a/clang-tools-extra/clangd/refactor/tweaks/ExpandMacro.cpp b/clang-tools-extra/clangd/refactor/tweaks/ExpandMacro.cpp index 89025270b649..eb15d03b32d7 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/ExpandMacro.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/ExpandMacro.cpp @@ -90,21 +90,21 @@ bool ExpandMacro::prepare(const Selection &Inputs) { // 'FOO[[ ]]BAR'. We should not trigger in that case. // Find a token under the cursor. - auto *T = findIdentifierUnderCursor(Inputs.AST.getTokens(), Inputs.Cursor); + auto *T = findIdentifierUnderCursor(Inputs.AST->getTokens(), Inputs.Cursor); // We are interested only in identifiers, other tokens can't be macro names. if (!T) return false; // If the identifier is a macro we will find the corresponding expansion. - auto Expansion = Inputs.AST.getTokens().expansionStartingAt(T); + auto Expansion = Inputs.AST->getTokens().expansionStartingAt(T); if (!Expansion) return false; - this->MacroName = T->text(Inputs.AST.getSourceManager()); + this->MacroName = T->text(Inputs.AST->getSourceManager()); this->Expansion = *Expansion; return true; } Expected<Tweak::Effect> ExpandMacro::apply(const Selection &Inputs) { - auto &SM = Inputs.AST.getSourceManager(); + auto &SM = Inputs.AST->getSourceManager(); std::string Replacement; for (const syntax::Token &T : Expansion.Expanded) { diff --git a/clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp b/clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp index b99599c7f8f6..da8e6e07be68 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp @@ -681,8 +681,8 @@ tooling::Replacement createFunctionDefinition(const NewFunction &ExtractedFunc, bool ExtractFunction::prepare(const Selection &Inputs) { const Node *CommonAnc = Inputs.ASTSelection.commonAncestor(); - const SourceManager &SM = Inputs.AST.getSourceManager(); - const LangOptions &LangOpts = Inputs.AST.getLangOpts(); + const SourceManager &SM = Inputs.AST->getSourceManager(); + const LangOptions &LangOpts = Inputs.AST->getLangOpts(); if (auto MaybeExtZone = findExtractionZone(CommonAnc, SM, LangOpts)) { ExtZone = std::move(*MaybeExtZone); return true; @@ -691,8 +691,8 @@ bool ExtractFunction::prepare(const Selection &Inputs) { } Expected<Tweak::Effect> ExtractFunction::apply(const Selection &Inputs) { - const SourceManager &SM = Inputs.AST.getSourceManager(); - const LangOptions &LangOpts = Inputs.AST.getLangOpts(); + const SourceManager &SM = Inputs.AST->getSourceManager(); + const LangOptions &LangOpts = Inputs.AST->getLangOpts(); auto ExtractedFunc = getExtractedFunction(ExtZone, SM, LangOpts); // FIXME: Add more types of errors. if (!ExtractedFunc) diff --git a/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp b/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp index b758e69378fa..83bc901a3f2f 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp @@ -449,8 +449,8 @@ bool ExtractVariable::prepare(const Selection &Inputs) { // we don't trigger on empty selections for now if (Inputs.SelectionBegin == Inputs.SelectionEnd) return false; - const ASTContext &Ctx = Inputs.AST.getASTContext(); - const SourceManager &SM = Inputs.AST.getSourceManager(); + const ASTContext &Ctx = Inputs.AST->getASTContext(); + const SourceManager &SM = Inputs.AST->getSourceManager(); if (const SelectionTree::Node *N = computeExtractedExpr(Inputs.ASTSelection.commonAncestor())) Target = std::make_unique<ExtractionContext>(N, SM, Ctx); @@ -468,7 +468,8 @@ Expected<Tweak::Effect> ExtractVariable::apply(const Selection &Inputs) { // replace expression with variable name if (auto Err = Result.add(Target->replaceWithVar(Range, VarName))) return std::move(Err); - return Effect::mainFileEdit(Inputs.AST.getSourceManager(), std::move(Result)); + return Effect::mainFileEdit(Inputs.AST->getSourceManager(), + std::move(Result)); } } // namespace diff --git a/clang-tools-extra/clangd/refactor/tweaks/ObjCLocalizeStringLiteral.cpp b/clang-tools-extra/clangd/refactor/tweaks/ObjCLocalizeStringLiteral.cpp index 62d0c6a2d20c..4e2521911072 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/ObjCLocalizeStringLiteral.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/ObjCLocalizeStringLiteral.cpp @@ -63,13 +63,13 @@ bool ObjCLocalizeStringLiteral::prepare(const Selection &Inputs) { Expected<Tweak::Effect> ObjCLocalizeStringLiteral::apply(const Selection &Inputs) { - auto &SM = Inputs.AST.getSourceManager(); - auto &LangOpts = Inputs.AST.getASTContext().getLangOpts(); + auto &SM = Inputs.AST->getSourceManager(); + auto &LangOpts = Inputs.AST->getASTContext().getLangOpts(); auto Reps = tooling::Replacements(tooling::Replacement( SM, CharSourceRange::getCharRange(Str->getBeginLoc()), "NSLocalizedString(", LangOpts)); SourceLocation EndLoc = Lexer::getLocForEndOfToken( - Str->getEndLoc(), 0, Inputs.AST.getSourceManager(), LangOpts); + Str->getEndLoc(), 0, Inputs.AST->getSourceManager(), LangOpts); if (auto Err = Reps.add(tooling::Replacement( SM, CharSourceRange::getCharRange(EndLoc), ", @\"\")", LangOpts))) return std::move(Err); diff --git a/clang-tools-extra/clangd/refactor/tweaks/RawStringLiteral.cpp b/clang-tools-extra/clangd/refactor/tweaks/RawStringLiteral.cpp index 2d4bf755f64f..c5f480cacd76 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/RawStringLiteral.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/RawStringLiteral.cpp @@ -83,15 +83,15 @@ bool RawStringLiteral::prepare(const Selection &Inputs) { return false; Str = dyn_cast_or_null<StringLiteral>(N->ASTNode.get<Stmt>()); return Str && - isNormalString(*Str, Inputs.Cursor, Inputs.AST.getSourceManager()) && + isNormalString(*Str, Inputs.Cursor, Inputs.AST->getSourceManager()) && needsRaw(Str->getBytes()) && canBeRaw(Str->getBytes()); } Expected<Tweak::Effect> RawStringLiteral::apply(const Selection &Inputs) { - auto &SM = Inputs.AST.getSourceManager(); + auto &SM = Inputs.AST->getSourceManager(); auto Reps = tooling::Replacements( tooling::Replacement(SM, Str, ("R\"(" + Str->getBytes() + ")\"").str(), - Inputs.AST.getLangOpts())); + Inputs.AST->getLangOpts())); return Effect::mainFileEdit(SM, std::move(Reps)); } diff --git a/clang-tools-extra/clangd/refactor/tweaks/RemoveUsingNamespace.cpp b/clang-tools-extra/clangd/refactor/tweaks/RemoveUsingNamespace.cpp index 65111254c44a..d2edde314941 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/RemoveUsingNamespace.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/RemoveUsingNamespace.cpp @@ -126,7 +126,7 @@ bool RemoveUsingNamespace::prepare(const Selection &Inputs) { } Expected<Tweak::Effect> RemoveUsingNamespace::apply(const Selection &Inputs) { - auto &Ctx = Inputs.AST.getASTContext(); + auto &Ctx = Inputs.AST->getASTContext(); auto &SM = Ctx.getSourceManager(); // First, collect *all* using namespace directives that redeclare the same // namespace. @@ -143,7 +143,7 @@ Expected<Tweak::Effect> RemoveUsingNamespace::apply(const Selection &Inputs) { // Collect all references to symbols from the namespace for which we're // removing the directive. std::vector<SourceLocation> IdentsToQualify; - for (auto &D : Inputs.AST.getLocalTopLevelDecls()) { + for (auto &D : Inputs.AST->getLocalTopLevelDecls()) { findExplicitReferences(D, [&](ReferenceLoc Ref) { if (Ref.Qualifier) return; // This reference is already qualified. diff --git a/clang-tools-extra/clangd/refactor/tweaks/SwapIfBranches.cpp b/clang-tools-extra/clangd/refactor/tweaks/SwapIfBranches.cpp index a63b71b392c2..1d57cd5c7132 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/SwapIfBranches.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/SwapIfBranches.cpp @@ -62,8 +62,8 @@ bool SwapIfBranches::prepare(const Selection &Inputs) { } Expected<Tweak::Effect> SwapIfBranches::apply(const Selection &Inputs) { - auto &Ctx = Inputs.AST.getASTContext(); - auto &SrcMgr = Inputs.AST.getSourceManager(); + auto &Ctx = Inputs.AST->getASTContext(); + auto &SrcMgr = Inputs.AST->getSourceManager(); auto ThenRng = toHalfOpenFileRange(SrcMgr, Ctx.getLangOpts(), If->getThen()->getSourceRange()); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits