[Lldb-commits] [PATCH] D48465: Added initial code completion support for the `expr` command
Adrian Prantl via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Thu Jun 21 17:21:22 PDT 2018
aprantl added a comment.
Very nice!
================
Comment at: include/lldb/Expression/ExpressionParser.h:52
+ virtual bool Complete(StringList &matches, unsigned line, unsigned pos,
+ unsigned typed_pos) = 0;
----------------
Could you add a Doxygen comment?
================
Comment at: source/Commands/CommandObjectExpression.cpp:333
+ // Skip any leading whitespace.
+ while (!cmd.empty() && cmd.front() == ' ') {
+ cmd = cmd.drop_front();
----------------
Even if it is less efficient, a version of this using cmd.split(' ') or a loop over cmd.ltrim(' ') would probably be much shorter and potentially easier to read. There is also llvm::StringExtras::getToken().
================
Comment at: source/Commands/CommandObjectExpression.cpp:392
+
+ if (target) {
+ std::string arg;
----------------
Could you convert this to an early exit?
```
if (!target)
return 0;
```
================
Comment at: source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp:590
+ // to completing the current token.
+ StringRef to_remove = cmd;
+ while (!to_remove.empty() && !IsTokenSeparator(to_remove.back())) {
----------------
Should this perhaps use some form of StringRef::dropWhile or similar?
(https://llvm.org/doxygen/classllvm_1_1StringRef.html#aed7897c6ee084440516a7bb5e79a2094)
================
Comment at: source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp:696
+ // If we have a function decl that has no arguments we want to
+ // complete the empty brackets for the user. If the function has
+ // arguments, we at least complete the opening bracket.
----------------
s/brackets/parentheses/
================
Comment at: source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp:699
+ if (const FunctionDecl *F = dyn_cast<FunctionDecl>(D)) {
+ if (F->getNumParams() == 0) {
+ ToInsert += "()";
----------------
no need for curly braces here
================
Comment at: source/Plugins/ExpressionParser/Clang/ClangExpressionParser.h:172
+ /// The number of parsing errors.
+ //-------------------------------------------------------------------
+ unsigned ParseInternal(DiagnosticManager &diagnostic_manager,
----------------
Perhaps return an llvm::Error instead of an unsigned?
================
Comment at: source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp:629
+ column = 0;
+
+ assert(abs_pos <= code.size() && "Absolute position outside code string?");
----------------
You could also slice the StringRef at abs_pos, ::count('\n'), set column to slice.size-rfind('\n'). Your implementation is slightly faster, tough.
================
Comment at: source/Plugins/ExpressionParser/Clang/ClangUserExpression.cpp:659
+ lldb::LanguageType lang_type = lldb::LanguageType::eLanguageTypeUnknown;
+ if (auto new_lang = GetLanguageForExpr(diagnostic_manager, exe_ctx)) {
+ lang_type = new_lang.getValue();
----------------
We don't typically put single statements in curly braces in LLVM coding style.
https://reviews.llvm.org/D48465
More information about the lldb-commits
mailing list