Adaopt llvmorg-14-init-3863-g601102d282d5: refactor clang::isIdentifierBody

This commit is contained in:
Fangrui Song 2021-09-23 13:36:01 -07:00
parent f21fd7e5a2
commit 3ce756e39a
3 changed files with 13 additions and 6 deletions

View File

@ -17,6 +17,10 @@ namespace vfs = clang::vfs;
} }
#endif #endif
#if LLVM_VERSION_MAJOR < 14 // llvmorg-14-init-3863-g601102d282d5
#define isAsciiIdentifierContinue isIdentifierBody
#endif
namespace ccls { namespace ccls {
std::string pathFromFileEntry(const clang::FileEntry &file); std::string pathFromFileEntry(const clang::FileEntry &file);

View File

@ -527,8 +527,8 @@ public:
auto i = name.find(short_name); auto i = name.find(short_name);
if (short_name.size()) if (short_name.size())
while (i != std::string::npos && while (i != std::string::npos &&
((i && isIdentifierBody(name[i - 1])) || ((i && isAsciiIdentifierContinue(name[i - 1])) ||
isIdentifierBody(name[i + short_name.size()]))) isAsciiIdentifierContinue(name[i + short_name.size()])))
i = name.find(short_name, i + short_name.size()); i = name.find(short_name, i + short_name.size());
if (i == std::string::npos) { if (i == std::string::npos) {
// e.g. operator type-parameter-1 // e.g. operator type-parameter-1
@ -552,7 +552,7 @@ public:
paren++; paren++;
else if (name[i - 1] == '(') else if (name[i - 1] == '(')
paren--; paren--;
else if (!(paren > 0 || isIdentifierBody(name[i - 1]) || else if (!(paren > 0 || isAsciiIdentifierContinue(name[i - 1]) ||
name[i - 1] == ':')) name[i - 1] == ':'))
break; break;
} }

View File

@ -342,7 +342,10 @@ std::optional<int> WorkingFile::getIndexPosFromBufferPos(int line, int *column,
Position WorkingFile::getCompletionPosition(Position pos, std::string *filter) const { Position WorkingFile::getCompletionPosition(Position pos, std::string *filter) const {
int start = getOffsetForPosition(pos, buffer_content); int start = getOffsetForPosition(pos, buffer_content);
int i = start; int i = start;
while (i > 0 && isIdentifierBody(buffer_content[i - 1])) #if LLVM_VERSION_MAJOR < 14 // llvmorg-14-init-3863-g601102d282d5
#define isAsciiIdentifierContinue isIdentifierBody
#endif
while (i > 0 && isAsciiIdentifierContinue(buffer_content[i - 1]))
--i; --i;
*filter = buffer_content.substr(i, start - i); *filter = buffer_content.substr(i, start - i);
return getPositionForOffset(buffer_content, i); return getPositionForOffset(buffer_content, i);
@ -455,10 +458,10 @@ std::string_view lexIdentifierAroundPos(Position position,
c = content[start - 1]; c = content[start - 1];
if (c == ':' && start > 1 && content[start - 2] == ':') if (c == ':' && start > 1 && content[start - 2] == ':')
start--; start--;
else if (!isIdentifierBody(c)) else if (!isAsciiIdentifierContinue(c))
break; break;
} }
for (; end < content.size() && isIdentifierBody(content[end]); end++) for (; end < content.size() && isAsciiIdentifierContinue(content[end]); end++)
; ;
return content.substr(start, end - start); return content.substr(start, end - start);