Author: kadircet Date: Mon Aug 13 01:13:35 2018 New Revision: 339540 URL: http://llvm.org/viewvc/llvm-project?rev=339540&view=rev Log: [clang] Store code completion token range in preprocessor.
Summary: This change is to support a new fature in clangd, tests will be send toclang-tools-extra with that change. Unittests are included in: https://reviews.llvm.org/D50449 Reviewers: ilya-biryukov Reviewed By: ilya-biryukov Subscribers: ioeric, MaskRay, jkorous, arphaman, cfe-commits Differential Revision: https://reviews.llvm.org/D50443 Modified: cfe/trunk/include/clang/Lex/Preprocessor.h cfe/trunk/lib/Lex/Preprocessor.cpp Modified: cfe/trunk/include/clang/Lex/Preprocessor.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Preprocessor.h?rev=339540&r1=339539&r2=339540&view=diff ============================================================================== --- cfe/trunk/include/clang/Lex/Preprocessor.h (original) +++ cfe/trunk/include/clang/Lex/Preprocessor.h Mon Aug 13 01:13:35 2018 @@ -310,6 +310,9 @@ class Preprocessor { /// on the stem that is to be code completed. IdentifierInfo *CodeCompletionII = nullptr; + /// Range for the code completion token. + SourceRange CodeCompletionTokenRange; + /// The directory that the main file should be considered to occupy, /// if it does not correspond to a real file (as happens when building a /// module). @@ -1131,6 +1134,16 @@ public: CodeCompletionII = Filter; } + /// Set the code completion token range for detecting replacement range later + /// on. + void setCodeCompletionTokenRange(const SourceLocation Start, + const SourceLocation End) { + CodeCompletionTokenRange = {Start, End}; + } + SourceRange getCodeCompletionTokenRange() const { + return CodeCompletionTokenRange; + } + /// Get the code completion token for filtering purposes. StringRef getCodeCompletionFilter() { if (CodeCompletionII) Modified: cfe/trunk/lib/Lex/Preprocessor.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Preprocessor.cpp?rev=339540&r1=339539&r2=339540&view=diff ============================================================================== --- cfe/trunk/lib/Lex/Preprocessor.cpp (original) +++ cfe/trunk/lib/Lex/Preprocessor.cpp Mon Aug 13 01:13:35 2018 @@ -868,6 +868,7 @@ void Preprocessor::Lex(Token &Result) { if (Result.is(tok::code_completion) && Result.getIdentifierInfo()) { // Remember the identifier before code completion token. setCodeCompletionIdentifierInfo(Result.getIdentifierInfo()); + setCodeCompletionTokenRange(Result.getLocation(), Result.getEndLoc()); // Set IdenfitierInfo to null to avoid confusing code that handles both // identifiers and completion tokens. Result.setIdentifierInfo(nullptr); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits