// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details #pragma once #include "Luau/Location.h" #include "Luau/Type.h" #include #include #include #include namespace Luau { struct Frontend; struct SourceModule; struct Module; struct TypeChecker; using ModulePtr = std::shared_ptr; enum class AutocompleteContext { Unknown, Expression, Statement, Property, Type, Keyword, String, }; enum class AutocompleteEntryKind { Property, Binding, Keyword, String, Type, Module, GeneratedFunction, }; enum class ParenthesesRecommendation { None, CursorAfter, CursorInside, }; enum class TypeCorrectKind { None, Correct, CorrectFunctionResult, }; struct AutocompleteEntry { AutocompleteEntryKind kind = AutocompleteEntryKind::Property; // Nullopt if kind is Keyword std::optional type = std::nullopt; bool deprecated = false; // Only meaningful if kind is Property. bool wrongIndexType = false; // Set if this suggestion matches the type expected in the context TypeCorrectKind typeCorrect = TypeCorrectKind::None; std::optional containingClass = std::nullopt; std::optional prop = std::nullopt; std::optional documentationSymbol = std::nullopt; Tags tags; ParenthesesRecommendation parens = ParenthesesRecommendation::None; std::optional insertText; // Only meaningful if kind is Property. bool indexedWithSelf = false; }; using AutocompleteEntryMap = std::unordered_map; struct AutocompleteResult { AutocompleteEntryMap entryMap; std::vector ancestry; AutocompleteContext context = AutocompleteContext::Unknown; AutocompleteResult() = default; AutocompleteResult(AutocompleteEntryMap entryMap, std::vector ancestry, AutocompleteContext context) : entryMap(std::move(entryMap)) , ancestry(std::move(ancestry)) , context(context) { } }; using ModuleName = std::string; using StringCompletionCallback = std::function(std::string tag, std::optional ctx, std::optional contents)>; AutocompleteResult autocomplete(Frontend& frontend, const ModuleName& moduleName, Position position, StringCompletionCallback callback); constexpr char kGeneratedAnonymousFunctionEntryName[] = "function (anonymous autofilled)"; } // namespace Luau