aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Sema/SemaCodeComplete.cpp
diff options
context:
space:
mode:
authorLetu Ren <fantasquex@gmail.com>2025-03-17 14:45:19 +0800
committerGitHub <noreply@github.com>2025-03-17 02:45:19 -0400
commit009d36222cfdb59f49597e01d157ca4f65ac9295 (patch)
tree989526982be373a1e192fe821be88b9a6aeb95d3 /clang/lib/Sema/SemaCodeComplete.cpp
parent6c867e27a7b597910571677abdef77b703a5a601 (diff)
downloadllvm-009d36222cfdb59f49597e01d157ca4f65ac9295.zip
llvm-009d36222cfdb59f49597e01d157ca4f65ac9295.tar.gz
llvm-009d36222cfdb59f49597e01d157ca4f65ac9295.tar.bz2
[clang][CodeComplete] Add code completion for if constexpr and consteval (#124315)
Code complete `constexpr` and `consteval` keywords after `if` in the relevant language modes. If pattern completion is enabled, the completions also include placeholders for the condition (in the case of `constexpr`) and statement block.
Diffstat (limited to 'clang/lib/Sema/SemaCodeComplete.cpp')
-rw-r--r--clang/lib/Sema/SemaCodeComplete.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp
index db467d7..2003701 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -6749,6 +6749,52 @@ void SemaCodeCompletion::CodeCompleteInitializer(Scope *S, Decl *D) {
CodeCompleteExpression(S, Data);
}
+void SemaCodeCompletion::CodeCompleteKeywordAfterIf(bool AfterExclaim) const {
+ ResultBuilder Results(SemaRef, CodeCompleter->getAllocator(),
+ CodeCompleter->getCodeCompletionTUInfo(),
+ CodeCompletionContext::CCC_Other);
+ CodeCompletionBuilder Builder(Results.getAllocator(),
+ Results.getCodeCompletionTUInfo());
+ if (getLangOpts().CPlusPlus17) {
+ if (!AfterExclaim) {
+ if (Results.includeCodePatterns()) {
+ Builder.AddTypedTextChunk("constexpr");
+ Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
+ Builder.AddChunk(CodeCompletionString::CK_LeftParen);
+ Builder.AddPlaceholderChunk("condition");
+ Builder.AddChunk(CodeCompletionString::CK_RightParen);
+ Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
+ Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
+ Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
+ Builder.AddPlaceholderChunk("statements");
+ Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
+ Builder.AddChunk(CodeCompletionString::CK_RightBrace);
+ Results.AddResult({Builder.TakeString()});
+ } else {
+ Results.AddResult({"constexpr"});
+ }
+ }
+ }
+ if (getLangOpts().CPlusPlus23) {
+ if (Results.includeCodePatterns()) {
+ Builder.AddTypedTextChunk("consteval");
+ Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
+ Builder.AddChunk(CodeCompletionString::CK_LeftBrace);
+ Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
+ Builder.AddPlaceholderChunk("statements");
+ Builder.AddChunk(CodeCompletionString::CK_VerticalSpace);
+ Builder.AddChunk(CodeCompletionString::CK_RightBrace);
+ Results.AddResult({Builder.TakeString()});
+ } else {
+ Results.AddResult({"consteval"});
+ }
+ }
+
+ HandleCodeCompleteResults(&SemaRef, CodeCompleter,
+ Results.getCompletionContext(), Results.data(),
+ Results.size());
+}
+
void SemaCodeCompletion::CodeCompleteAfterIf(Scope *S, bool IsBracedThen) {
ResultBuilder Results(SemaRef, CodeCompleter->getAllocator(),
CodeCompleter->getCodeCompletionTUInfo(),