36
36
#include " indexer/Path.h"
37
37
#include " indexer/ScipExtras.h"
38
38
#include " indexer/SymbolFormatter.h"
39
+ #include " indexer/SymbolName.h"
39
40
#include " indexer/Tracing.h"
40
41
41
42
namespace scip_clang {
@@ -105,7 +106,8 @@ void FileLocalMacroOccurrence::emitOccurrence(SymbolFormatter &symbolFormatter,
105
106
break ;
106
107
}
107
108
this ->range .addToOccurrence (occ);
108
- auto name = symbolFormatter.getMacroSymbol (this ->defInfo ->getDefinitionLoc ());
109
+ auto name =
110
+ symbolFormatter.getMacroSymbol (this ->defInfo ->getDefinitionLoc ()).value ;
109
111
occ.set_symbol (name.data (), name.size ());
110
112
}
111
113
@@ -126,7 +128,8 @@ std::strong_ordering operator<=>(const NonFileBasedMacro &m1,
126
128
void NonFileBasedMacro::emitSymbolInformation (
127
129
SymbolFormatter &symbolFormatter,
128
130
scip::SymbolInformation &symbolInfo) const {
129
- auto name = symbolFormatter.getMacroSymbol (this ->defInfo ->getDefinitionLoc ());
131
+ auto name =
132
+ symbolFormatter.getMacroSymbol (this ->defInfo ->getDefinitionLoc ()).value ;
130
133
symbolInfo.set_symbol (name.data (), name.size ());
131
134
}
132
135
@@ -465,7 +468,7 @@ void TuIndexer::saveFunctionDecl(const clang::FunctionDecl &functionDecl) {
465
468
if (!optSymbol.has_value ()) {
466
469
return ;
467
470
}
468
- std::string_view symbol = optSymbol.value ();
471
+ auto symbol = optSymbol.value ();
469
472
470
473
if (functionDecl.isPure () || functionDecl.isThisDeclarationADefinition ()) {
471
474
scip::SymbolInformation symbolInfo{};
@@ -476,8 +479,8 @@ void TuIndexer::saveFunctionDecl(const clang::FunctionDecl &functionDecl) {
476
479
if (auto optOverridenSymbol =
477
480
this ->symbolFormatter .getFunctionSymbol (*overridenMethodDecl)) {
478
481
scip::Relationship rel{};
479
- rel. set_symbol ( optOverridenSymbol->data (),
480
- optOverridenSymbol-> size ());
482
+ auto symbol = optOverridenSymbol->value ;
483
+ rel. set_symbol (symbol. data (), symbol. size ());
481
484
rel.set_is_implementation (true );
482
485
rel.set_is_reference (true );
483
486
*symbolInfo.add_relationships () = std::move (rel);
@@ -511,7 +514,7 @@ void TuIndexer::saveNamespaceDecl(const clang::NamespaceDecl &namespaceDecl) {
511
514
if (!optSymbol.has_value ()) {
512
515
return ;
513
516
}
514
- std::string_view symbol = optSymbol.value ();
517
+ auto symbol = optSymbol.value ();
515
518
516
519
// getLocation():
517
520
// - for anonymous namespaces, returns the location of the opening brace {
@@ -674,7 +677,8 @@ void TuIndexer::saveTagDecl(const clang::TagDecl &tagDecl) {
674
677
continue ;
675
678
}
676
679
scip::Relationship rel{};
677
- rel.set_symbol (optRelatedSymbol->data (), optRelatedSymbol->size ());
680
+ auto symbol = optRelatedSymbol->value ;
681
+ rel.set_symbol (symbol.data (), symbol.size ());
678
682
rel.set_is_implementation (true );
679
683
*symbolInfo.add_relationships () = std::move (rel);
680
684
}
@@ -719,7 +723,7 @@ void TuIndexer::saveTemplateSpecializationTypeLoc(
719
723
switch (templateName.getKind ()) {
720
724
case Kind::Template: {
721
725
auto *templateDecl = templateName.getAsTemplateDecl ();
722
- std::optional<std::string_view > optSymbol;
726
+ std::optional<SymbolNameRef > optSymbol;
723
727
if (auto *classTemplateDecl =
724
728
llvm::dyn_cast<clang::ClassTemplateDecl>(templateDecl)) {
725
729
optSymbol = this ->symbolFormatter .getRecordSymbol (
@@ -934,9 +938,9 @@ void TuIndexer::emitDocumentOccurrencesAndSymbols(
934
938
}
935
939
extractTransform (
936
940
std::move (doc.symbolInfos ), deterministic,
937
- absl::FunctionRef<void (std::string_view &&, scip::SymbolInformation &&)>(
938
- [&](auto &&symbolName , auto &&symInfo) {
939
- symInfo.set_symbol (symbolName. data (), symbolName .size ());
941
+ absl::FunctionRef<void (SymbolNameRef &&, scip::SymbolInformation &&)>(
942
+ [&](auto &&symbol , auto &&symInfo) {
943
+ symInfo.set_symbol (symbol. value . data (), symbol. value .size ());
940
944
*scipDocument.add_symbols () = std::move (symInfo);
941
945
}));
942
946
}
@@ -947,9 +951,9 @@ void TuIndexer::emitExternalSymbols(bool deterministic,
947
951
this ->externalSymbols .size ());
948
952
scip_clang::extractTransform (
949
953
std::move (this ->externalSymbols ), deterministic,
950
- absl::FunctionRef<void (std::string_view &&, scip::SymbolInformation &&)>(
954
+ absl::FunctionRef<void (SymbolNameRef &&, scip::SymbolInformation &&)>(
951
955
[&](auto &&symbol, auto &&symbolInfo) {
952
- symbolInfo.set_symbol (symbol.data (), symbol.size ());
956
+ symbolInfo.set_symbol (symbol.value . data (), symbol. value .size ());
953
957
*indexShard.add_external_symbols () = std::move (symbolInfo);
954
958
}));
955
959
}
@@ -960,11 +964,11 @@ void TuIndexer::emitForwardDeclarations(bool deterministic,
960
964
this ->forwardDeclarations .size ());
961
965
scip_clang::extractTransform (
962
966
std::move (this ->forwardDeclarations ), deterministic,
963
- absl::FunctionRef<void (std::string_view &&, DocComment &&)>(
967
+ absl::FunctionRef<void (SymbolNameRef &&, DocComment &&)>(
964
968
[&](auto &&symbol, auto &&docComment) {
965
969
scip::SymbolInformation symbolInfo{};
966
970
docComment.addTo (symbolInfo);
967
- symbolInfo.set_symbol (symbol.data (), symbol.size ());
971
+ symbolInfo.set_symbol (symbol.value . data (), symbol. value .size ());
968
972
// Add a forward declaration SymbolRole here
969
973
// once https://github.com/sourcegraph/scip/issues/131 is fixed.
970
974
*forwardDeclIndex.add_external_symbols () = std::move (symbolInfo);
@@ -982,7 +986,7 @@ TuIndexer::getTokenExpansionRange(
982
986
{startExpansionLoc, endLoc});
983
987
}
984
988
985
- void TuIndexer::saveForwardDeclaration (std::string_view symbol,
989
+ void TuIndexer::saveForwardDeclaration (SymbolNameRef symbol,
986
990
clang::SourceLocation loc,
987
991
DocComment &&docComment) {
988
992
this ->saveReference (symbol, loc);
@@ -995,8 +999,8 @@ void TuIndexer::saveForwardDeclaration(std::string_view symbol,
995
999
return ;
996
1000
}
997
1001
998
- void TuIndexer::saveReference (std::string_view symbol ,
999
- clang::SourceLocation loc, int32_t extraRoles) {
1002
+ void TuIndexer::saveReference (SymbolNameRef symbol, clang::SourceLocation loc ,
1003
+ int32_t extraRoles) {
1000
1004
auto expansionLoc = this ->sourceManager .getExpansionLoc (loc);
1001
1005
auto fileId = this ->sourceManager .getFileID (expansionLoc);
1002
1006
auto optStableFileId = this ->fileMetadataMap .getStableFileId (fileId);
@@ -1009,7 +1013,7 @@ void TuIndexer::saveReference(std::string_view symbol,
1009
1013
}
1010
1014
1011
1015
void TuIndexer::saveDefinition (
1012
- std::string_view symbol, clang::SourceLocation loc,
1016
+ SymbolNameRef symbol, clang::SourceLocation loc,
1013
1017
std::optional<scip::SymbolInformation> &&optSymbolInfo,
1014
1018
int32_t extraRoles) {
1015
1019
auto expansionLoc = this ->sourceManager .getExpansionLoc (loc);
@@ -1032,7 +1036,7 @@ void TuIndexer::saveDefinition(
1032
1036
}
1033
1037
}
1034
1038
1035
- void TuIndexer::saveExternalSymbol (std::string_view symbol,
1039
+ void TuIndexer::saveExternalSymbol (SymbolNameRef symbol,
1036
1040
scip::SymbolInformation &&symbolInfo) {
1037
1041
auto [it, inserted] =
1038
1042
this ->externalSymbols .emplace (symbol, std::move (symbolInfo));
@@ -1043,20 +1047,20 @@ void TuIndexer::saveExternalSymbol(std::string_view symbol,
1043
1047
}
1044
1048
}
1045
1049
1046
- PartialDocument &TuIndexer::saveOccurrence (std::string_view symbol,
1050
+ PartialDocument &TuIndexer::saveOccurrence (SymbolNameRef symbol,
1047
1051
clang::SourceLocation expansionLoc,
1048
1052
int32_t allRoles) {
1049
1053
auto [range, fileId] = this ->getTokenExpansionRange (expansionLoc);
1050
1054
return this ->saveOccurrenceImpl (symbol, range, fileId, allRoles);
1051
1055
}
1052
1056
1053
- PartialDocument &TuIndexer::saveOccurrenceImpl (std::string_view symbol,
1057
+ PartialDocument &TuIndexer::saveOccurrenceImpl (SymbolNameRef symbol,
1054
1058
FileLocalSourceRange range,
1055
1059
clang::FileID fileId,
1056
1060
int32_t allRoles) {
1057
1061
scip::Occurrence occ;
1058
1062
range.addToOccurrence (occ);
1059
- occ.set_symbol (symbol.data (), symbol.size ());
1063
+ occ.set_symbol (symbol.value . data (), symbol. value .size ());
1060
1064
occ.set_symbol_roles (allRoles);
1061
1065
auto &doc = this ->documentMap [{fileId}];
1062
1066
doc.occurrences .emplace_back (scip::OccurrenceExt{std::move (occ)});
0 commit comments