21
21
#include " TestTU.h"
22
22
#include " index/Index.h"
23
23
#include " index/MemIndex.h"
24
+ #include " index/SymbolOrigin.h"
24
25
#include " support/Threading.h"
25
26
#include " clang/Sema/CodeCompleteConsumer.h"
26
27
#include " clang/Tooling/CompilationDatabase.h"
29
30
#include " llvm/Support/Path.h"
30
31
#include " llvm/Testing/Support/Annotations.h"
31
32
#include " llvm/Testing/Support/Error.h"
33
+ #include " llvm/Testing/Support/SupportHelpers.h"
32
34
#include " gmock/gmock.h"
33
35
#include " gtest/gtest.h"
34
36
#include < condition_variable>
@@ -83,6 +85,9 @@ MATCHER(insertInclude, "") {
83
85
MATCHER_P (snippetSuffix, Text, " " ) { return arg.SnippetSuffix == Text; }
84
86
MATCHER_P (origin, OriginSet, " " ) { return arg.Origin == OriginSet; }
85
87
MATCHER_P (signature, S, " " ) { return arg.Signature == S; }
88
+ MATCHER_P (replacesRange, Range, " " ) {
89
+ return arg.CompletionTokenRange == Range;
90
+ }
86
91
87
92
// Shorthand for Contains(named(Name)).
88
93
Matcher<const std::vector<CodeCompletion> &> has (std::string Name) {
@@ -3713,7 +3718,6 @@ TEST(CompletionTest, PreambleCodeComplete) {
3713
3718
}
3714
3719
3715
3720
TEST (CompletionTest, CommentParamName) {
3716
- clangd::CodeCompleteOptions Opts;
3717
3721
const std::string Code = R"cpp(
3718
3722
void fun(int foo, int bar);
3719
3723
void overloaded(int param_int);
@@ -3722,23 +3726,46 @@ TEST(CompletionTest, CommentParamName) {
3722
3726
int main() {
3723
3727
)cpp" ;
3724
3728
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 ());
3730
3734
// Test de-duplication.
3731
3735
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=*/ " )));
3734
3738
// 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
+ }
3742
3769
}
3743
3770
3744
3771
TEST (CompletionTest, Concepts) {
0 commit comments