// 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; 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