diff --git a/clang-tools-extra/clangd/ClangdLSPServer.cpp b/clang-tools-extra/clangd/ClangdLSPServer.cpp --- a/clang-tools-extra/clangd/ClangdLSPServer.cpp +++ b/clang-tools-extra/clangd/ClangdLSPServer.cpp @@ -68,14 +68,7 @@ Range Selection) { CodeAction CA; CA.title = T.Title; - switch (T.Intent) { - case Tweak::Refactor: - CA.kind = std::string(CodeAction::REFACTOR_KIND); - break; - case Tweak::Info: - CA.kind = std::string(CodeAction::INFO_KIND); - break; - } + CA.kind = T.Kind.str(); // This tweak may have an expensive second stage, we only run it if the user // actually chooses it in the UI. We reply with a command that would run the // corresponding tweak. diff --git a/clang-tools-extra/clangd/ClangdServer.h b/clang-tools-extra/clangd/ClangdServer.h --- a/clang-tools-extra/clangd/ClangdServer.h +++ b/clang-tools-extra/clangd/ClangdServer.h @@ -288,7 +288,7 @@ struct TweakRef { std::string ID; /// ID to pass for applyTweak. std::string Title; /// A single-line message to show in the UI. - Tweak::Intent Intent; + llvm::StringLiteral Kind; }; /// Enumerate the code tweaks available to the user at a specified point. void enumerateTweaks(PathRef File, Range Sel, diff --git a/clang-tools-extra/clangd/ClangdServer.cpp b/clang-tools-extra/clangd/ClangdServer.cpp --- a/clang-tools-extra/clangd/ClangdServer.cpp +++ b/clang-tools-extra/clangd/ClangdServer.cpp @@ -521,7 +521,7 @@ }; for (const auto &Sel : *Selections) { for (auto &T : prepareTweaks(*Sel, Filter)) { - Res.push_back({T->id(), T->title(), T->intent()}); + Res.push_back({T->id(), T->title(), T->kind()}); PreparedTweaks.insert(T->id()); TweakAvailable.record(1, T->id()); } diff --git a/clang-tools-extra/clangd/refactor/Tweak.h b/clang-tools-extra/clangd/refactor/Tweak.h --- a/clang-tools-extra/clangd/refactor/Tweak.h +++ b/clang-tools-extra/clangd/refactor/Tweak.h @@ -67,13 +67,6 @@ // FIXME: provide a way to get sources and ASTs for other files. }; - /// Output of a tweak. - enum Intent { - /// Apply changes that preserve the behavior of the code. - Refactor, - /// Provide information to the user. - Info, - }; struct Effect { /// A message to be displayed to the user. llvm::Optional ShowMessage; @@ -120,7 +113,7 @@ virtual std::string title() const = 0; /// Describes what kind of action this is. /// EXPECTS: prepare() was called and returned true. - virtual Intent intent() const = 0; + virtual llvm::StringLiteral kind() const = 0; /// Is this a 'hidden' tweak, which are off by default. virtual bool hidden() const { return false; } }; diff --git a/clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp b/clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp @@ -38,7 +38,9 @@ bool prepare(const Selection &Inputs) override; Expected apply(const Selection &Inputs) override; std::string title() const override; - Intent intent() const override { return Refactor; } + llvm::StringLiteral kind() const override { + return CodeAction::REFACTOR_KIND; + } private: // The qualifier to remove. Set by prepare(). diff --git a/clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp b/clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/AnnotateHighlightings.cpp @@ -28,7 +28,9 @@ Expected apply(const Selection &Inputs) override; std::string title() const override { return "Annotate highlighting tokens"; } - Intent intent() const override { return Refactor; } + llvm::StringLiteral kind() const override { + return CodeAction::REFACTOR_KIND; + } bool hidden() const override { return true; } }; REGISTER_TWEAK(AnnotateHighlightings) diff --git a/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp b/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp @@ -394,7 +394,9 @@ public: const char *id() const override final; - Intent intent() const override { return Intent::Refactor; } + llvm::StringLiteral kind() const override { + return CodeAction::REFACTOR_KIND; + } std::string title() const override { return "Move function body to declaration"; } 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 @@ -356,7 +356,9 @@ const char *id() const override; bool hidden() const override { return false; } - Intent intent() const override { return Intent::Refactor; } + llvm::StringLiteral kind() const override { + return CodeAction::REFACTOR_KIND; + } std::string title() const override { return "Move function body to out-of-line."; } diff --git a/clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp b/clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/DumpAST.cpp @@ -45,7 +45,7 @@ return std::string( llvm::formatv("Dump {0} AST", Node->getNodeKind().asStringRef())); } - Intent intent() const override { return Info; } + llvm::StringLiteral kind() const override { return CodeAction::INFO_KIND; } bool hidden() const override { return true; } private: @@ -91,7 +91,7 @@ return Effect::showMessage(llvm::to_string(Inputs.ASTSelection)); } std::string title() const override { return "Show selection tree"; } - Intent intent() const override { return Info; } + llvm::StringLiteral kind() const override { return CodeAction::INFO_KIND; } bool hidden() const override { return true; } }; REGISTER_TWEAK(ShowSelectionTree) @@ -117,7 +117,7 @@ return Effect::showMessage(Out.str()); } std::string title() const override { return "Dump symbol under the cursor"; } - Intent intent() const override { return Info; } + llvm::StringLiteral kind() const override { return CodeAction::INFO_KIND; } bool hidden() const override { return true; } }; REGISTER_TWEAK(DumpSymbol) @@ -153,7 +153,7 @@ "Show {0} layout", TypeWithKeyword::getTagTypeKindName(Record->getTagKind()))); } - Intent intent() const override { return Info; } + llvm::StringLiteral kind() const override { return CodeAction::INFO_KIND; } // FIXME: this is interesting to most users. However: // - triggering is too broad (e.g. triggers on comments within a class) // - showMessage has inconsistent UX (e.g. newlines are stripped in VSCode) diff --git a/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp b/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/ExpandAutoType.cpp @@ -37,7 +37,9 @@ class ExpandAutoType : public Tweak { public: const char *id() const final; - Intent intent() const override { return Intent::Refactor;} + llvm::StringLiteral kind() const override { + return CodeAction::REFACTOR_KIND; + } bool prepare(const Selection &Inputs) override; Expected apply(const Selection &Inputs) override; std::string title() const override; diff --git a/clang-tools-extra/clangd/refactor/tweaks/ExpandMacro.cpp b/clang-tools-extra/clangd/refactor/tweaks/ExpandMacro.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/ExpandMacro.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/ExpandMacro.cpp @@ -31,7 +31,9 @@ class ExpandMacro : public Tweak { public: const char *id() const override final; - Intent intent() const override { return Intent::Refactor; } + llvm::StringLiteral kind() const override { + return CodeAction::REFACTOR_KIND; + } bool prepare(const Selection &Inputs) override; Expected apply(const Selection &Inputs) override; diff --git a/clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp b/clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp @@ -646,7 +646,9 @@ bool prepare(const Selection &Inputs) override; Expected apply(const Selection &Inputs) override; std::string title() const override { return "Extract to function"; } - Intent intent() const override { return Refactor; } + llvm::StringLiteral kind() const override { + return CodeAction::REFACTOR_KIND; + } private: ExtractionZone ExtZone; diff --git a/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp b/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/ExtractVariable.cpp @@ -438,7 +438,9 @@ std::string title() const override { return "Extract subexpression to variable"; } - Intent intent() const override { return Refactor; } + llvm::StringLiteral kind() const override { + return CodeAction::REFACTOR_KIND; + } private: // the expression to extract diff --git a/clang-tools-extra/clangd/refactor/tweaks/ObjCLocalizeStringLiteral.cpp b/clang-tools-extra/clangd/refactor/tweaks/ObjCLocalizeStringLiteral.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/ObjCLocalizeStringLiteral.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/ObjCLocalizeStringLiteral.cpp @@ -35,7 +35,9 @@ class ObjCLocalizeStringLiteral : public Tweak { public: const char *id() const override final; - Intent intent() const override { return Intent::Refactor; } + llvm::StringLiteral kind() const override { + return CodeAction::REFACTOR_KIND; + } bool prepare(const Selection &Inputs) override; Expected apply(const Selection &Inputs) override; diff --git a/clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp b/clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/PopulateSwitch.cpp @@ -52,7 +52,9 @@ bool prepare(const Selection &Sel) override; Expected apply(const Selection &Sel) override; std::string title() const override { return "Populate switch"; } - Intent intent() const override { return Refactor; } + llvm::StringLiteral kind() const override { + return CodeAction::REFACTOR_KIND; + } private: const DeclContext *DeclCtx = nullptr; diff --git a/clang-tools-extra/clangd/refactor/tweaks/RawStringLiteral.cpp b/clang-tools-extra/clangd/refactor/tweaks/RawStringLiteral.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/RawStringLiteral.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/RawStringLiteral.cpp @@ -41,7 +41,9 @@ bool prepare(const Selection &Inputs) override; Expected apply(const Selection &Inputs) override; std::string title() const override { return "Convert to raw string"; } - Intent intent() const override { return Refactor; } + llvm::StringLiteral kind() const override { + return CodeAction::REFACTOR_KIND; + } private: const clang::StringLiteral *Str = nullptr; diff --git a/clang-tools-extra/clangd/refactor/tweaks/RemoveUsingNamespace.cpp b/clang-tools-extra/clangd/refactor/tweaks/RemoveUsingNamespace.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/RemoveUsingNamespace.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/RemoveUsingNamespace.cpp @@ -39,7 +39,9 @@ bool prepare(const Selection &Inputs) override; Expected apply(const Selection &Inputs) override; std::string title() const override; - Intent intent() const override { return Refactor; } + llvm::StringLiteral kind() const override { + return CodeAction::REFACTOR_KIND; + } private: const UsingDirectiveDecl *TargetDirective = nullptr; diff --git a/clang-tools-extra/clangd/refactor/tweaks/SwapIfBranches.cpp b/clang-tools-extra/clangd/refactor/tweaks/SwapIfBranches.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/SwapIfBranches.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/SwapIfBranches.cpp @@ -39,7 +39,9 @@ bool prepare(const Selection &Inputs) override; Expected apply(const Selection &Inputs) override; std::string title() const override { return "Swap if branches"; } - Intent intent() const override { return Refactor; } + llvm::StringLiteral kind() const override { + return CodeAction::REFACTOR_KIND; + } bool hidden() const override { return true; } private: