From 2ffe0809cb3e9a49387a4657dea65a287b377617 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Fri, 19 Aug 2016 21:18:05 +0000 Subject: Reimplement removal fix-it hints in terms of replace This patch eliminates class fixit_remove, reimplementing rich_location::add_fixit_remove in terms of replacement with the empty string. Deleting the removal subclass simplifies fixit-handling code, as we only have two concrete fixit_hint subclasses to deal with, rather than three. The patch also fixes some problems in diagnostic-show-locus.c for situations where a replacement fix-it has a different range to the range of the diagnostic, by unifying the drawing of the two kinds of fixits. For example, this: foo = bar.field; ^ m_field becomes: foo = bar.field; ^ ----- m_field showing the range to be replaced. gcc/ChangeLog: * diagnostic-show-locus.c (layout::annotation_line_showed_range_p): New method. (layout::print_any_fixits): Remove case fixit_hint::REMOVE. Reimplement case fixit_hint::REPLACE to cover removals, and replacements where the range of the replacement isn't one of the ranges in the rich_location. (test_one_liner_fixit_replace): Likewise. (selftest::test_one_liner_fixit_replace_non_equal_range): New function. (selftest::test_one_liner_fixit_replace_equal_secondary_range): New function. (selftest::test_diagnostic_show_locus_one_liner): Call the new functions. * diagnostic.c (print_parseable_fixits): Remove case fixit_hint::REMOVE. libcpp/ChangeLog: * include/line-map.h (fixit_hint::kind): Delete REPLACE. (class fixit_remove): Delete. * line-map.c (rich_location::add_fixit_remove): Reimplement by calling add_fixit_replace with an empty string. (fixit_remove::fixit_remove): Delete. (fixit_remove::affects_line_p): Delete. From-SVN: r239632 --- libcpp/line-map.c | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) (limited to 'libcpp/line-map.c') diff --git a/libcpp/line-map.c b/libcpp/line-map.c index 141af9d..3890eff 100644 --- a/libcpp/line-map.c +++ b/libcpp/line-map.c @@ -2086,8 +2086,7 @@ rich_location::add_fixit_insert (source_location where, void rich_location::add_fixit_remove (source_range src_range) { - linemap_assert (m_num_fixit_hints < MAX_FIXIT_HINTS); - m_fixit_hints[m_num_fixit_hints++] = new fixit_remove (src_range); + add_fixit_replace (src_range, ""); } /* Add a fixit-hint, suggesting replacement of the content at @@ -2130,21 +2129,6 @@ fixit_insert::affects_line_p (const char *file, int line) return false; } -/* class fixit_remove. */ - -fixit_remove::fixit_remove (source_range src_range) -: m_src_range (src_range) -{ -} - -/* Implementation of fixit_hint::affects_line_p for fixit_remove. */ - -bool -fixit_remove::affects_line_p (const char *file, int line) -{ - return m_src_range.intersects_line_p (file, line); -} - /* class fixit_replace. */ fixit_replace::fixit_replace (source_range src_range, -- cgit v1.1