// slang-language-server-completion.h #pragma once #include "../compiler-core/slang-language-server-protocol.h" #include "slang-language-server-ast-lookup.h" #include "slang-workspace-version.h" namespace Slang { class LanguageServerCore; enum class CommitCharacterBehavior { Disabled, MembersOnly, All }; struct CompletionResult { List items; List textEditItems; CompletionResult() = default; CompletionResult(List&& other) : items(_Move(other)) { } CompletionResult(List&& other) : textEditItems(_Move(other)) { } }; struct CompletionContext { LanguageServerCore* server; Index cursorOffset; WorkspaceVersion* version; DocumentVersion* doc; Module* parsedModule; UnownedStringSlice canonicalPath; CommitCharacterBehavior commitCharacterBehavior; Int line; Int col; String indent; // The token range of original request, in 0-based UTF16 code units. LanguageServerProtocol::Range requestRange; LanguageServerResult tryCompleteMemberAndSymbol(); LanguageServerResult tryCompleteHLSLSemantic(); LanguageServerResult tryCompleteAttributes(); LanguageServerResult tryCompleteImport(); LanguageServerResult tryCompleteInclude(); LanguageServerResult tryCompleteRawFileName( UnownedStringSlice lineContent, Index fileNameStartPos, bool isImportString); List getExpectedTypesAtCompletion(const List& astNodes); Index determineCompletionItemSortOrder(Decl* item, const List& expectedTypes); CompletionResult collectMembersAndSymbols(); String formatDeclForCompletion( DeclRef decl, ASTBuilder* astBuilder, CompletionSuggestions::FormatMode formatMode, int& outNameStart); void createSwizzleCandidates( List& result, Type* type, IntegerLiteralValue elementCount[2]); CompletionResult createCapabilityCandidates(); CompletionResult collectAttributes(); LanguageServerProtocol::CompletionItem generateGUIDCompletionItem(); CompletionResult gatherFileAndModuleCompletionItems( const String& prefixPath, bool translateModuleName, bool isImportString, Index lineIndex, Index fileNameEnd, Index sectionStart, Index sectionEnd, char closingChar); }; } // namespace Slang