[clangd] Also use UTF-16 in index position.

Reviewers: sammccall

Subscribers: klimek, ilya-biryukov, ioeric, MaskRay, jkorous, cfe-commits

Differential Revision: https://reviews.llvm.org/D46258

llvm-svn: 331168
This commit is contained in:
Haojian Wu 2018-04-30 11:40:02 +00:00
parent 318f816f49
commit c53400156b
2 changed files with 12 additions and 7 deletions

View File

@ -195,14 +195,10 @@ llvm::Optional<SymbolLocation> getSymbolLocation(
auto TokenLength = clang::Lexer::MeasureTokenLength(NameLoc, SM, LangOpts);
auto CreatePosition = [&SM](SourceLocation Loc) {
auto FileIdAndOffset = SM.getDecomposedLoc(Loc);
auto FileId = FileIdAndOffset.first;
auto Offset = FileIdAndOffset.second;
auto LSPLoc = sourceLocToPosition(SM, Loc);
SymbolLocation::Position Pos;
// Position is 0-based while SourceManager is 1-based.
Pos.Line = SM.getLineNumber(FileId, Offset) - 1;
// FIXME: Use UTF-16 code units, not UTF-8 bytes.
Pos.Column = SM.getColumnNumber(FileId, Offset) - 1;
Pos.Line = LSPLoc.line;
Pos.Column = LSPLoc.character;
return Pos;
};

View File

@ -689,6 +689,15 @@ TEST_F(SymbolCollectorTest, ClassForwardDeclarationIsCanonical) {
IncludeHeader(TestHeaderURI), DefURI(TestFileURI))));
}
TEST_F(SymbolCollectorTest, UTF16Character) {
// ö is 2-bytes.
Annotations Header(/*Header=*/"class [[pörk]] {};");
runSymbolCollector(Header.code(), /*Main=*/"");
EXPECT_THAT(Symbols, UnorderedElementsAre(
AllOf(QName("pörk"), DeclRange(Header.range()))));
}
} // namespace
} // namespace clangd
} // namespace clang