https://github.com/aadanen updated https://github.com/llvm/llvm-project/pull/150348
>From 4e24cb20efa22e364d41026ae40aec470ff786aa Mon Sep 17 00:00:00 2001 From: Aaron Danen <aaron.da...@gmail.com> Date: Wed, 23 Jul 2025 18:01:14 -0700 Subject: [PATCH 1/6] added undo to docs in same format as %quit --- clang/docs/ClangRepl.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/clang/docs/ClangRepl.rst b/clang/docs/ClangRepl.rst index 5399036c123fb..9ef82df28ee43 100644 --- a/clang/docs/ClangRepl.rst +++ b/clang/docs/ClangRepl.rst @@ -197,6 +197,13 @@ Comments: clang-repl> // Comments in Clang-Repl clang-repl> /* Comments in Clang-Repl */ +Undo: +===== + +.. code-block:: text + + clang-repl>%undo + Closure or Termination: ======================= >From 752e4906b633b1343a52338027fdc0a6e36d6288 Mon Sep 17 00:00:00 2001 From: Aaron Danen <aaron.da...@gmail.com> Date: Sat, 26 Jul 2025 10:01:30 -0700 Subject: [PATCH 2/6] implemented %help --- clang/tools/clang-repl/ClangRepl.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/clang/tools/clang-repl/ClangRepl.cpp b/clang/tools/clang-repl/ClangRepl.cpp index 54b27782d3db3..c347b45306031 100644 --- a/clang/tools/clang-repl/ClangRepl.cpp +++ b/clang/tools/clang-repl/ClangRepl.cpp @@ -185,7 +185,7 @@ struct ReplListCompleter { clang::Interpreter &MainInterp; ReplListCompleter(clang::IncrementalCompilerBuilder &CB, clang::Interpreter &Interp) - : CB(CB), MainInterp(Interp){}; + : CB(CB), MainInterp(Interp) {}; std::vector<llvm::LineEditor::Completion> operator()(llvm::StringRef Buffer, size_t Pos) const; @@ -370,6 +370,8 @@ int main(int argc, const char **argv) { if (Input == R"(%undo)") { if (auto Err = Interp->Undo()) llvm::logAllUnhandledErrors(std::move(Err), llvm::errs(), "error: "); + } else if (Input == R"(%help)") { + printf("clang-repl commands: { %%undo, %%quit }\n"); } else if (Input.rfind("%lib ", 0) == 0) { if (auto Err = Interp->LoadDynamicLibrary(Input.data() + 5)) llvm::logAllUnhandledErrors(std::move(Err), llvm::errs(), "error: "); >From 99e2421447d730e40513ed799ece85c73b6987ce Mon Sep 17 00:00:00 2001 From: Aaron Danen <aaron.da...@gmail.com> Date: Sat, 26 Jul 2025 10:53:39 -0700 Subject: [PATCH 3/6] blurb about %help on startup. better %help format --- clang/tools/clang-repl/ClangRepl.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/clang/tools/clang-repl/ClangRepl.cpp b/clang/tools/clang-repl/ClangRepl.cpp index c347b45306031..540253e377d98 100644 --- a/clang/tools/clang-repl/ClangRepl.cpp +++ b/clang/tools/clang-repl/ClangRepl.cpp @@ -347,7 +347,11 @@ int main(int argc, const char **argv) { } } + const char *percent_commands = "%help\tlist clang-repl %commands\n" + "%undo\tundo the previous input\n" + "%quit\texit clang-repl\n"; if (OptInputs.empty()) { + printf("%%help for list of clang-repl commands\n"); llvm::LineEditor LE("clang-repl"); std::string Input; LE.setListCompleter(ReplListCompleter(CB, *Interp)); @@ -371,7 +375,7 @@ int main(int argc, const char **argv) { if (auto Err = Interp->Undo()) llvm::logAllUnhandledErrors(std::move(Err), llvm::errs(), "error: "); } else if (Input == R"(%help)") { - printf("clang-repl commands: { %%undo, %%quit }\n"); + printf("%s\n", percent_commands); } else if (Input.rfind("%lib ", 0) == 0) { if (auto Err = Interp->LoadDynamicLibrary(Input.data() + 5)) llvm::logAllUnhandledErrors(std::move(Err), llvm::errs(), "error: "); >From f1f6d9c4a951d02d65abf306b069d3102f91481e Mon Sep 17 00:00:00 2001 From: Aaron Danen <aaron.da...@gmail.com> Date: Sat, 26 Jul 2025 10:57:41 -0700 Subject: [PATCH 4/6] small change to opener message --- clang/tools/clang-repl/ClangRepl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/tools/clang-repl/ClangRepl.cpp b/clang/tools/clang-repl/ClangRepl.cpp index 540253e377d98..c4718b208b586 100644 --- a/clang/tools/clang-repl/ClangRepl.cpp +++ b/clang/tools/clang-repl/ClangRepl.cpp @@ -351,7 +351,7 @@ int main(int argc, const char **argv) { "%undo\tundo the previous input\n" "%quit\texit clang-repl\n"; if (OptInputs.empty()) { - printf("%%help for list of clang-repl commands\n"); + printf("type %%help to list clang-repl commands\n"); llvm::LineEditor LE("clang-repl"); std::string Input; LE.setListCompleter(ReplListCompleter(CB, *Interp)); >From 1cd23df9a039595dbced49dd222065b0d5f7e6e2 Mon Sep 17 00:00:00 2001 From: Aaron Danen <aaron.da...@gmail.com> Date: Mon, 28 Jul 2025 10:39:46 -0700 Subject: [PATCH 5/6] added %help to docs --- clang/docs/ClangRepl.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/clang/docs/ClangRepl.rst b/clang/docs/ClangRepl.rst index 9ef82df28ee43..e2b33a01b15ed 100644 --- a/clang/docs/ClangRepl.rst +++ b/clang/docs/ClangRepl.rst @@ -197,6 +197,13 @@ Comments: clang-repl> // Comments in Clang-Repl clang-repl> /* Comments in Clang-Repl */ +Help: +===== + +.. code-block:: text + + clang-repl>%help + Undo: ===== >From cde1b98e47161b8645af29cceb2e057b2e937c66 Mon Sep 17 00:00:00 2001 From: Aaron Danen <aaron.da...@gmail.com> Date: Mon, 28 Jul 2025 16:48:08 -0700 Subject: [PATCH 6/6] got rid of printf(), added bad % command handling --- clang/tools/clang-repl/ClangRepl.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/clang/tools/clang-repl/ClangRepl.cpp b/clang/tools/clang-repl/ClangRepl.cpp index c4718b208b586..e68aabcd43e0f 100644 --- a/clang/tools/clang-repl/ClangRepl.cpp +++ b/clang/tools/clang-repl/ClangRepl.cpp @@ -28,6 +28,7 @@ #include "llvm/Support/ManagedStatic.h" // llvm_shutdown #include "llvm/Support/Signals.h" #include "llvm/Support/TargetSelect.h" +#include "llvm/Support/raw_ostream.h" #include "llvm/TargetParser/Host.h" #include <optional> @@ -347,11 +348,15 @@ int main(int argc, const char **argv) { } } - const char *percent_commands = "%help\tlist clang-repl %commands\n" - "%undo\tundo the previous input\n" - "%quit\texit clang-repl\n"; + // if we add more % commands, there should be better architecture than this + const char *help_output = "%help\tlist clang-repl %commands\n" + "%undo\tundo the previous input\n" + "%quit\texit clang-repl\n"; + const char *help_prompt = "type %help to list clang-repl commands\n"; + + llvm::raw_ostream &OS = llvm::outs(); if (OptInputs.empty()) { - printf("type %%help to list clang-repl commands\n"); + OS << help_prompt; llvm::LineEditor LE("clang-repl"); std::string Input; LE.setListCompleter(ReplListCompleter(CB, *Interp)); @@ -375,7 +380,9 @@ int main(int argc, const char **argv) { if (auto Err = Interp->Undo()) llvm::logAllUnhandledErrors(std::move(Err), llvm::errs(), "error: "); } else if (Input == R"(%help)") { - printf("%s\n", percent_commands); + OS << help_output << '\n'; + } else if (Input[0] == '%') { // make sure this is evaluated last + OS << "Invalid % command: \"" << Input << "\". " << help_prompt; } else if (Input.rfind("%lib ", 0) == 0) { if (auto Err = Interp->LoadDynamicLibrary(Input.data() + 5)) llvm::logAllUnhandledErrors(std::move(Err), llvm::errs(), "error: "); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits