Merge pull request #18848 from ahoppen/remove-reuse-regions

[SourceKit] Remove option to regions reused as part of incremental parsing
This commit is contained in:
Alex Hoppen
2018-08-21 13:52:11 -07:00
committed by GitHub
6 changed files with 12 additions and 77 deletions

View File

@@ -273,10 +273,6 @@ public:
} }
virtual SyntaxTreeTransferMode syntaxTreeTransferMode() = 0; virtual SyntaxTreeTransferMode syntaxTreeTransferMode() = 0;
virtual bool syntaxReuseInfoEnabled() = 0;
virtual void
handleSyntaxReuseRegions(std::vector<SourceFileRange> ReuseRegions) = 0;
virtual void finished() {} virtual void finished() {}
}; };

View File

@@ -2265,44 +2265,23 @@ void SwiftLangSupport::editorReplaceText(StringRef Name,
EditorDoc->readSyntaxInfo(Consumer); EditorDoc->readSyntaxInfo(Consumer);
// Log reuse information // Log reuse information
if (SyntaxCache.hasValue()) { if (SyntaxCache.hasValue() && LogReuseRegions) {
// Avoid computing the reused ranges if the consumer doesn't care about auto &SyntaxTree = EditorDoc->getSyntaxTree();
// them auto ReuseRegions = SyntaxCache->getReusedRegions(*SyntaxTree);
if (Consumer.syntaxReuseInfoEnabled()) { LOG_SECTION("SyntaxCache", InfoHighPrio) {
auto &SyntaxTree = EditorDoc->getSyntaxTree(); Log->getOS() << "Reused ";
auto ReuseRegions = SyntaxCache->getReusedRegions(*SyntaxTree);
// Abstract away from SyntaxReuseRegions to std::pair<unsigned, unsigned> bool FirstIteration = true;
// so that SourceKit doesn't have to import swiftParse
std::vector<SourceFileRange> ReuseRegionOffsets;
ReuseRegionOffsets.reserve(ReuseRegions.size());
for (auto ReuseRegion : ReuseRegions) { for (auto ReuseRegion : ReuseRegions) {
auto Start = ReuseRegion.Start.getOffset(); if (!FirstIteration) {
auto End = ReuseRegion.End.getOffset(); Log->getOS() << ", ";
ReuseRegionOffsets.push_back({Start, End}); } else {
} FirstIteration = false;
Consumer.handleSyntaxReuseRegions(ReuseRegionOffsets);
}
if (LogReuseRegions) {
auto &SyntaxTree = EditorDoc->getSyntaxTree();
auto ReuseRegions = SyntaxCache->getReusedRegions(*SyntaxTree);
LOG_SECTION("SyntaxCache", InfoHighPrio) {
Log->getOS() << "Reused ";
bool FirstIteration = true;
for (auto ReuseRegion : ReuseRegions) {
if (!FirstIteration) {
Log->getOS() << ", ";
} else {
FirstIteration = false;
}
Log->getOS() << ReuseRegion.Start << " - " << ReuseRegion.End;
} }
Log->getOS() << ReuseRegion.Start << " - " << ReuseRegion.End;
} }
} }
} else {
Consumer.handleSyntaxReuseRegions({});
} }
if (Consumer.syntaxTreeEnabled()) { if (Consumer.syntaxTreeEnabled()) {

View File

@@ -81,7 +81,6 @@ struct SKEditorConsumerOptions {
SyntaxTreeSerializationFormat SyntaxSerializationFormat = SyntaxTreeSerializationFormat SyntaxSerializationFormat =
SyntaxTreeSerializationFormat::JSON; SyntaxTreeSerializationFormat::JSON;
bool SyntacticOnly = false; bool SyntacticOnly = false;
bool EnableSyntaxReuseInfo = false;
}; };
} // anonymous namespace } // anonymous namespace
@@ -471,9 +470,6 @@ void handleRequestImpl(sourcekitd_object_t ReqObj, ResponseReceiver Rec) {
auto SerializationFormatUID = Req.getUID(KeySyntaxTreeSerializationFormat); auto SerializationFormatUID = Req.getUID(KeySyntaxTreeSerializationFormat);
int64_t SyntacticOnly = false; int64_t SyntacticOnly = false;
Req.getInt64(KeySyntacticOnly, SyntacticOnly, /*isOptional=*/true); Req.getInt64(KeySyntacticOnly, SyntacticOnly, /*isOptional=*/true);
int64_t EnableSyntaxReuseInfo = false;
Req.getInt64(KeyEnableSyntaxReuseRegions, EnableSyntaxReuseInfo,
/*isOptional=*/true);
SKEditorConsumerOptions Opts; SKEditorConsumerOptions Opts;
Opts.EnableSyntaxMap = EnableSyntaxMap; Opts.EnableSyntaxMap = EnableSyntaxMap;
@@ -486,7 +482,6 @@ void handleRequestImpl(sourcekitd_object_t ReqObj, ResponseReceiver Rec) {
return Rec(createErrorRequestFailed("Invalid serialization format")); return Rec(createErrorRequestFailed("Invalid serialization format"));
Opts.SyntaxSerializationFormat = SyntaxSerializationFormat.getValue(); Opts.SyntaxSerializationFormat = SyntaxSerializationFormat.getValue();
Opts.SyntacticOnly = SyntacticOnly; Opts.SyntacticOnly = SyntacticOnly;
Opts.EnableSyntaxReuseInfo = EnableSyntaxReuseInfo;
return Rec(editorOpen(*Name, InputBuf.get(), Opts, Args)); return Rec(editorOpen(*Name, InputBuf.get(), Opts, Args));
} }
if (ReqUID == RequestEditorClose) { if (ReqUID == RequestEditorClose) {
@@ -519,9 +514,6 @@ void handleRequestImpl(sourcekitd_object_t ReqObj, ResponseReceiver Rec) {
Req.getInt64(KeyEnableDiagnostics, EnableDiagnostics, /*isOptional=*/true); Req.getInt64(KeyEnableDiagnostics, EnableDiagnostics, /*isOptional=*/true);
int64_t SyntacticOnly = false; int64_t SyntacticOnly = false;
Req.getInt64(KeySyntacticOnly, SyntacticOnly, /*isOptional=*/true); Req.getInt64(KeySyntacticOnly, SyntacticOnly, /*isOptional=*/true);
int64_t EnableSyntaxReuseInfo = false;
Req.getInt64(KeyEnableSyntaxReuseRegions, EnableSyntaxReuseInfo,
/*isOptional=*/true);
auto TransferModeUID = Req.getUID(KeySyntaxTreeTransferMode); auto TransferModeUID = Req.getUID(KeySyntaxTreeTransferMode);
auto SerializationFormatUID = Req.getUID(KeySyntaxTreeSerializationFormat); auto SerializationFormatUID = Req.getUID(KeySyntaxTreeSerializationFormat);
@@ -535,9 +527,7 @@ void handleRequestImpl(sourcekitd_object_t ReqObj, ResponseReceiver Rec) {
if (!SyntaxSerializationFormat) if (!SyntaxSerializationFormat)
return Rec(createErrorRequestFailed("Invalid serialization format")); return Rec(createErrorRequestFailed("Invalid serialization format"));
Opts.SyntaxSerializationFormat = SyntaxSerializationFormat.getValue(); Opts.SyntaxSerializationFormat = SyntaxSerializationFormat.getValue();
Opts.EnableSyntaxReuseInfo = EnableSyntaxReuseInfo;
Opts.SyntacticOnly = SyntacticOnly; Opts.SyntacticOnly = SyntacticOnly;
Opts.EnableSyntaxReuseInfo = EnableSyntaxReuseInfo;
return Rec(editorReplaceText(*Name, InputBuf.get(), Offset, Length, Opts)); return Rec(editorReplaceText(*Name, InputBuf.get(), Offset, Length, Opts));
} }
@@ -2120,10 +2110,6 @@ public:
void handleSyntaxTree(const swift::syntax::SourceFileSyntax &SyntaxTree, void handleSyntaxTree(const swift::syntax::SourceFileSyntax &SyntaxTree,
std::unordered_set<unsigned> &ReusedNodeIds) override; std::unordered_set<unsigned> &ReusedNodeIds) override;
bool syntaxReuseInfoEnabled() override { return Opts.EnableSyntaxReuseInfo; }
void
handleSyntaxReuseRegions(std::vector<SourceFileRange> ReuseRegions) override;
SyntaxTreeTransferMode syntaxTreeTransferMode() override { SyntaxTreeTransferMode syntaxTreeTransferMode() override {
return Opts.SyntaxTransferMode; return Opts.SyntaxTransferMode;
} }
@@ -2537,19 +2523,6 @@ void SKEditorConsumer::handleSyntaxTree(
} }
} }
void SKEditorConsumer::handleSyntaxReuseRegions(
std::vector<SourceFileRange> ReuseRegions) {
if (Opts.EnableSyntaxReuseInfo) {
auto Array = Dict.setArray(KeySyntaxReuseRegions);
for (auto Region : ReuseRegions) {
auto SubDict = Array.appendDictionary();
SubDict.set(KeyOffset, Region.Start);
SubDict.set(KeyLength, Region.End - Region.Start);
}
}
}
static sourcekitd_response_t static sourcekitd_response_t
editorFindUSR(StringRef DocumentName, StringRef USR) { editorFindUSR(StringRef DocumentName, StringRef USR) {
ResponseBuilder RespBuilder; ResponseBuilder RespBuilder;

View File

@@ -85,12 +85,6 @@ class NullEditorConsumer : public EditorConsumer {
return SyntaxTreeTransferMode::Off; return SyntaxTreeTransferMode::Off;
} }
bool syntaxReuseInfoEnabled() override { return false; }
void
handleSyntaxReuseRegions(std::vector<SourceFileRange> ReuseRegions) override {
}
public: public:
bool needsSema = false; bool needsSema = false;
}; };

