//===--- CodeCompletion.h - Routines for code completion --------*- C++ -*-===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// #ifndef SWIFT_IDE_CODECOMPLETION_H #define SWIFT_IDE_CODECOMPLETION_H #include "swift/IDE/CodeCompletionConsumer.h" #include "swift/IDE/CodeCompletionContext.h" #include "swift/IDE/CodeCompletionResult.h" #include "swift/IDE/CodeCompletionResultSink.h" #include "swift/IDE/CompletionLookup.h" namespace swift { class IDEInspectionCallbacksFactory; class Decl; class DeclContext; class FrontendOptions; class ModuleDecl; class SourceFile; namespace ide { class CodeCompletionCache; struct RequestedCachedModule; /// A routine to remove code completion tokens from code completion /// tests. /// /// \code /// code-completion-token: /// '#^' identifier '^#' /// \endcode /// /// \param Input test source code. /// \param TokenName names the token whose position should be returned in /// \p CompletionOffset. /// \param CompletionOffset set to ~0U on error, or to a 0-based byte offset on /// success. /// /// \returns test source code without any code completion tokens. std::string removeCodeCompletionTokens(StringRef Input, StringRef TokenName, unsigned *CompletionOffset); template ArrayRef copyArray(llvm::BumpPtrAllocator &Allocator, ArrayRef Arr) { T *Buffer = Allocator.Allocate(Arr.size()); std::copy(Arr.begin(), Arr.end(), Buffer); return llvm::ArrayRef(Buffer, Arr.size()); } bool isDynamicLookup(Type T); void postProcessCompletionResults( MutableArrayRef results, CompletionKind Kind, const DeclContext *DC, CodeCompletionResultSink *Sink); void collectCompletionResults(CodeCompletionContext &CompletionContext, CompletionLookup &Lookup, DeclContext *DC, const ExpectedTypeContext &TypeContext, bool CanCurrDeclContextHandleAsync); /// Create a factory for code completion callbacks. IDEInspectionCallbacksFactory * makeCodeCompletionCallbacksFactory(CodeCompletionContext &CompletionContext, CodeCompletionConsumer &Consumer); /// Lookup the top-level code completions from \p module and store them in /// \p targetSink. /// /// Results are looked up as if in \p currDeclContext, which may be null. void lookupCodeCompletionResultsFromModule(CodeCompletionResultSink &targetSink, const ModuleDecl *module, ArrayRef accessPath, bool needLeadingDot, const SourceFile *SF); void addExprKeywords(CodeCompletionResultSink &Sink, DeclContext *DC); void addSuperKeyword(CodeCompletionResultSink &Sink, DeclContext *DC); } // end namespace ide } // end namespace swift #endif // SWIFT_IDE_CODECOMPLETION_H