[clang-tools-extra] [clangd] Store full decl/def range with symbol locations (PR #118102)
https://github.com/ckandeler updated https://github.com/llvm/llvm-project/pull/118102 >From c44237813fb3357dee3f7d17048a7178e67a2422 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 27 Nov 2024 13:47:32 +0100 Subject: [PATCH] [clangd] Store full decl/def range with symbol locations Apart from fixing the linked issue, this is also necessary for supporting LSP's LocationLink feature and for finding proper insertion locations in the DefineOutline tweak. Memory consumption of the background index grows by about ~2.5%. Closes https://github.com/clangd/clangd/issues/59 --- clang-tools-extra/clangd/CodeComplete.cpp | 4 +- clang-tools-extra/clangd/FindSymbols.cpp | 34 -- clang-tools-extra/clangd/FindSymbols.h| 8 +- .../clangd/HeaderSourceSwitch.cpp | 4 +- clang-tools-extra/clangd/IncludeFixer.cpp | 6 +- clang-tools-extra/clangd/Quality.cpp | 2 +- clang-tools-extra/clangd/XRefs.cpp| 65 ++- clang-tools-extra/clangd/index/FileIndex.cpp | 6 +- clang-tools-extra/clangd/index/Index.h| 2 +- clang-tools-extra/clangd/index/Merge.cpp | 13 ++- clang-tools-extra/clangd/index/Ref.h | 11 +- .../clangd/index/Serialization.cpp| 34 -- clang-tools-extra/clangd/index/StdLib.cpp | 12 +- clang-tools-extra/clangd/index/Symbol.h | 8 +- .../clangd/index/SymbolCollector.cpp | 89 +++ .../clangd/index/SymbolCollector.h| 3 +- .../clangd/index/SymbolLocation.cpp | 11 +- .../clangd/index/SymbolLocation.h | 103 +++--- .../clangd/index/YAMLSerialization.cpp| 37 +-- clang-tools-extra/clangd/index/dex/Dex.cpp| 4 +- clang-tools-extra/clangd/refactor/Rename.cpp | 4 +- .../clangd/test/Inputs/symbols.test.yaml | 17 ++- .../index-serialization/Inputs/sample.idx | Bin 470 -> 496 bytes .../clangd/test/type-hierarchy-ext.test | 8 +- .../clangd/test/type-hierarchy.test | 8 +- .../clangd/unittests/BackgroundIndexTests.cpp | 4 +- .../clangd/unittests/CodeCompleteTests.cpp| 18 +-- .../clangd/unittests/DexTests.cpp | 5 +- .../clangd/unittests/DiagnosticsTests.cpp | 13 ++- .../clangd/unittests/FileIndexTests.cpp | 14 +-- .../clangd/unittests/IndexTests.cpp | 45 .../clangd/unittests/SerializationTests.cpp | 23 +++- .../clangd/unittests/SymbolCollectorTests.cpp | 12 +- 33 files changed, 388 insertions(+), 239 deletions(-) diff --git a/clang-tools-extra/clangd/CodeComplete.cpp b/clang-tools-extra/clangd/CodeComplete.cpp index 2c2d5f0b5ac924..04e4aa2d2d1ca9 100644 --- a/clang-tools-extra/clangd/CodeComplete.cpp +++ b/clang-tools-extra/clangd/CodeComplete.cpp @@ -418,7 +418,7 @@ struct CodeCompletionBuilder { auto Inserted = [&](llvm::StringRef Header) -> llvm::Expected> { auto ResolvedDeclaring = - URI::resolve(C.IndexResult->CanonicalDeclaration.FileURI, FileName); + URI::resolve(C.IndexResult->CanonicalDeclaration.fileURI(), FileName); if (!ResolvedDeclaring) return ResolvedDeclaring.takeError(); auto ResolvedInserted = toHeaderFile(Header, FileName); @@ -451,7 +451,7 @@ struct CodeCompletionBuilder { } else log("Failed to generate include insertion edits for adding header " "(FileURI='{0}', IncludeHeader='{1}') into {2}: {3}", -C.IndexResult->CanonicalDeclaration.FileURI, Inc.Header, FileName, +C.IndexResult->CanonicalDeclaration.fileURI(), Inc.Header, FileName, ToInclude.takeError()); } // Prefer includes that do not need edits (i.e. already exist). diff --git a/clang-tools-extra/clangd/FindSymbols.cpp b/clang-tools-extra/clangd/FindSymbols.cpp index 84bcbc1f2ddd3f..646cb261309c80 100644 --- a/clang-tools-extra/clangd/FindSymbols.cpp +++ b/clang-tools-extra/clangd/FindSymbols.cpp @@ -54,9 +54,19 @@ bool approximateScopeMatch(llvm::StringRef Scope, llvm::StringRef Query) { return Query.empty(); } +Range indexToLSPRange(const SymbolPosition &SrcStart, + const SymbolPosition &SrcEnd) { + Position Start, End; + Start.line = SrcStart.line(); + Start.character = SrcStart.column(); + End.line = SrcEnd.line(); + End.character = SrcEnd.column(); + return {Start, End}; +} + } // namespace -llvm::Expected indexToLSPLocation(const SymbolLocation &Loc, +llvm::Expected indexToLSPLocation(const SymbolNameLocation &Loc, llvm::StringRef TUPath) { auto Path = URI::resolve(Loc.FileURI, TUPath); if (!Path) @@ -64,17 +74,21 @@ llvm::Expected indexToLSPLocation(const SymbolLocation &Loc, Path.takeError()); Location L; L.uri = URIForFile::canonicalize(*Path, TUPath); - Position Start, End; - Start.line = Loc.Start.line(); - Start.character = Loc.Start.column(); - End
[clang-tools-extra] [clangd] Store full decl/def range with symbol locations (PR #118102)
https://github.com/ckandeler updated https://github.com/llvm/llvm-project/pull/118102 >From 188cbf1a7d3e83c0a558550351a373c1c3475d4e Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 27 Nov 2024 13:47:32 +0100 Subject: [PATCH] [clangd] Store full decl/def range with symbol locations Apart from fixing the linked issue, this is also necessary for supporting LSP's LocationLink feature and for finding proper insertion locations in the DefineOutline tweak. Memory consumption of the background index grows by about ~2.5%. Closes https://github.com/clangd/clangd/issues/59 --- clang-tools-extra/clangd/CodeComplete.cpp | 4 +- clang-tools-extra/clangd/FindSymbols.cpp | 34 -- clang-tools-extra/clangd/FindSymbols.h| 8 +- .../clangd/HeaderSourceSwitch.cpp | 4 +- clang-tools-extra/clangd/IncludeFixer.cpp | 6 +- clang-tools-extra/clangd/Quality.cpp | 2 +- clang-tools-extra/clangd/XRefs.cpp| 65 ++- clang-tools-extra/clangd/index/FileIndex.cpp | 6 +- clang-tools-extra/clangd/index/Merge.cpp | 13 ++- clang-tools-extra/clangd/index/Ref.h | 11 +- .../clangd/index/Serialization.cpp| 36 -- clang-tools-extra/clangd/index/StdLib.cpp | 12 +- clang-tools-extra/clangd/index/Symbol.h | 8 +- .../clangd/index/SymbolCollector.cpp | 89 +++ .../clangd/index/SymbolCollector.h| 3 +- .../clangd/index/SymbolLocation.cpp | 11 +- .../clangd/index/SymbolLocation.h | 103 +++--- .../clangd/index/YAMLSerialization.cpp| 37 +-- clang-tools-extra/clangd/index/dex/Dex.cpp| 4 +- clang-tools-extra/clangd/refactor/Rename.cpp | 4 +- .../clangd/test/Inputs/symbols.test.yaml | 17 ++- .../index-serialization/Inputs/sample.idx | Bin 470 -> 496 bytes .../clangd/test/type-hierarchy-ext.test | 8 +- .../clangd/test/type-hierarchy.test | 8 +- .../clangd/unittests/BackgroundIndexTests.cpp | 4 +- .../clangd/unittests/CodeCompleteTests.cpp| 18 +-- .../clangd/unittests/DexTests.cpp | 5 +- .../clangd/unittests/DiagnosticsTests.cpp | 13 ++- .../clangd/unittests/FileIndexTests.cpp | 14 +-- .../clangd/unittests/IndexTests.cpp | 45 .../clangd/unittests/SerializationTests.cpp | 23 +++- .../clangd/unittests/SymbolCollectorTests.cpp | 12 +- 32 files changed, 388 insertions(+), 239 deletions(-) diff --git a/clang-tools-extra/clangd/CodeComplete.cpp b/clang-tools-extra/clangd/CodeComplete.cpp index 2c2d5f0b5ac924..04e4aa2d2d1ca9 100644 --- a/clang-tools-extra/clangd/CodeComplete.cpp +++ b/clang-tools-extra/clangd/CodeComplete.cpp @@ -418,7 +418,7 @@ struct CodeCompletionBuilder { auto Inserted = [&](llvm::StringRef Header) -> llvm::Expected> { auto ResolvedDeclaring = - URI::resolve(C.IndexResult->CanonicalDeclaration.FileURI, FileName); + URI::resolve(C.IndexResult->CanonicalDeclaration.fileURI(), FileName); if (!ResolvedDeclaring) return ResolvedDeclaring.takeError(); auto ResolvedInserted = toHeaderFile(Header, FileName); @@ -451,7 +451,7 @@ struct CodeCompletionBuilder { } else log("Failed to generate include insertion edits for adding header " "(FileURI='{0}', IncludeHeader='{1}') into {2}: {3}", -C.IndexResult->CanonicalDeclaration.FileURI, Inc.Header, FileName, +C.IndexResult->CanonicalDeclaration.fileURI(), Inc.Header, FileName, ToInclude.takeError()); } // Prefer includes that do not need edits (i.e. already exist). diff --git a/clang-tools-extra/clangd/FindSymbols.cpp b/clang-tools-extra/clangd/FindSymbols.cpp index 84bcbc1f2ddd3f..646cb261309c80 100644 --- a/clang-tools-extra/clangd/FindSymbols.cpp +++ b/clang-tools-extra/clangd/FindSymbols.cpp @@ -54,9 +54,19 @@ bool approximateScopeMatch(llvm::StringRef Scope, llvm::StringRef Query) { return Query.empty(); } +Range indexToLSPRange(const SymbolPosition &SrcStart, + const SymbolPosition &SrcEnd) { + Position Start, End; + Start.line = SrcStart.line(); + Start.character = SrcStart.column(); + End.line = SrcEnd.line(); + End.character = SrcEnd.column(); + return {Start, End}; +} + } // namespace -llvm::Expected indexToLSPLocation(const SymbolLocation &Loc, +llvm::Expected indexToLSPLocation(const SymbolNameLocation &Loc, llvm::StringRef TUPath) { auto Path = URI::resolve(Loc.FileURI, TUPath); if (!Path) @@ -64,17 +74,21 @@ llvm::Expected indexToLSPLocation(const SymbolLocation &Loc, Path.takeError()); Location L; L.uri = URIForFile::canonicalize(*Path, TUPath); - Position Start, End; - Start.line = Loc.Start.line(); - Start.character = Loc.Start.column(); - End.line = Loc.End.line(); - End.character = Loc.End.colum
[clang-tools-extra] [clangd] Store full decl/def range with symbol locations (PR #118102)
llvmbot wrote: @llvm/pr-subscribers-clangd Author: Christian Kandeler (ckandeler) Changes Apart from fixing the linked issue, this is also necessary for supporting LSP's LocationLink feature and for finding proper insertion locations in the DefineOutline tweak. Memory consumption of the background index grows by about ~2.5%. Closes https://github.com/clangd/clangd/issues/59 --- Patch is 69.37 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/118102.diff 32 Files Affected: - (modified) clang-tools-extra/clangd/CodeComplete.cpp (+2-2) - (modified) clang-tools-extra/clangd/FindSymbols.cpp (+24-10) - (modified) clang-tools-extra/clangd/FindSymbols.h (+5-3) - (modified) clang-tools-extra/clangd/HeaderSourceSwitch.cpp (+2-2) - (modified) clang-tools-extra/clangd/IncludeFixer.cpp (+3-3) - (modified) clang-tools-extra/clangd/Quality.cpp (+1-1) - (modified) clang-tools-extra/clangd/XRefs.cpp (+35-30) - (modified) clang-tools-extra/clangd/index/FileIndex.cpp (+3-3) - (modified) clang-tools-extra/clangd/index/Merge.cpp (+7-6) - (modified) clang-tools-extra/clangd/index/Ref.h (+4-7) - (modified) clang-tools-extra/clangd/index/Serialization.cpp (+28-8) - (modified) clang-tools-extra/clangd/index/StdLib.cpp (+6-6) - (modified) clang-tools-extra/clangd/index/Symbol.h (+4-4) - (modified) clang-tools-extra/clangd/index/SymbolCollector.cpp (+68-21) - (modified) clang-tools-extra/clangd/index/SymbolCollector.h (+2-1) - (modified) clang-tools-extra/clangd/index/SymbolLocation.cpp (+6-5) - (modified) clang-tools-extra/clangd/index/SymbolLocation.h (+62-41) - (modified) clang-tools-extra/clangd/index/YAMLSerialization.cpp (+25-12) - (modified) clang-tools-extra/clangd/index/dex/Dex.cpp (+2-2) - (modified) clang-tools-extra/clangd/refactor/Rename.cpp (+2-2) - (modified) clang-tools-extra/clangd/test/Inputs/symbols.test.yaml (+12-5) - (modified) clang-tools-extra/clangd/test/index-serialization/Inputs/sample.idx () - (modified) clang-tools-extra/clangd/test/type-hierarchy-ext.test (+4-4) - (modified) clang-tools-extra/clangd/test/type-hierarchy.test (+4-4) - (modified) clang-tools-extra/clangd/unittests/BackgroundIndexTests.cpp (+2-2) - (modified) clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp (+9-9) - (modified) clang-tools-extra/clangd/unittests/DexTests.cpp (+3-2) - (modified) clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp (+7-6) - (modified) clang-tools-extra/clangd/unittests/FileIndexTests.cpp (+7-7) - (modified) clang-tools-extra/clangd/unittests/IndexTests.cpp (+23-22) - (modified) clang-tools-extra/clangd/unittests/SerializationTests.cpp (+19-4) - (modified) clang-tools-extra/clangd/unittests/SymbolCollectorTests.cpp (+7-5) ``diff diff --git a/clang-tools-extra/clangd/CodeComplete.cpp b/clang-tools-extra/clangd/CodeComplete.cpp index 2c2d5f0b5ac924..04e4aa2d2d1ca9 100644 --- a/clang-tools-extra/clangd/CodeComplete.cpp +++ b/clang-tools-extra/clangd/CodeComplete.cpp @@ -418,7 +418,7 @@ struct CodeCompletionBuilder { auto Inserted = [&](llvm::StringRef Header) -> llvm::Expected> { auto ResolvedDeclaring = - URI::resolve(C.IndexResult->CanonicalDeclaration.FileURI, FileName); + URI::resolve(C.IndexResult->CanonicalDeclaration.fileURI(), FileName); if (!ResolvedDeclaring) return ResolvedDeclaring.takeError(); auto ResolvedInserted = toHeaderFile(Header, FileName); @@ -451,7 +451,7 @@ struct CodeCompletionBuilder { } else log("Failed to generate include insertion edits for adding header " "(FileURI='{0}', IncludeHeader='{1}') into {2}: {3}", -C.IndexResult->CanonicalDeclaration.FileURI, Inc.Header, FileName, +C.IndexResult->CanonicalDeclaration.fileURI(), Inc.Header, FileName, ToInclude.takeError()); } // Prefer includes that do not need edits (i.e. already exist). diff --git a/clang-tools-extra/clangd/FindSymbols.cpp b/clang-tools-extra/clangd/FindSymbols.cpp index 84bcbc1f2ddd3f..646cb261309c80 100644 --- a/clang-tools-extra/clangd/FindSymbols.cpp +++ b/clang-tools-extra/clangd/FindSymbols.cpp @@ -54,9 +54,19 @@ bool approximateScopeMatch(llvm::StringRef Scope, llvm::StringRef Query) { return Query.empty(); } +Range indexToLSPRange(const SymbolPosition &SrcStart, + const SymbolPosition &SrcEnd) { + Position Start, End; + Start.line = SrcStart.line(); + Start.character = SrcStart.column(); + End.line = SrcEnd.line(); + End.character = SrcEnd.column(); + return {Start, End}; +} + } // namespace -llvm::Expected indexToLSPLocation(const SymbolLocation &Loc, +llvm::Expected indexToLSPLocation(const SymbolNameLocation &Loc, llvm::StringRef TUPath) { auto Path = URI::resolve(Loc.FileURI, TUPath); if (!Path) @@ -64,17 +74,21 @@ llvm::Expected indexToLSPLocation(const SymbolLocation &Loc
[clang-tools-extra] [clangd] Store full decl/def range with symbol locations (PR #118102)
llvmbot wrote: @llvm/pr-subscribers-clang-tools-extra Author: Christian Kandeler (ckandeler) Changes Apart from fixing the linked issue, this is also necessary for supporting LSP's LocationLink feature and for finding proper insertion locations in the DefineOutline tweak. Memory consumption of the background index grows by about ~2.5%. Closes https://github.com/clangd/clangd/issues/59 --- Patch is 69.37 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/118102.diff 32 Files Affected: - (modified) clang-tools-extra/clangd/CodeComplete.cpp (+2-2) - (modified) clang-tools-extra/clangd/FindSymbols.cpp (+24-10) - (modified) clang-tools-extra/clangd/FindSymbols.h (+5-3) - (modified) clang-tools-extra/clangd/HeaderSourceSwitch.cpp (+2-2) - (modified) clang-tools-extra/clangd/IncludeFixer.cpp (+3-3) - (modified) clang-tools-extra/clangd/Quality.cpp (+1-1) - (modified) clang-tools-extra/clangd/XRefs.cpp (+35-30) - (modified) clang-tools-extra/clangd/index/FileIndex.cpp (+3-3) - (modified) clang-tools-extra/clangd/index/Merge.cpp (+7-6) - (modified) clang-tools-extra/clangd/index/Ref.h (+4-7) - (modified) clang-tools-extra/clangd/index/Serialization.cpp (+28-8) - (modified) clang-tools-extra/clangd/index/StdLib.cpp (+6-6) - (modified) clang-tools-extra/clangd/index/Symbol.h (+4-4) - (modified) clang-tools-extra/clangd/index/SymbolCollector.cpp (+68-21) - (modified) clang-tools-extra/clangd/index/SymbolCollector.h (+2-1) - (modified) clang-tools-extra/clangd/index/SymbolLocation.cpp (+6-5) - (modified) clang-tools-extra/clangd/index/SymbolLocation.h (+62-41) - (modified) clang-tools-extra/clangd/index/YAMLSerialization.cpp (+25-12) - (modified) clang-tools-extra/clangd/index/dex/Dex.cpp (+2-2) - (modified) clang-tools-extra/clangd/refactor/Rename.cpp (+2-2) - (modified) clang-tools-extra/clangd/test/Inputs/symbols.test.yaml (+12-5) - (modified) clang-tools-extra/clangd/test/index-serialization/Inputs/sample.idx () - (modified) clang-tools-extra/clangd/test/type-hierarchy-ext.test (+4-4) - (modified) clang-tools-extra/clangd/test/type-hierarchy.test (+4-4) - (modified) clang-tools-extra/clangd/unittests/BackgroundIndexTests.cpp (+2-2) - (modified) clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp (+9-9) - (modified) clang-tools-extra/clangd/unittests/DexTests.cpp (+3-2) - (modified) clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp (+7-6) - (modified) clang-tools-extra/clangd/unittests/FileIndexTests.cpp (+7-7) - (modified) clang-tools-extra/clangd/unittests/IndexTests.cpp (+23-22) - (modified) clang-tools-extra/clangd/unittests/SerializationTests.cpp (+19-4) - (modified) clang-tools-extra/clangd/unittests/SymbolCollectorTests.cpp (+7-5) ``diff diff --git a/clang-tools-extra/clangd/CodeComplete.cpp b/clang-tools-extra/clangd/CodeComplete.cpp index 2c2d5f0b5ac924..04e4aa2d2d1ca9 100644 --- a/clang-tools-extra/clangd/CodeComplete.cpp +++ b/clang-tools-extra/clangd/CodeComplete.cpp @@ -418,7 +418,7 @@ struct CodeCompletionBuilder { auto Inserted = [&](llvm::StringRef Header) -> llvm::Expected> { auto ResolvedDeclaring = - URI::resolve(C.IndexResult->CanonicalDeclaration.FileURI, FileName); + URI::resolve(C.IndexResult->CanonicalDeclaration.fileURI(), FileName); if (!ResolvedDeclaring) return ResolvedDeclaring.takeError(); auto ResolvedInserted = toHeaderFile(Header, FileName); @@ -451,7 +451,7 @@ struct CodeCompletionBuilder { } else log("Failed to generate include insertion edits for adding header " "(FileURI='{0}', IncludeHeader='{1}') into {2}: {3}", -C.IndexResult->CanonicalDeclaration.FileURI, Inc.Header, FileName, +C.IndexResult->CanonicalDeclaration.fileURI(), Inc.Header, FileName, ToInclude.takeError()); } // Prefer includes that do not need edits (i.e. already exist). diff --git a/clang-tools-extra/clangd/FindSymbols.cpp b/clang-tools-extra/clangd/FindSymbols.cpp index 84bcbc1f2ddd3f..646cb261309c80 100644 --- a/clang-tools-extra/clangd/FindSymbols.cpp +++ b/clang-tools-extra/clangd/FindSymbols.cpp @@ -54,9 +54,19 @@ bool approximateScopeMatch(llvm::StringRef Scope, llvm::StringRef Query) { return Query.empty(); } +Range indexToLSPRange(const SymbolPosition &SrcStart, + const SymbolPosition &SrcEnd) { + Position Start, End; + Start.line = SrcStart.line(); + Start.character = SrcStart.column(); + End.line = SrcEnd.line(); + End.character = SrcEnd.column(); + return {Start, End}; +} + } // namespace -llvm::Expected indexToLSPLocation(const SymbolLocation &Loc, +llvm::Expected indexToLSPLocation(const SymbolNameLocation &Loc, llvm::StringRef TUPath) { auto Path = URI::resolve(Loc.FileURI, TUPath); if (!Path) @@ -64,17 +74,21 @@ llvm::Expected indexToLSPLocation(const SymbolLo
[clang-tools-extra] [clangd] Store full decl/def range with symbol locations (PR #118102)
https://github.com/ckandeler created https://github.com/llvm/llvm-project/pull/118102 Apart from fixing the linked issue, this is also necessary for supporting LSP's LocationLink feature and for finding proper insertion locations in the DefineOutline tweak. Memory consumption of the background index grows by about ~2.5%. Closes https://github.com/clangd/clangd/issues/59 >From 99e7189c6f3c19e3aabeee56793f5683251ecb26 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 27 Nov 2024 13:47:32 +0100 Subject: [PATCH] [clangd] Store full decl/def range with symbol locations Apart from fixing the linked issue, this is also necessary for supporting LSP's LocationLink feature and for finding proper insertion locations in the DefineOutline tweak. Memory consumption of the background index grows by about ~2.5%. Closes https://github.com/clangd/clangd/issues/59 --- clang-tools-extra/clangd/CodeComplete.cpp | 4 +- clang-tools-extra/clangd/FindSymbols.cpp | 34 -- clang-tools-extra/clangd/FindSymbols.h| 8 +- .../clangd/HeaderSourceSwitch.cpp | 4 +- clang-tools-extra/clangd/IncludeFixer.cpp | 6 +- clang-tools-extra/clangd/Quality.cpp | 2 +- clang-tools-extra/clangd/XRefs.cpp| 65 ++- clang-tools-extra/clangd/index/FileIndex.cpp | 6 +- clang-tools-extra/clangd/index/Merge.cpp | 13 ++- clang-tools-extra/clangd/index/Ref.h | 11 +- .../clangd/index/Serialization.cpp| 36 -- clang-tools-extra/clangd/index/StdLib.cpp | 12 +- clang-tools-extra/clangd/index/Symbol.h | 8 +- .../clangd/index/SymbolCollector.cpp | 89 +++ .../clangd/index/SymbolCollector.h| 3 +- .../clangd/index/SymbolLocation.cpp | 11 +- .../clangd/index/SymbolLocation.h | 103 +++--- .../clangd/index/YAMLSerialization.cpp| 37 +-- clang-tools-extra/clangd/index/dex/Dex.cpp| 4 +- clang-tools-extra/clangd/refactor/Rename.cpp | 4 +- .../clangd/test/Inputs/symbols.test.yaml | 17 ++- .../index-serialization/Inputs/sample.idx | Bin 470 -> 496 bytes .../clangd/test/type-hierarchy-ext.test | 8 +- .../clangd/test/type-hierarchy.test | 8 +- .../clangd/unittests/BackgroundIndexTests.cpp | 4 +- .../clangd/unittests/CodeCompleteTests.cpp| 18 +-- .../clangd/unittests/DexTests.cpp | 5 +- .../clangd/unittests/DiagnosticsTests.cpp | 13 ++- .../clangd/unittests/FileIndexTests.cpp | 14 +-- .../clangd/unittests/IndexTests.cpp | 45 .../clangd/unittests/SerializationTests.cpp | 23 +++- .../clangd/unittests/SymbolCollectorTests.cpp | 12 +- 32 files changed, 388 insertions(+), 239 deletions(-) diff --git a/clang-tools-extra/clangd/CodeComplete.cpp b/clang-tools-extra/clangd/CodeComplete.cpp index 2c2d5f0b5ac924..04e4aa2d2d1ca9 100644 --- a/clang-tools-extra/clangd/CodeComplete.cpp +++ b/clang-tools-extra/clangd/CodeComplete.cpp @@ -418,7 +418,7 @@ struct CodeCompletionBuilder { auto Inserted = [&](llvm::StringRef Header) -> llvm::Expected> { auto ResolvedDeclaring = - URI::resolve(C.IndexResult->CanonicalDeclaration.FileURI, FileName); + URI::resolve(C.IndexResult->CanonicalDeclaration.fileURI(), FileName); if (!ResolvedDeclaring) return ResolvedDeclaring.takeError(); auto ResolvedInserted = toHeaderFile(Header, FileName); @@ -451,7 +451,7 @@ struct CodeCompletionBuilder { } else log("Failed to generate include insertion edits for adding header " "(FileURI='{0}', IncludeHeader='{1}') into {2}: {3}", -C.IndexResult->CanonicalDeclaration.FileURI, Inc.Header, FileName, +C.IndexResult->CanonicalDeclaration.fileURI(), Inc.Header, FileName, ToInclude.takeError()); } // Prefer includes that do not need edits (i.e. already exist). diff --git a/clang-tools-extra/clangd/FindSymbols.cpp b/clang-tools-extra/clangd/FindSymbols.cpp index 84bcbc1f2ddd3f..646cb261309c80 100644 --- a/clang-tools-extra/clangd/FindSymbols.cpp +++ b/clang-tools-extra/clangd/FindSymbols.cpp @@ -54,9 +54,19 @@ bool approximateScopeMatch(llvm::StringRef Scope, llvm::StringRef Query) { return Query.empty(); } +Range indexToLSPRange(const SymbolPosition &SrcStart, + const SymbolPosition &SrcEnd) { + Position Start, End; + Start.line = SrcStart.line(); + Start.character = SrcStart.column(); + End.line = SrcEnd.line(); + End.character = SrcEnd.column(); + return {Start, End}; +} + } // namespace -llvm::Expected indexToLSPLocation(const SymbolLocation &Loc, +llvm::Expected indexToLSPLocation(const SymbolNameLocation &Loc, llvm::StringRef TUPath) { auto Path = URI::resolve(Loc.FileURI, TUPath); if (!Path) @@ -64,17 +74,21 @@ llvm::Expected indexToLSPLocation(c