- //===--- CodeCompletionHandler.h - Preprocessor code completion -*- C++ -*-===// 
- // 
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
- // See https://llvm.org/LICENSE.txt for license information. 
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
- // 
- //===----------------------------------------------------------------------===// 
- // 
- //  This file defines the CodeCompletionHandler interface, which provides 
- //  code-completion callbacks for the preprocessor. 
- // 
- //===----------------------------------------------------------------------===// 
- #ifndef LLVM_CLANG_LEX_CODECOMPLETIONHANDLER_H 
- #define LLVM_CLANG_LEX_CODECOMPLETIONHANDLER_H 
-   
- #include "llvm/ADT/StringRef.h" 
-   
- namespace clang { 
-   
- class IdentifierInfo; 
- class MacroInfo; 
-   
- /// Callback handler that receives notifications when performing code 
- /// completion within the preprocessor. 
- class CodeCompletionHandler { 
- public: 
-   virtual ~CodeCompletionHandler(); 
-   
-   /// Callback invoked when performing code completion for a preprocessor 
-   /// directive. 
-   /// 
-   /// This callback will be invoked when the preprocessor processes a '#' at the 
-   /// start of a line, followed by the code-completion token. 
-   /// 
-   /// \param InConditional Whether we're inside a preprocessor conditional 
-   /// already. 
-   virtual void CodeCompleteDirective(bool InConditional) { } 
-   
-   /// Callback invoked when performing code completion within a block of 
-   /// code that was excluded due to preprocessor conditionals. 
-   virtual void CodeCompleteInConditionalExclusion() { } 
-   
-   /// Callback invoked when performing code completion in a context 
-   /// where the name of a macro is expected. 
-   /// 
-   /// \param IsDefinition Whether this is the definition of a macro, e.g., 
-   /// in a \#define. 
-   virtual void CodeCompleteMacroName(bool IsDefinition) { } 
-   
-   /// Callback invoked when performing code completion in a preprocessor 
-   /// expression, such as the condition of an \#if or \#elif directive. 
-   virtual void CodeCompletePreprocessorExpression() { } 
-   
-   /// Callback invoked when performing code completion inside a 
-   /// function-like macro argument. 
-   /// 
-   /// There will be another callback invocation after the macro arguments are 
-   /// parsed, so this callback should generally be used to note that the next 
-   /// callback is invoked inside a macro argument. 
-   virtual void CodeCompleteMacroArgument(IdentifierInfo *Macro, 
-                                          MacroInfo *MacroInfo, 
-                                          unsigned ArgumentIndex) { } 
-   
-   /// Callback invoked when performing code completion inside the filename 
-   /// part of an #include directive. (Also #import, #include_next, etc). 
-   /// \p Dir is the directory relative to the include path. 
-   virtual void CodeCompleteIncludedFile(llvm::StringRef Dir, bool IsAngled) {} 
-   
-   /// Callback invoked when performing code completion in a part of the 
-   /// file where we expect natural language, e.g., a comment, string, or 
-   /// \#error directive. 
-   virtual void CodeCompleteNaturalLanguage() { } 
- }; 
-   
- } 
-   
- #endif // LLVM_CLANG_LEX_CODECOMPLETIONHANDLER_H 
-