opts: improve option suggestion
In case where we have 2 equally good candidates like -ftrivial-auto-var-init= -Wtrivial-auto-var-init for -ftrivial-auto-var-init, we should take the candidate that has a difference in trailing sign symbol. PR driver/105564 gcc/ChangeLog: * spellcheck.cc (test_find_closest_string): Add new test. * spellcheck.h (class best_match): Prefer a difference in trailing sign symbol.
This commit is contained in:
parent
b18e5d7e5f
commit
ab66fd016d
2 changed files with 30 additions and 3 deletions
|
@ -464,6 +464,15 @@ test_find_closest_string ()
|
|||
ASSERT_STREQ ("DWARF_GNAT_ENCODINGS_ALL",
|
||||
find_closest_string ("DWARF_GNAT_ENCODINGS_all",
|
||||
&candidates));
|
||||
|
||||
/* Example from PR 105564 where option name with missing equal
|
||||
sign should win. */
|
||||
candidates.truncate (0);
|
||||
candidates.safe_push ("-Wtrivial-auto-var-init");
|
||||
candidates.safe_push ("-ftrivial-auto-var-init=");
|
||||
ASSERT_STREQ ("-ftrivial-auto-var-init=",
|
||||
find_closest_string ("-ftrivial-auto-var-init",
|
||||
&candidates));
|
||||
}
|
||||
|
||||
/* Test data for test_metric_conditions. */
|
||||
|
|
|
@ -128,11 +128,29 @@ class best_match
|
|||
|
||||
/* Otherwise, compute the distance and see if the candidate
|
||||
has beaten the previous best value. */
|
||||
const char *candidate_str = candidate_traits::get_string (candidate);
|
||||
edit_distance_t dist
|
||||
= get_edit_distance (m_goal, m_goal_len,
|
||||
candidate_traits::get_string (candidate),
|
||||
candidate_len);
|
||||
= get_edit_distance (m_goal, m_goal_len, candidate_str, candidate_len);
|
||||
|
||||
bool is_better = false;
|
||||
if (dist < m_best_distance)
|
||||
is_better = true;
|
||||
else if (dist == m_best_distance)
|
||||
{
|
||||
/* Prefer a candidate that inserts a trailing '=',
|
||||
so that for
|
||||
"-ftrivial-auto-var-init"
|
||||
we suggest
|
||||
"-ftrivial-auto-var-init="
|
||||
rather than
|
||||
"-Wtrivial-auto-var-init". */
|
||||
/* Prefer a candidate has a difference in trailing sign character. */
|
||||
if (candidate_str[candidate_len - 1] == '='
|
||||
&& m_goal[m_goal_len - 1] != '=')
|
||||
is_better = true;
|
||||
}
|
||||
|
||||
if (is_better)
|
||||
{
|
||||
m_best_distance = dist;
|
||||
m_best_candidate = candidate;
|
||||
|
|
Loading…
Add table
Reference in a new issue