Skip to content
Snippets Groups Projects
  • David Malcolm's avatar
    1a4f11c8
    C FE: suggest corrections for misspelled identifiers and type names · 1a4f11c8
    David Malcolm authored
    gcc/c-family/ChangeLog:
    	PR c/70339
    	* c-common.h (enum lookup_name_fuzzy_kind): New enum.
    	(lookup_name_fuzzy): New prototype.
    
    gcc/c/ChangeLog:
    	PR c/70339
    	* c-decl.c: Include spellcheck-tree.h and gcc-rich-location.h.
    	(implicit_decl_warning): When issuing warnings for implicit
    	declarations, attempt to provide a suggestion via
    	lookup_name_fuzzy.
    	(undeclared_variable): Likewise when issuing errors.
    	(lookup_name_in_scope): Likewise.
    	(struct edit_distance_traits<cpp_hashnode *>): New struct.
    	(best_macro_match): New typedef.
    	(find_closest_macro_cpp_cb): New function.
    	(lookup_name_fuzzy): New function.
    	* c-parser.c: Include gcc-rich-location.h.
    	(c_token_starts_typename): Split out case CPP_KEYWORD into...
    	(c_keyword_starts_typename): ...this new function.
    	(c_parser_declaration_or_fndef): When issuing errors about
    	missing "struct" etc, add a fixit.  For other kinds of errors,
    	attempt to provide a suggestion via lookup_name_fuzzy.
    	(c_parser_parms_declarator): When looking ahead to detect typos in
    	type names, also reject CPP_KEYWORD.
    	(c_parser_parameter_declaration): When issuing errors about
    	unknown type names, attempt to provide a suggestion via
    	lookup_name_fuzzy.
    	* c-tree.h (c_keyword_starts_typename): New prototype.
    
    gcc/ChangeLog:
    	PR c/70339
    	* diagnostic-core.h (pedwarn_at_rich_loc): New prototype.
    	* diagnostic.c (pedwarn_at_rich_loc): New function.
    	* spellcheck.h (best_match::best_match): Add a
    	"best_distance_so_far" optional parameter.
    	(best_match::set_best_so_far): New method.
    	(best_match::get_best_distance): New accessor.
    	(best_match::get_best_candidate_length): New accessor.
    
    gcc/testsuite/ChangeLog:
    	PR c/70339
    	* c-c++-common/attributes-1.c: Update dg-prune-output to include
    	hint.
    	* gcc.dg/diagnostic-token-ranges.c (undeclared_identifier): Update
    	expected results due to builtin "nanl" now being suggested for
    	"name".
    	* gcc.dg/pr67580.c: Update expected messages.
    	* gcc.dg/spellcheck-identifiers.c: New testcase.
    	* gcc.dg/spellcheck-typenames.c: New testcase.
    
    From-SVN: r237714
    1a4f11c8
    History
    C FE: suggest corrections for misspelled identifiers and type names
    David Malcolm authored
    gcc/c-family/ChangeLog:
    	PR c/70339
    	* c-common.h (enum lookup_name_fuzzy_kind): New enum.
    	(lookup_name_fuzzy): New prototype.
    
    gcc/c/ChangeLog:
    	PR c/70339
    	* c-decl.c: Include spellcheck-tree.h and gcc-rich-location.h.
    	(implicit_decl_warning): When issuing warnings for implicit
    	declarations, attempt to provide a suggestion via
    	lookup_name_fuzzy.
    	(undeclared_variable): Likewise when issuing errors.
    	(lookup_name_in_scope): Likewise.
    	(struct edit_distance_traits<cpp_hashnode *>): New struct.
    	(best_macro_match): New typedef.
    	(find_closest_macro_cpp_cb): New function.
    	(lookup_name_fuzzy): New function.
    	* c-parser.c: Include gcc-rich-location.h.
    	(c_token_starts_typename): Split out case CPP_KEYWORD into...
    	(c_keyword_starts_typename): ...this new function.
    	(c_parser_declaration_or_fndef): When issuing errors about
    	missing "struct" etc, add a fixit.  For other kinds of errors,
    	attempt to provide a suggestion via lookup_name_fuzzy.
    	(c_parser_parms_declarator): When looking ahead to detect typos in
    	type names, also reject CPP_KEYWORD.
    	(c_parser_parameter_declaration): When issuing errors about
    	unknown type names, attempt to provide a suggestion via
    	lookup_name_fuzzy.
    	* c-tree.h (c_keyword_starts_typename): New prototype.
    
    gcc/ChangeLog:
    	PR c/70339
    	* diagnostic-core.h (pedwarn_at_rich_loc): New prototype.
    	* diagnostic.c (pedwarn_at_rich_loc): New function.
    	* spellcheck.h (best_match::best_match): Add a
    	"best_distance_so_far" optional parameter.
    	(best_match::set_best_so_far): New method.
    	(best_match::get_best_distance): New accessor.
    	(best_match::get_best_candidate_length): New accessor.
    
    gcc/testsuite/ChangeLog:
    	PR c/70339
    	* c-c++-common/attributes-1.c: Update dg-prune-output to include
    	hint.
    	* gcc.dg/diagnostic-token-ranges.c (undeclared_identifier): Update
    	expected results due to builtin "nanl" now being suggested for
    	"name".
    	* gcc.dg/pr67580.c: Update expected messages.
    	* gcc.dg/spellcheck-identifiers.c: New testcase.
    	* gcc.dg/spellcheck-typenames.c: New testcase.
    
    From-SVN: r237714