diff --git a/clang-tools-extra/clangd/IncludeFixer.cpp b/clang-tools-extra/clangd/IncludeFixer.cpp --- a/clang-tools-extra/clangd/IncludeFixer.cpp +++ b/clang-tools-extra/clangd/IncludeFixer.cpp @@ -100,6 +100,8 @@ case diag::err_undeclared_var_use_suggest: case diag::err_no_member: // Could be no member in namespace. case diag::err_no_member_suggest: + case diag::err_no_member_template: + case diag::err_no_member_template_suggest: if (LastUnresolvedName) { // Try to fix unresolved name caused by missing declaration. // E.g. diff --git a/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp b/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp --- a/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp +++ b/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp @@ -879,11 +879,13 @@ ::$global[[Global]] glob; } +using Type = ns::$template[[Foo]]; )cpp"); auto TU = TestTU::withCode(Test.code()); auto Index = buildIndexWithSymbol( {SymbolWithHeader{"ns::X", "unittest:///x.h", "\"x.h\""}, - SymbolWithHeader{"Global", "unittest:///global.h", "\"global.h\""}}); + SymbolWithHeader{"Global", "unittest:///global.h", "\"global.h\""}, + SymbolWithHeader{"ns::Foo", "unittest:///foo.h", "\"foo.h\""}}); TU.ExternalIndex = Index.get(); EXPECT_THAT( @@ -908,7 +910,12 @@ "no type named 'Global' in the global namespace"), DiagName("typename_nested_not_found"), WithFix(Fix(Test.range("insert"), "#include \"global.h\"\n", - "Add include \"global.h\" for symbol Global"))))); + "Add include \"global.h\" for symbol Global"))), + AllOf(Diag(Test.range("template"), + "no template named 'Foo' in namespace 'ns'"), + DiagName("no_member_template"), + WithFix(Fix(Test.range("insert"), "#include \"foo.h\"\n", + "Add include \"foo.h\" for symbol ns::Foo"))))); } TEST(IncludeFixerTest, MultipleMatchedSymbols) {