Skip to content

[SourceKit] Change return value of functions in EditorConsumer to void #18416

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 2, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 14 additions & 15 deletions tools/SourceKit/include/SourceKit/Core/LangSupport.h
Original file line number Diff line number Diff line change
Expand Up @@ -222,15 +222,15 @@ class EditorConsumer {
virtual void handleRequestError(const char *Description) = 0;

virtual bool syntaxMapEnabled() = 0;
virtual bool handleSyntaxMap(unsigned Offset, unsigned Length,
virtual void handleSyntaxMap(unsigned Offset, unsigned Length,
UIdent Kind) = 0;

virtual bool documentStructureEnabled() = 0;

virtual bool handleSemanticAnnotation(unsigned Offset, unsigned Length,
virtual void handleSemanticAnnotation(unsigned Offset, unsigned Length,
UIdent Kind, bool isSystem) = 0;

virtual bool beginDocumentSubStructure(unsigned Offset, unsigned Length,
virtual void beginDocumentSubStructure(unsigned Offset, unsigned Length,
UIdent Kind, UIdent AccessLevel,
UIdent SetterAccessLevel,
unsigned NameOffset,
Expand All @@ -246,25 +246,24 @@ class EditorConsumer {
ArrayRef<StringRef> InheritedTypes,
ArrayRef<std::tuple<UIdent, unsigned, unsigned>> Attrs) = 0;

virtual bool endDocumentSubStructure() = 0;
virtual void endDocumentSubStructure() = 0;

virtual bool handleDocumentSubStructureElement(UIdent Kind,
unsigned Offset,
virtual void handleDocumentSubStructureElement(UIdent Kind, unsigned Offset,
unsigned Length) = 0;

virtual bool recordAffectedRange(unsigned Offset, unsigned Length) = 0;
virtual void recordAffectedRange(unsigned Offset, unsigned Length) = 0;

virtual bool recordAffectedLineRange(unsigned Line, unsigned Length) = 0;
virtual void recordAffectedLineRange(unsigned Line, unsigned Length) = 0;

virtual bool recordFormattedText(StringRef Text) = 0;
virtual void recordFormattedText(StringRef Text) = 0;

virtual bool setDiagnosticStage(UIdent DiagStage) = 0;
virtual bool handleDiagnostic(const DiagnosticEntryInfo &Info,
virtual void setDiagnosticStage(UIdent DiagStage) = 0;
virtual void handleDiagnostic(const DiagnosticEntryInfo &Info,
UIdent DiagStage) = 0;

virtual bool handleSourceText(StringRef Text) = 0;
virtual void handleSourceText(StringRef Text) = 0;

virtual bool
virtual void
handleSyntaxTree(const swift::syntax::SourceFileSyntax &SyntaxTree,
std::unordered_set<unsigned> ReusedNodeIds) = 0;
virtual bool syntaxTreeEnabled() {
Expand All @@ -273,8 +272,8 @@ class EditorConsumer {
virtual SyntaxTreeTransferMode syntaxTreeTransferMode() = 0;

virtual bool syntaxReuseInfoEnabled() = 0;
virtual bool handleSyntaxReuseRegions(
std::vector<SourceFileRange> ReuseRegions) = 0;
virtual void
handleSyntaxReuseRegions(std::vector<SourceFileRange> ReuseRegions) = 0;

virtual void finished() {}
};
Expand Down
3 changes: 1 addition & 2 deletions tools/SourceKit/lib/SwiftLang/SwiftEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1856,8 +1856,7 @@ void SwiftEditorDocument::readSemanticInfo(ImmutableTextSnapshotRef Snapshot,
UIdent Kind = SemaTok.getUIdentForKind();
bool IsSystem = SemaTok.getIsSystem();
if (Kind.isValid())
if (!Consumer.handleSemanticAnnotation(Offset, Length, Kind, IsSystem))
break;
Consumer.handleSemanticAnnotation(Offset, Length, Kind, IsSystem);
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I changed the behavior here a bit, but it's only in the test consumers in which we would have previously taken an early exit here. I believe that the reduced complexity allows for slightly decreased performance in the test cases since the loop contains no long-running logic.

}

static UIdent SemaDiagStage("source.diagnostic.stage.swift.sema");
Expand Down
81 changes: 32 additions & 49 deletions tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2047,14 +2047,14 @@ class SKEditorConsumer : public EditorConsumer {

bool syntaxMapEnabled() override { return Opts.EnableSyntaxMap; }

bool handleSyntaxMap(unsigned Offset, unsigned Length, UIdent Kind) override;
void handleSyntaxMap(unsigned Offset, unsigned Length, UIdent Kind) override;

bool handleSemanticAnnotation(unsigned Offset, unsigned Length, UIdent Kind,
void handleSemanticAnnotation(unsigned Offset, unsigned Length, UIdent Kind,
bool isSystem) override;

bool documentStructureEnabled() override { return Opts.EnableStructure; }

bool beginDocumentSubStructure(unsigned Offset, unsigned Length, UIdent Kind,
void beginDocumentSubStructure(unsigned Offset, unsigned Length, UIdent Kind,
UIdent AccessLevel,
UIdent SetterAccessLevel,
unsigned NameOffset,
Expand All @@ -2070,30 +2070,29 @@ class SKEditorConsumer : public EditorConsumer {
ArrayRef<StringRef> InheritedTypes,
ArrayRef<std::tuple<UIdent, unsigned, unsigned>> Attrs) override;

bool endDocumentSubStructure() override;
void endDocumentSubStructure() override;

bool handleDocumentSubStructureElement(UIdent Kind,
unsigned Offset,
void handleDocumentSubStructureElement(UIdent Kind, unsigned Offset,
unsigned Length) override;

bool recordAffectedRange(unsigned Offset, unsigned Length) override;
void recordAffectedRange(unsigned Offset, unsigned Length) override;

bool recordAffectedLineRange(unsigned Line, unsigned Length) override;
void recordAffectedLineRange(unsigned Line, unsigned Length) override;

bool recordFormattedText(StringRef Text) override;
void recordFormattedText(StringRef Text) override;

bool setDiagnosticStage(UIdent DiagStage) override;
bool handleDiagnostic(const DiagnosticEntryInfo &Info,
void setDiagnosticStage(UIdent DiagStage) override;
void handleDiagnostic(const DiagnosticEntryInfo &Info,
UIdent DiagStage) override;

bool handleSourceText(StringRef Text) override;
void handleSourceText(StringRef Text) override;

bool handleSyntaxTree(const swift::syntax::SourceFileSyntax &SyntaxTree,
void handleSyntaxTree(const swift::syntax::SourceFileSyntax &SyntaxTree,
std::unordered_set<unsigned> ReusedNodeIds) override;

bool syntaxReuseInfoEnabled() override { return Opts.EnableSyntaxReuseInfo; }
bool handleSyntaxReuseRegions(
std::vector<SourceFileRange> ReuseRegions) override;
void
handleSyntaxReuseRegions(std::vector<SourceFileRange> ReuseRegions) override;

SyntaxTreeTransferMode syntaxTreeTransferMode() override {
return Opts.SyntaxTransferMode;
Expand Down Expand Up @@ -2268,24 +2267,22 @@ void SKEditorConsumer::handleRequestError(const char *Description) {
}
}

bool SKEditorConsumer::handleSyntaxMap(unsigned Offset, unsigned Length,
void SKEditorConsumer::handleSyntaxMap(unsigned Offset, unsigned Length,
UIdent Kind) {
if (!Opts.EnableSyntaxMap)
return true;
return;

SyntaxMap.add(Kind, Offset, Length, /*IsSystem=*/false);
return true;
}

bool SKEditorConsumer::handleSemanticAnnotation(unsigned Offset,
unsigned Length,
UIdent Kind, bool isSystem) {
void SKEditorConsumer::handleSemanticAnnotation(unsigned Offset,
unsigned Length, UIdent Kind,
bool isSystem) {
assert(Kind.isValid());
SemanticAnnotations.add(Kind, Offset, Length, isSystem);
return true;
}

bool
void
SKEditorConsumer::beginDocumentSubStructure(unsigned Offset,
unsigned Length, UIdent Kind,
UIdent AccessLevel,
Expand All @@ -2308,41 +2305,32 @@ SKEditorConsumer::beginDocumentSubStructure(unsigned Offset,
NameLength, BodyOffset, BodyLength, DocOffset, DocLength, DisplayName,
TypeName, RuntimeName, SelectorName, InheritedTypes, Attrs);
}
return true;
}

bool SKEditorConsumer::endDocumentSubStructure() {
void SKEditorConsumer::endDocumentSubStructure() {
if (Opts.EnableStructure)
DocStructure.endSubStructure();
return true;
}

bool SKEditorConsumer::handleDocumentSubStructureElement(UIdent Kind,
void SKEditorConsumer::handleDocumentSubStructureElement(UIdent Kind,
unsigned Offset,
unsigned Length) {
if (Opts.EnableStructure)
DocStructure.addElement(Kind, Offset, Length);
return true;
}

bool SKEditorConsumer::recordAffectedRange(unsigned Offset, unsigned Length) {
void SKEditorConsumer::recordAffectedRange(unsigned Offset, unsigned Length) {
Dict.set(KeyOffset, Offset);
Dict.set(KeyLength, Length);

return true;
}

bool SKEditorConsumer::recordAffectedLineRange(unsigned Line, unsigned Length) {
void SKEditorConsumer::recordAffectedLineRange(unsigned Line, unsigned Length) {
Dict.set(KeyLine, Line);
Dict.set(KeyLength, Length);

return true;
}

bool SKEditorConsumer::recordFormattedText(StringRef Text) {
void SKEditorConsumer::recordFormattedText(StringRef Text) {
Dict.set(KeySourceText, Text);

return true;
}

static void fillDictionaryForDiagnosticInfoBase(
Expand Down Expand Up @@ -2409,15 +2397,14 @@ static void fillDictionaryForDiagnosticInfoBase(
}
}

bool SKEditorConsumer::setDiagnosticStage(UIdent DiagStage) {
void SKEditorConsumer::setDiagnosticStage(UIdent DiagStage) {
Dict.set(KeyDiagnosticStage, DiagStage);
return true;
}

bool SKEditorConsumer::handleDiagnostic(const DiagnosticEntryInfo &Info,
void SKEditorConsumer::handleDiagnostic(const DiagnosticEntryInfo &Info,
UIdent DiagStage) {
if (!Opts.EnableDiagnostics)
return true;
return;

ResponseBuilder::Array &Arr = Diags;
if (Arr.isNull())
Expand All @@ -2426,19 +2413,17 @@ bool SKEditorConsumer::handleDiagnostic(const DiagnosticEntryInfo &Info,
auto Elem = Arr.appendDictionary();
Elem.set(KeyDiagnosticStage, DiagStage);
fillDictionaryForDiagnosticInfo(Elem, Info);
return true;
}

bool SKEditorConsumer::handleSourceText(StringRef Text) {
void SKEditorConsumer::handleSourceText(StringRef Text) {
Dict.set(KeySourceText, Text);
return true;
}

bool SKEditorConsumer::handleSyntaxTree(
void SKEditorConsumer::handleSyntaxTree(
const swift::syntax::SourceFileSyntax &SyntaxTree,
std::unordered_set<unsigned> ReusedNodeIds) {
if (Opts.SyntaxTransferMode == SyntaxTreeTransferMode::Off)
return true;
return;

std::string SyntaxTreeString;
{
Expand All @@ -2450,10 +2435,9 @@ bool SKEditorConsumer::handleSyntaxTree(
SyntaxTreeOutput << *SyntaxTree.getRaw();
}
Dict.set(KeySerializedSyntaxTree, SyntaxTreeString);
return true;
}

bool SKEditorConsumer::handleSyntaxReuseRegions(
void SKEditorConsumer::handleSyntaxReuseRegions(
std::vector<SourceFileRange> ReuseRegions) {
if (Opts.EnableSyntaxReuseInfo) {
auto Array = Dict.setArray(KeySyntaxReuseRegions);
Expand All @@ -2464,7 +2448,6 @@ bool SKEditorConsumer::handleSyntaxReuseRegions(
SubDict.set(KeyLength, Region.End - Region.Start);
}
}
return true;
}

static sourcekitd_response_t
Expand Down
56 changes: 20 additions & 36 deletions unittests/SourceKit/SwiftLang/CursorInfoTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,18 +38,15 @@ class NullEditorConsumer : public EditorConsumer {

bool syntaxMapEnabled() override { return true; }

bool handleSyntaxMap(unsigned Offset, unsigned Length, UIdent Kind) override {
return false;
void handleSyntaxMap(unsigned Offset, unsigned Length, UIdent Kind) override {
}

bool handleSemanticAnnotation(unsigned Offset, unsigned Length,
UIdent Kind, bool isSystem) override {
return false;
}

void handleSemanticAnnotation(unsigned Offset, unsigned Length, UIdent Kind,
bool isSystem) override {}

bool documentStructureEnabled() override { return false; }

bool beginDocumentSubStructure(unsigned Offset, unsigned Length,
void beginDocumentSubStructure(unsigned Offset, unsigned Length,
UIdent Kind, UIdent AccessLevel,
UIdent SetterAccessLevel,
unsigned NameOffset,
Expand All @@ -64,49 +61,36 @@ class NullEditorConsumer : public EditorConsumer {
StringRef SelectorName,
ArrayRef<StringRef> InheritedTypes,
ArrayRef<std::tuple<UIdent, unsigned, unsigned>> Attrs) override {
return false;
}

bool endDocumentSubStructure() override { return false; }
void endDocumentSubStructure() override {}

bool handleDocumentSubStructureElement(UIdent Kind,
unsigned Offset,
unsigned Length) override {
return false;
}
void handleDocumentSubStructureElement(UIdent Kind, unsigned Offset,
unsigned Length) override {}

bool recordAffectedRange(unsigned Offset, unsigned Length) override {
return false;
}

bool recordAffectedLineRange(unsigned Line, unsigned Length) override {
return false;
}
void recordAffectedRange(unsigned Offset, unsigned Length) override {}

bool recordFormattedText(StringRef Text) override { return false; }
void recordAffectedLineRange(unsigned Line, unsigned Length) override {}

bool setDiagnosticStage(UIdent DiagStage) override { return false; }
bool handleDiagnostic(const DiagnosticEntryInfo &Info,
UIdent DiagStage) override {
return false;
}
void setDiagnosticStage(UIdent DiagStage) override {}
void handleDiagnostic(const DiagnosticEntryInfo &Info,
UIdent DiagStage) override {}
void recordFormattedText(StringRef Text) override {}

bool handleSourceText(StringRef Text) override { return false; }
bool handleSyntaxTree(const swift::syntax::SourceFileSyntax &SyntaxTree,
std::unordered_set<unsigned> ReusedNodeIds) override {
return false;
}
void handleSourceText(StringRef Text) override {}
void handleSyntaxTree(const swift::syntax::SourceFileSyntax &SyntaxTree,
std::unordered_set<unsigned> ReusedNodeIds) override {}

SyntaxTreeTransferMode syntaxTreeTransferMode() override {
return SyntaxTreeTransferMode::Off;
}

bool syntaxReuseInfoEnabled() override { return false; }

bool handleSyntaxReuseRegions(
std::vector<SourceFileRange> ReuseRegions) override {
return false;
void
handleSyntaxReuseRegions(std::vector<SourceFileRange> ReuseRegions) override {
}

public:
bool needsSema = false;
};
Expand Down
Loading