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 bool syntaxReuseInfoEnabled() = 0;
virtual void
handleSyntaxReuseRegions(std::vector<SourceFileRange> ReuseRegions) = 0;
virtual void finished() {}
};

View File

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

View File

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

View File

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

View File

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

View File

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