diagnostics: check the styling

Enable checking of styles even when libtextstyle is not installed.

* src/getargs.h, src/getargs.c (style_debug): New.
(getargs_colors): Set it when --style=debug.
* src/complain.c (begin_use_class, end_use_class): Use it.
* tests/diagnostics.at: New.
This commit is contained in:
Akim Demaille
2019-04-20 17:17:48 +02:00
parent deec7ca65c
commit 520d474ec6
6 changed files with 98 additions and 6 deletions

View File

@@ -72,8 +72,13 @@ begin_use_class (const char *s, FILE *out)
{ {
if (out == stderr) if (out == stderr)
{ {
styled_ostream_begin_use_class (errstream, s); if (style_debug)
styled_ostream_flush_to_current_style (errstream); fprintf (out, "<%s>", s);
else
{
styled_ostream_begin_use_class (errstream, s);
styled_ostream_flush_to_current_style (errstream);
}
} }
} }
@@ -82,8 +87,13 @@ end_use_class (const char *s, FILE *out)
{ {
if (out == stderr) if (out == stderr)
{ {
styled_ostream_end_use_class (errstream, s); if (style_debug)
styled_ostream_flush_to_current_style (errstream); fprintf (out, "</%s>", s);
else
{
styled_ostream_end_use_class (errstream, s);
styled_ostream_flush_to_current_style (errstream);
}
} }
} }

View File

@@ -45,6 +45,7 @@ bool no_lines_flag = false;
bool token_table_flag = false; bool token_table_flag = false;
location yacc_loc = EMPTY_LOCATION_INIT; location yacc_loc = EMPTY_LOCATION_INIT;
bool update_flag = false; /* for -u */ bool update_flag = false; /* for -u */
bool style_debug = false; /* --style=debug. */
bool nondeterministic_parser = false; bool nondeterministic_parser = false;
bool glr_parser = false; bool glr_parser = false;
@@ -595,7 +596,13 @@ getargs_colors (int argc, char *argv[])
if (STRPREFIX_LIT ("--color=", arg)) if (STRPREFIX_LIT ("--color=", arg))
handle_color_option (arg + strlen ("--color=")); handle_color_option (arg + strlen ("--color="));
else if (STRPREFIX_LIT ("--style=", arg)) else if (STRPREFIX_LIT ("--style=", arg))
handle_style_option (arg + strlen ("--style=")); {
const char *style = arg + strlen ("--style=");
if (STREQ (style, "debug"))
style_debug = true;
else
handle_style_option (style);
}
} }
complain_init_color (); complain_init_color ();
} }

View File

@@ -41,7 +41,7 @@ extern bool no_lines_flag; /* for -l */
extern bool token_table_flag; /* for -k */ extern bool token_table_flag; /* for -k */
extern location yacc_loc; /* for -y */ extern location yacc_loc; /* for -y */
extern bool update_flag; /* for -u */ extern bool update_flag; /* for -u */
extern bool style_debug; /* --style=debug. */
/* GLR_PARSER is true if the input file says to use the GLR /* GLR_PARSER is true if the input file says to use the GLR
(Generalized LR) parser, and to output some additional information (Generalized LR) parser, and to output some additional information
used by the GLR algorithm. */ used by the GLR algorithm. */

71
tests/diagnostics.at Normal file
View File

@@ -0,0 +1,71 @@
# Checking diagnotics. -*- Autotest -*-
# Copyright (C) 2019 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
AT_BANNER([[Diagnostics.]])
# AT_TEST([TITLE], [GRAMMAR], [OUTPUT-WITH-STYLE])
m4_pushdef([AT_TEST],
[
AT_SETUP([$1])
AT_KEYWORDS([diagnostics])
AT_BISON_OPTION_PUSHDEFS
AT_DATA_GRAMMAR([[input.y]], [$2])
AT_DATA([experr], [$3])
AT_BISON_CHECK([-fcaret --style=debug -Wother input.y], [], [], [experr])
# When no style, same messages, except the style.
AT_CHECK([perl -pi -e 's{</?\w+>}{}g' experr])
AT_BISON_CHECK([-fcaret -Wother input.y], [], [], [experr])
AT_BISON_OPTION_POPDEFS
AT_CLEANUP
])
## ---------- ##
## Warnings. ##
## ---------- ##
AT_TEST([[Warnings]],
[[%token FOO FOO FOO
%token FOO FOO FOO
%%
exp:;
]],
[[input.y:9.12-14: <warning>warning:</warning> symbol FOO redeclared [<warning>-Wother</warning>]
%token FOO <warning>FOO</warning> FOO
<warning>^~~</warning>
input.y:9.16-18: <warning>warning:</warning> symbol FOO redeclared [<warning>-Wother</warning>]
%token FOO FOO <warning>FOO</warning>
<warning>^~~</warning>
input.y:10.8-10: <warning>warning:</warning> symbol FOO redeclared [<warning>-Wother</warning>]
%token <warning>FOO</warning> FOO FOO
<warning>^~~</warning>
input.y:10.13-15: <warning>warning:</warning> symbol FOO redeclared [<warning>-Wother</warning>]
%token FOO <warning>FOO</warning> FOO
<warning>^~~</warning>
input.y:10.18-20: <warning>warning:</warning> symbol FOO redeclared [<warning>-Wother</warning>]
%token FOO FOO <warning>FOO</warning>
<warning>^~~</warning>
]])
m4_popdef([AT_TEST])

View File

@@ -48,6 +48,7 @@ TESTSUITE_AT = \
%D%/calc.at \ %D%/calc.at \
%D%/conflicts.at \ %D%/conflicts.at \
%D%/cxx-type.at \ %D%/cxx-type.at \
%D%/diagnostics.at \
%D%/existing.at \ %D%/existing.at \
%D%/glr-regression.at \ %D%/glr-regression.at \
%D%/headers.at \ %D%/headers.at \

View File

@@ -26,6 +26,9 @@ m4_include([named-refs.at])
# Output file names. # Output file names.
m4_include([output.at]) m4_include([output.at])
# Diagnostics.
m4_include([diagnostics.at])
# Skeleton support. # Skeleton support.
m4_include([skeletons.at]) m4_include([skeletons.at])