// slang-language-server-completion.h #pragma once #include "slang-workspace-version.h" #include "slang-language-server-ast-lookup.h" #include "../compiler-core/slang-language-server-protocol.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; LanguageServerResult tryCompleteMemberAndSymbol(); LanguageServerResult tryCompleteHLSLSemantic(); LanguageServerResult tryCompleteAttributes(); LanguageServerResult tryCompleteImport(); LanguageServerResult tryCompleteInclude(); LanguageServerResult tryCompleteRawFileName(UnownedStringSlice lineContent, Index fileNameStartPos, bool isImportString); CompletionResult collectMembersAndSymbols(); CompletionResult createSwizzleCandidates( Type* baseType, 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