hokein updated this revision to Diff 144540. hokein added a comment. Add a test.
Repository: rCTE Clang Tools Extra https://reviews.llvm.org/D46258 Files: clangd/index/SymbolCollector.cpp unittests/clangd/SymbolCollectorTests.cpp Index: unittests/clangd/SymbolCollectorTests.cpp =================================================================== --- unittests/clangd/SymbolCollectorTests.cpp +++ unittests/clangd/SymbolCollectorTests.cpp @@ -689,6 +689,15 @@ 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 Index: clangd/index/SymbolCollector.cpp =================================================================== --- clangd/index/SymbolCollector.cpp +++ clangd/index/SymbolCollector.cpp @@ -195,14 +195,10 @@ 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; };
Index: unittests/clangd/SymbolCollectorTests.cpp =================================================================== --- unittests/clangd/SymbolCollectorTests.cpp +++ unittests/clangd/SymbolCollectorTests.cpp @@ -689,6 +689,15 @@ 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 Index: clangd/index/SymbolCollector.cpp =================================================================== --- clangd/index/SymbolCollector.cpp +++ clangd/index/SymbolCollector.cpp @@ -195,14 +195,10 @@ 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; };
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits