analyzer: respect GCC_COLORS in out-of-bounds diagrams [PR114588]
gcc/analyzer/ChangeLog: PR analyzer/114588 * access-diagram.cc (access_diagram_impl::access_diagram_impl): Replace hardcoded colors for valid_style and invalid_style with calls to text_art::get_style_from_color_cap_name. gcc/ChangeLog: PR analyzer/114588 * diagnostic-color.cc (color_dict): Add "valid" and "invalid" as color capability names. * doc/invoke.texi: Document them in description of GCC_COLORS. * text-art/style.cc: Include "diagnostic-color.h". (text_art::get_style_from_color_cap_name): New. * text-art/types.h (get_style_from_color_cap_name): New decl. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
This commit is contained in:
parent
75b49c0e90
commit
4b02dd48f5
5 changed files with 33 additions and 7 deletions
|
@ -2059,14 +2059,10 @@ public:
|
||||||
|
|
||||||
/* Register painting styles. */
|
/* Register painting styles. */
|
||||||
{
|
{
|
||||||
style valid_style;
|
style valid_style (get_style_from_color_cap_name ("valid"));
|
||||||
valid_style.m_fg_color = style::named_color::GREEN;
|
|
||||||
valid_style.m_bold = true;
|
|
||||||
m_valid_style_id = m_sm.get_or_create_id (valid_style);
|
m_valid_style_id = m_sm.get_or_create_id (valid_style);
|
||||||
|
|
||||||
style invalid_style;
|
style invalid_style (get_style_from_color_cap_name ("invalid"));
|
||||||
invalid_style.m_fg_color = style::named_color::RED;
|
|
||||||
invalid_style.m_bold = true;
|
|
||||||
m_invalid_style_id = m_sm.get_or_create_id (invalid_style);
|
m_invalid_style_id = m_sm.get_or_create_id (invalid_style);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -101,6 +101,8 @@ static struct color_cap color_dict[] =
|
||||||
{ "diff-delete", SGR_SEQ (COLOR_FG_RED), 11, false },
|
{ "diff-delete", SGR_SEQ (COLOR_FG_RED), 11, false },
|
||||||
{ "diff-insert", SGR_SEQ (COLOR_FG_GREEN), 11, false },
|
{ "diff-insert", SGR_SEQ (COLOR_FG_GREEN), 11, false },
|
||||||
{ "type-diff", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_GREEN), 9, false },
|
{ "type-diff", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_GREEN), 9, false },
|
||||||
|
{ "valid", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_GREEN), 5, false },
|
||||||
|
{ "invalid", SGR_SEQ (COLOR_BOLD COLOR_SEPARATOR COLOR_FG_RED), 7, false },
|
||||||
{ NULL, NULL, 0, false }
|
{ NULL, NULL, 0, false }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -5244,7 +5244,7 @@ The default @env{GCC_COLORS} is
|
||||||
error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
|
error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\
|
||||||
quote=01:path=01;36:fixit-insert=32:fixit-delete=31:\
|
quote=01:path=01;36:fixit-insert=32:fixit-delete=31:\
|
||||||
diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
|
diff-filename=01:diff-hunk=32:diff-delete=31:diff-insert=32:\
|
||||||
type-diff=01;32:fnname=01;32:targs=35
|
type-diff=01;32:fnname=01;32:targs=35:valid=01;31:invalid=01;32
|
||||||
@end smallexample
|
@end smallexample
|
||||||
@noindent
|
@noindent
|
||||||
where @samp{01;31} is bold red, @samp{01;35} is bold magenta,
|
where @samp{01;31} is bold red, @samp{01;35} is bold magenta,
|
||||||
|
@ -5327,6 +5327,14 @@ SGR substring for inserted lines within generated patches.
|
||||||
@item type-diff=
|
@item type-diff=
|
||||||
SGR substring for highlighting mismatching types within template
|
SGR substring for highlighting mismatching types within template
|
||||||
arguments in the C++ frontend.
|
arguments in the C++ frontend.
|
||||||
|
|
||||||
|
@vindex valid GCC_COLORS @r{capability}
|
||||||
|
@item valid=
|
||||||
|
SGR substring for highlighting valid elements within text art diagrams.
|
||||||
|
|
||||||
|
@vindex invalid GCC_COLORS @r{capability}
|
||||||
|
@item invalid=
|
||||||
|
SGR substring for highlighting invalid elements within text art diagrams.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@opindex fdiagnostics-urls
|
@opindex fdiagnostics-urls
|
||||||
|
|
|
@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see
|
||||||
#include "text-art/selftests.h"
|
#include "text-art/selftests.h"
|
||||||
#include "text-art/types.h"
|
#include "text-art/types.h"
|
||||||
#include "color-macros.h"
|
#include "color-macros.h"
|
||||||
|
#include "diagnostic-color.h"
|
||||||
|
|
||||||
using namespace text_art;
|
using namespace text_art;
|
||||||
|
|
||||||
|
@ -256,6 +257,23 @@ style::print_changes (pretty_printer *pp,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Look up the current SGR codes for a color capability NAME
|
||||||
|
(from GCC_COLORS or the defaults), and convert them to
|
||||||
|
a text_art::style. */
|
||||||
|
|
||||||
|
style
|
||||||
|
text_art::get_style_from_color_cap_name (const char *name)
|
||||||
|
{
|
||||||
|
const char *sgr_codes = colorize_start (true, name);
|
||||||
|
gcc_assert (sgr_codes);
|
||||||
|
|
||||||
|
/* Parse the sgr codes. We expect the resulting styled_string to be
|
||||||
|
empty; we're interested in the final style created during parsing. */
|
||||||
|
style_manager sm;
|
||||||
|
styled_string styled_str (sm, sgr_codes);
|
||||||
|
return sm.get_style (sm.get_num_styles () - 1);
|
||||||
|
}
|
||||||
|
|
||||||
/* class text_art::style_manager. */
|
/* class text_art::style_manager. */
|
||||||
|
|
||||||
style_manager::style_manager ()
|
style_manager::style_manager ()
|
||||||
|
|
|
@ -332,6 +332,8 @@ struct style
|
||||||
std::vector<cppchar_t> m_url; // empty = no URL
|
std::vector<cppchar_t> m_url; // empty = no URL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern style get_style_from_color_cap_name (const char *name);
|
||||||
|
|
||||||
/* A class to keep track of all the styles in use in a drawing, so that
|
/* A class to keep track of all the styles in use in a drawing, so that
|
||||||
we can refer to them via the compact style::id_t type, rather than
|
we can refer to them via the compact style::id_t type, rather than
|
||||||
via e.g. pointers. */
|
via e.g. pointers. */
|
||||||
|
|
Loading…
Add table
Reference in a new issue