Skip to content

Commit

Permalink
Improve error reporting in chip-tool when the wrong quotes are used. (#…
Browse files Browse the repository at this point in the history
…24821)

* Improve error reporting in chip-tool when the wrong quotes are used.

In interactive mode, arguments are delimited by single quotes.  If our argument
init fails, and we have arguments that include mismatched double quotes, there's
a good chance the wrong quotes were used in the command, and we should log that.

* Address review comment.
  • Loading branch information
bzbarsky-apple authored and pull[bot] committed Mar 5, 2024
1 parent 2e53fdf commit 1705924
Showing 1 changed file with 33 additions and 0 deletions.
33 changes: 33 additions & 0 deletions examples/chip-tool/commands/common/Commands.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,35 @@ std::vector<std::string> GetArgumentsFromJson(Command * command, Json::Value & v
return args;
};

// Check for arguments with a starting '"' but no ending '"': those
// would indicate that people are using double-quoting, not single
// quoting, on arguments with spaces.
static void DetectAndLogMismatchedDoubleQuotes(int argc, char ** argv)
{
for (int curArg = 0; curArg < argc; ++curArg)
{
char * arg = argv[curArg];
if (!arg)
{
continue;
}

auto len = strlen(arg);
if (len == 0)
{
continue;
}

if (arg[0] == '"' && arg[len - 1] != '"')
{
ChipLogError(chipTool,
"Mismatched '\"' detected in argument: '%s'. Use single quotes to delimit arguments with spaces "
"in them: 'x y', not \"x y\".",
arg);
}
}
}

} // namespace

void Commands::Register(const char * clusterName, commands_list commandsList)
Expand Down Expand Up @@ -217,6 +246,10 @@ CHIP_ERROR Commands::RunCommand(int argc, char ** argv, bool interactive)
int argumentsPosition = isGlobalCommand ? 4 : 3;
if (!command->InitArguments(argc - argumentsPosition, &argv[argumentsPosition]))
{
if (interactive)
{
DetectAndLogMismatchedDoubleQuotes(argc - argumentsPosition, &argv[argumentsPosition]);
}
ShowCommand(argv[0], argv[1], command);
return CHIP_ERROR_INVALID_ARGUMENT;
}
Expand Down

0 comments on commit 1705924

Please sign in to comment.