2121#include " TestTU.h"
2222#include " index/Index.h"
2323#include " index/MemIndex.h"
24+ #include " index/SymbolOrigin.h"
2425#include " support/Threading.h"
2526#include " clang/Sema/CodeCompleteConsumer.h"
2627#include " clang/Tooling/CompilationDatabase.h"
2930#include " llvm/Support/Path.h"
3031#include " llvm/Testing/Support/Annotations.h"
3132#include " llvm/Testing/Support/Error.h"
33+ #include " llvm/Testing/Support/SupportHelpers.h"
3234#include " gmock/gmock.h"
3335#include " gtest/gtest.h"
3436#include < condition_variable>
@@ -83,6 +85,9 @@ MATCHER(insertInclude, "") {
8385MATCHER_P (snippetSuffix, Text, " " ) { return arg.SnippetSuffix == Text; }
8486MATCHER_P (origin, OriginSet, " " ) { return arg.Origin == OriginSet; }
8587MATCHER_P (signature, S, " " ) { return arg.Signature == S; }
88+ MATCHER_P (replacesRange, Range, " " ) {
89+ return arg.CompletionTokenRange == Range;
90+ }
8691
8792// Shorthand for Contains(named(Name)).
8893Matcher<const std::vector<CodeCompletion> &> has (std::string Name) {
@@ -3713,7 +3718,6 @@ TEST(CompletionTest, PreambleCodeComplete) {
37133718}
37143719
37153720TEST (CompletionTest, CommentParamName) {
3716- clangd::CodeCompleteOptions Opts;
37173721 const std::string Code = R"cpp(
37183722 void fun(int foo, int bar);
37193723 void overloaded(int param_int);
@@ -3722,23 +3726,46 @@ TEST(CompletionTest, CommentParamName) {
37223726 int main() {
37233727 )cpp" ;
37243728
3725- EXPECT_THAT (completions (Code + " fun(/*^" , {}, Opts ).Completions ,
3726- UnorderedElementsAre (labeled (" foo=" )));
3727- EXPECT_THAT (completions (Code + " fun(1, /*^" , {}, Opts ).Completions ,
3728- UnorderedElementsAre (labeled (" bar=" )));
3729- EXPECT_THAT (completions (Code + " /*^" , {}, Opts ).Completions , IsEmpty ());
3729+ EXPECT_THAT (completions (Code + " fun(/*^" ).Completions ,
3730+ UnorderedElementsAre (labeled (" foo=*/ " )));
3731+ EXPECT_THAT (completions (Code + " fun(1, /*^" ).Completions ,
3732+ UnorderedElementsAre (labeled (" bar=*/ " )));
3733+ EXPECT_THAT (completions (Code + " /*^" ).Completions , IsEmpty ());
37303734 // Test de-duplication.
37313735 EXPECT_THAT (
3732- completions (Code + " overloaded(/*^" , {}, Opts ).Completions ,
3733- UnorderedElementsAre (labeled (" param_int=" ), labeled (" param_char=" )));
3736+ completions (Code + " overloaded(/*^" ).Completions ,
3737+ UnorderedElementsAre (labeled (" param_int=*/ " ), labeled (" param_char=*/ " )));
37343738 // Comment already has some text in it.
3735- EXPECT_THAT (completions (Code + " fun(/* ^" , {}, Opts).Completions ,
3736- UnorderedElementsAre (labeled (" foo=" )));
3737- EXPECT_THAT (completions (Code + " fun(/* f^" , {}, Opts).Completions ,
3738- UnorderedElementsAre (labeled (" foo=" )));
3739- EXPECT_THAT (completions (Code + " fun(/* x^" , {}, Opts).Completions , IsEmpty ());
3740- EXPECT_THAT (completions (Code + " fun(/* f ^" , {}, Opts).Completions ,
3741- IsEmpty ());
3739+ EXPECT_THAT (completions (Code + " fun(/* ^" ).Completions ,
3740+ UnorderedElementsAre (labeled (" foo=*/" )));
3741+ EXPECT_THAT (completions (Code + " fun(/* f^" ).Completions ,
3742+ UnorderedElementsAre (labeled (" foo=*/" )));
3743+ EXPECT_THAT (completions (Code + " fun(/* x^" ).Completions , IsEmpty ());
3744+ EXPECT_THAT (completions (Code + " fun(/* f ^" ).Completions , IsEmpty ());
3745+
3746+ // Test ranges
3747+ {
3748+ std::string CompletionRangeTest (Code + " fun(/*[[^]]" );
3749+ auto Results = completions (CompletionRangeTest);
3750+ EXPECT_THAT (Results.CompletionRange ,
3751+ llvm::ValueIs (Annotations (CompletionRangeTest).range ()));
3752+ EXPECT_THAT (
3753+ Results.Completions ,
3754+ testing::Each (
3755+ AllOf (replacesRange (Annotations (CompletionRangeTest).range ()),
3756+ origin (SymbolOrigin::AST), kind (CompletionItemKind::Text))));
3757+ }
3758+ {
3759+ std::string CompletionRangeTest (Code + " fun(/*[[fo^]]" );
3760+ auto Results = completions (CompletionRangeTest);
3761+ EXPECT_THAT (Results.CompletionRange ,
3762+ llvm::ValueIs (Annotations (CompletionRangeTest).range ()));
3763+ EXPECT_THAT (
3764+ Results.Completions ,
3765+ testing::Each (
3766+ AllOf (replacesRange (Annotations (CompletionRangeTest).range ()),
3767+ origin (SymbolOrigin::AST), kind (CompletionItemKind::Text))));
3768+ }
37423769}
37433770
37443771TEST (CompletionTest, Concepts) {
0 commit comments