Print warning if non-FQN namespace remapping passed (#248)
* More descriptive error messages * Special error message when lexeme not found * Output warning if ns remapping invalid * Output warning is ns remapping is invalid but starts with / * Add index to 'not found' error message * Distinguish between NONE and EOF * Firmer wording to avoid overlap in meaning
This commit is contained in:
parent
95b4147009
commit
e39201d6a5
3 changed files with 24 additions and 3 deletions
|
@ -30,7 +30,7 @@ extern "C"
|
||||||
/// Type of lexeme found by lexical analysis.
|
/// Type of lexeme found by lexical analysis.
|
||||||
typedef enum rcl_lexeme_t
|
typedef enum rcl_lexeme_t
|
||||||
{
|
{
|
||||||
/// Indicates no valid lexeme was found
|
/// Indicates no valid lexeme was found (end of input not reached)
|
||||||
RCL_LEXEME_NONE = 0,
|
RCL_LEXEME_NONE = 0,
|
||||||
/// Indicates end of input has been reached
|
/// Indicates end of input has been reached
|
||||||
RCL_LEXEME_EOF = 1,
|
RCL_LEXEME_EOF = 1,
|
||||||
|
|
|
@ -110,7 +110,8 @@ rcl_parse_arguments(
|
||||||
if (RCL_RET_OK == _rcl_parse_remap_rule(argv[i], allocator, rule)) {
|
if (RCL_RET_OK == _rcl_parse_remap_rule(argv[i], allocator, rule)) {
|
||||||
++(args_impl->num_remap_rules);
|
++(args_impl->num_remap_rules);
|
||||||
} else {
|
} else {
|
||||||
RCUTILS_LOG_DEBUG_NAMED(ROS_PACKAGE_NAME, "arg %d error '%s'", i, rcl_get_error_string());
|
RCUTILS_LOG_DEBUG_NAMED(ROS_PACKAGE_NAME, "arg %d (%s) error '%s'", i, argv[i],
|
||||||
|
rcl_get_error_string());
|
||||||
rcl_reset_error();
|
rcl_reset_error();
|
||||||
args_impl->unparsed_args[args_impl->num_unparsed_args] = i;
|
args_impl->unparsed_args[args_impl->num_unparsed_args] = i;
|
||||||
++(args_impl->num_unparsed_args);
|
++(args_impl->num_unparsed_args);
|
||||||
|
@ -656,6 +657,19 @@ _rcl_parse_remap_namespace_replacement(
|
||||||
}
|
}
|
||||||
ret = _rcl_parse_remap_fully_qualified_namespace(lex_lookahead);
|
ret = _rcl_parse_remap_fully_qualified_namespace(lex_lookahead);
|
||||||
if (RCL_RET_OK != ret) {
|
if (RCL_RET_OK != ret) {
|
||||||
|
if (RCL_RET_INVALID_REMAP_RULE == ret) {
|
||||||
|
// The name didn't start with a leading forward slash
|
||||||
|
RCUTILS_LOG_WARN_NAMED(
|
||||||
|
ROS_PACKAGE_NAME, "Namespace not remapped to a fully qualified name (found: %s)", ns_start);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
// There should be nothing left
|
||||||
|
ret = rcl_lexer_lookahead2_expect(lex_lookahead, RCL_LEXEME_EOF, NULL, NULL);
|
||||||
|
if (RCL_RET_OK != ret) {
|
||||||
|
// The name must have started with a leading forward slash but had an otherwise invalid format
|
||||||
|
RCUTILS_LOG_WARN_NAMED(
|
||||||
|
ROS_PACKAGE_NAME, "Namespace not remapped to a fully qualified name (found: %s)", ns_start);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -222,8 +222,15 @@ rcl_lexer_lookahead2_expect(
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
if (type != lexeme) {
|
if (type != lexeme) {
|
||||||
|
if (RCL_LEXEME_NONE == lexeme || RCL_LEXEME_EOF == lexeme) {
|
||||||
|
RCL_SET_ERROR_MSG_WITH_FORMAT_STRING(
|
||||||
|
buffer->impl->allocator, "Expected lexeme type (%d) not found, search ended at index %lu",
|
||||||
|
type, buffer->impl->text_idx);
|
||||||
|
return RCL_RET_WRONG_LEXEME;
|
||||||
|
}
|
||||||
RCL_SET_ERROR_MSG_WITH_FORMAT_STRING(
|
RCL_SET_ERROR_MSG_WITH_FORMAT_STRING(
|
||||||
buffer->impl->allocator, "Expected %d got %d at %lu", type, lexeme, buffer->impl->text_idx);
|
buffer->impl->allocator, "Expected lexeme type %d, got %d at index %lu", type, lexeme,
|
||||||
|
buffer->impl->text_idx);
|
||||||
return RCL_RET_WRONG_LEXEME;
|
return RCL_RET_WRONG_LEXEME;
|
||||||
}
|
}
|
||||||
return rcl_lexer_lookahead2_accept(buffer, lexeme_text, lexeme_text_length);
|
return rcl_lexer_lookahead2_accept(buffer, lexeme_text, lexeme_text_length);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue