summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-language-server-completion.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-08-10 01:58:41 -0700
committerGitHub <noreply@github.com>2022-08-10 01:58:41 -0700
commit89083c4b50af8e48e70b25b63cc62aca21ab706c (patch)
tree38e9544cd218dbeea0a2f26f267ac16f275c0291 /source/slang/slang-language-server-completion.cpp
parent9df7fcb023bd5a22f35ecd609b7a50cc6634976c (diff)
Language server pointer type support + add `DLLImport` test (#2350)
* Language server pointer type support. + Natvis for AST. * Add completion suggestion for GUID. * Make executable test able to use slang-rt. * Fix gcc argument for rpath. * Fix DLLImport on linux. * Fix windows. * Fix. Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-language-server-completion.cpp')
-rw-r--r--source/slang/slang-language-server-completion.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/source/slang/slang-language-server-completion.cpp b/source/slang/slang-language-server-completion.cpp
index 93b10b816..21586089a 100644
--- a/source/slang/slang-language-server-completion.cpp
+++ b/source/slang/slang-language-server-completion.cpp
@@ -644,6 +644,37 @@ List<LanguageServerProtocol::CompletionItem> CompletionContext::createSwizzleCan
return result;
}
+LanguageServerProtocol::CompletionItem CompletionContext::generateGUIDCompletionItem()
+{
+ StringBuilder sb;
+ sb << "COM(\"";
+ auto docHash = doc->getURI().getHashCode() ^ doc->getText().getHashCode();
+ int sectionLengths[] = { 8,4,4,4,12 };
+ srand((unsigned int)std::chrono::high_resolution_clock::now().time_since_epoch().count());
+ auto hashStr = String(docHash, 16);
+ sectionLengths[0] -= (int)hashStr.getLength();
+ sb << hashStr;
+ for (int j = 0; j < SLANG_COUNT_OF(sectionLengths); j++)
+ {
+ auto len = sectionLengths[j];
+ if (j != 0)
+ sb << "-";
+ for (int i = 0; i < len; i++)
+ {
+ auto digit = rand() % 16;
+ if (digit < 10)
+ sb << digit;
+ else
+ sb.appendChar((char)('A' + digit - 10));
+ }
+ }
+ sb << "\")";
+ LanguageServerProtocol::CompletionItem resultItem;
+ resultItem.kind = LanguageServerProtocol::kCompletionItemKindKeyword;
+ resultItem.label = sb.ProduceString();
+ return resultItem;
+}
+
List<LanguageServerProtocol::CompletionItem> CompletionContext::collectAttributes()
{
List<LanguageServerProtocol::CompletionItem> result;
@@ -672,6 +703,10 @@ List<LanguageServerProtocol::CompletionItem> CompletionContext::collectAttribute
}
}
}
+
+ // Add a suggestion for `[COM]` attribute with generated GUID.
+ auto guidItem = generateGUIDCompletionItem();
+ result.add(guidItem);
return result;
}