View File

@@ -93,11 +93,6 @@ private:
return SyntaxTreeTransferMode::Off; return SyntaxTreeTransferMode::Off;
} }
bool syntaxReuseInfoEnabled() override { return false; }
void
handleSyntaxReuseRegions(std::vector<SourceFileRange> ReuseRegions) override {
}
}; };
struct DocUpdateMutexState { struct DocUpdateMutexState {

View File

@@ -47,9 +47,7 @@ UID_KEYS = [
KEY('Length', 'key.length'), KEY('Length', 'key.length'),
KEY('SourceFile', 'key.sourcefile'), KEY('SourceFile', 'key.sourcefile'),
KEY('SerializedSyntaxTree', 'key.serialized_syntax_tree'), KEY('SerializedSyntaxTree', 'key.serialized_syntax_tree'),
KEY('SyntaxReuseRegions', 'key.syntaxreuseregions'),
KEY('SourceText', 'key.sourcetext'), KEY('SourceText', 'key.sourcetext'),
KEY('EnableSyntaxReuseRegions', 'key.enablesyntaxreuseregions'),
KEY('EnableSyntaxMap', 'key.enablesyntaxmap'), KEY('EnableSyntaxMap', 'key.enablesyntaxmap'),
KEY('SyntaxTreeTransferMode', 'key.syntaxtreetransfermode'), KEY('SyntaxTreeTransferMode', 'key.syntaxtreetransfermode'),
KEY('SyntaxTreeSerializationFormat', KEY('SyntaxTreeSerializationFormat',