forked from OSchip/llvm-project
Don't print two errors for unknown commands.
Summary: We always print two error messages when we hit an unknown command. As the function `CommandInterpreter::HandleCommand` that prints the second error message unconditionally called the `CommandInterpreter::ResolveCommandImpl` before (which prints the first error message), we can just remove that second error message. Fixes https://bugs.llvm.org/show_bug.cgi?id=38312 Reviewers: labath Reviewed By: labath Subscribers: labath, lldb-commits Differential Revision: https://reviews.llvm.org/D49831 llvm-svn: 338040
This commit is contained in:
parent
4dd7558fab
commit
6fcc7d703b
|
@ -0,0 +1 @@
|
|||
cmdline
|
|
@ -0,0 +1,39 @@
|
|||
"""
|
||||
Test how lldb reacts to wrong commands
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import os
|
||||
import time
|
||||
import lldb
|
||||
from lldbsuite.test.decorators import *
|
||||
from lldbsuite.test.lldbtest import *
|
||||
from lldbsuite.test import lldbutil
|
||||
|
||||
class UnknownCommandTestCase(TestBase):
|
||||
|
||||
mydir = TestBase.compute_mydir(__file__)
|
||||
|
||||
@no_debug_info_test
|
||||
def test_ambiguous_command(self):
|
||||
command_interpreter = self.dbg.GetCommandInterpreter()
|
||||
self.assertTrue(command_interpreter, VALID_COMMAND_INTERPRETER)
|
||||
result = lldb.SBCommandReturnObject()
|
||||
|
||||
command_interpreter.HandleCommand("g", result)
|
||||
self.assertFalse(result.Succeeded())
|
||||
self.assertRegexpMatches(result.GetError(), "Ambiguous command 'g'. Possible matches:")
|
||||
self.assertRegexpMatches(result.GetError(), "gui")
|
||||
self.assertRegexpMatches(result.GetError(), "gdb-remote")
|
||||
# FIXME: Somehow we get 'gui' and 'gdb-remote' twice in the output.
|
||||
|
||||
@no_debug_info_test
|
||||
def test_unknown_command(self):
|
||||
command_interpreter = self.dbg.GetCommandInterpreter()
|
||||
self.assertTrue(command_interpreter, VALID_COMMAND_INTERPRETER)
|
||||
result = lldb.SBCommandReturnObject()
|
||||
|
||||
command_interpreter.HandleCommand("qbert", result)
|
||||
self.assertFalse(result.Succeeded())
|
||||
self.assertEquals(result.GetError(), "error: 'qbert' is not a valid command.\n")
|
|
@ -1693,33 +1693,6 @@ bool CommandInterpreter::HandleCommand(const char *command_line,
|
|||
remainder.c_str());
|
||||
|
||||
cmd_obj->Execute(remainder.c_str(), result);
|
||||
} else {
|
||||
// We didn't find the first command object, so complete the first argument.
|
||||
Args command_args(command_string);
|
||||
StringList matches;
|
||||
unsigned cursor_char_position = strlen(command_args.GetArgumentAtIndex(0));
|
||||
CompletionRequest request(command_line, cursor_char_position, 0, -1,
|
||||
matches);
|
||||
int num_matches = HandleCompletionMatches(request);
|
||||
|
||||
if (num_matches > 0) {
|
||||
std::string error_msg;
|
||||
error_msg.assign("ambiguous command '");
|
||||
error_msg.append(command_args.GetArgumentAtIndex(0));
|
||||
error_msg.append("'.");
|
||||
|
||||
error_msg.append(" Possible completions:");
|
||||
for (int i = 0; i < num_matches; i++) {
|
||||
error_msg.append("\n\t");
|
||||
error_msg.append(matches.GetStringAtIndex(i));
|
||||
}
|
||||
error_msg.append("\n");
|
||||
result.AppendRawError(error_msg.c_str());
|
||||
} else
|
||||
result.AppendErrorWithFormat("Unrecognized command '%s'.\n",
|
||||
command_args.GetArgumentAtIndex(0));
|
||||
|
||||
result.SetStatus(eReturnStatusFailed);
|
||||
}
|
||||
|
||||
if (log)
|
||||
|
|
Loading…
Reference in New Issue