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
#if LLVM_VERSION_MAJOR < 14 // llvmorg-14-init-3863-g601102d282d5
#define isAsciiIdentifierContinue isIdentifierBody
#endif
namespace ccls {
std::string pathFromFileEntry(const clang::FileEntry &file);

View File

@ -527,8 +527,8 @@ public:
auto i = name.find(short_name);
if (short_name.size())
while (i != std::string::npos &&
((i && isIdentifierBody(name[i - 1])) ||
isIdentifierBody(name[i + short_name.size()])))
((i && isAsciiIdentifierContinue(name[i - 1])) ||
isAsciiIdentifierContinue(name[i + short_name.size()])))
i = name.find(short_name, i + short_name.size());
if (i == std::string::npos) {
// e.g. operator type-parameter-1
@ -552,7 +552,7 @@ public:
paren++;
else if (name[i - 1] == '(')
paren--;
else if (!(paren > 0 || isIdentifierBody(name[i - 1]) ||
else if (!(paren > 0 || isAsciiIdentifierContinue(name[i - 1]) ||
name[i - 1] == ':'))
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 {
int start = getOffsetForPosition(pos, buffer_content);
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;
*filter = buffer_content.substr(i, start - i);
return getPositionForOffset(buffer_content, i);
@ -455,10 +458,10 @@ std::string_view lexIdentifierAroundPos(Position position,
c = content[start - 1];
if (c == ':' && start > 1 && content[start - 2] == ':')
start--;
else if (!isIdentifierBody(c))
else if (!isAsciiIdentifierContinue(c))
break;
}
for (; end < content.size() && isIdentifierBody(content[end]); end++)
for (; end < content.size() && isAsciiIdentifierContinue(content[end]); end++)
;
return content.substr(start, end - start);