ilya-biryukov added a comment. Definitely like the idea of the tool. The main complication seems to be parsing of user input at this point. I suggest we explore an option proposed before, that is reusing the LLVM command-line parser (see inline comment too). If that turns out to be much work, we could explore rolling out a simple parser for commands on our own.
================ Comment at: clang-tools-extra/clangd/dexplorer/Dexplorer.cpp:39 + +// FIXME(kbobyrev): Make this an actual REPL: probably use LLVM Command Line +// library for parsing flags and arguments. ---------------- Maybe we could expose `CommandLineParser` from `llvm/lib/Support/CommandLine.cpp` as a public API and use it here? Not sure if there are any obstacles to doing so or how much work is it, though. E.g. `cl::opt` seem to rely on being registered in the global parser and I'm not sure if there's an easy way out of it. ================ Comment at: clang-tools-extra/clangd/dexplorer/Dexplorer.cpp:147 + + // FIXME(kbobyrev): Wrap time measurements into something like + // measureTime(Function, Arguments...). ---------------- +1 to this FIXME. Something like: ``` template <class Func> auto reportTime(StringRef Name, Func F) -> decltype(F()) { auto Result = F(); llvm::outs() << Name << " took " << ... return Result; } ``` The code calling this API would be quite readable: ``` auto Index = reportTime("Build stage", []() { return buildStaticIndex(...); }); ``` https://reviews.llvm.org/D51628 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits