Skip to content

Commit d1efa03

Browse files
committed
---
yaml --- r: 210441 b: refs/heads/swift-5.0-branch c: b78987a h: refs/heads/master i: 210439: 1fbfdd9
1 parent 8c8c99b commit d1efa03

File tree

11 files changed

+102
-13
lines changed

11 files changed

+102
-13
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -644,7 +644,7 @@ refs/tags/swift-DEVELOPMENT-SNAPSHOT-2017-12-23-a: b7c074342459a645779f106c42bf4
644644
refs/heads/master-llvm-swift5-transition: 8ace18c8953afb3d7d94cf04cacc0b51a7e5f1e3
645645
"refs/heads/revert-12883-disable_modelio_test_ios": a77ae373b809a0d8cb460cf3d1585d618510d242
646646
refs/heads/revert-13597-master: cccee1df039d072215f9bddc2cbc1e32a8d5d5ee
647-
refs/heads/swift-5.0-branch: 8c78533e57f6c67d0fbc921f55d291bfaef10480
647+
refs/heads/swift-5.0-branch: b78987a8c53597e853804452885f9c1f86620cdf
648648
refs/tags/swift-4.1-DEVELOPMENT-SNAPSHOT-2017-12-23-a: b32214f7e04339dfada623b6b76dbebfb41e4541
649649
refs/tags/swift-4.1-DEVELOPMENT-SNAPSHOT-2017-12-24-a: 1eb0be506c0744c7eff0550a10240286046e181d
650650
refs/tags/swift-4.1-DEVELOPMENT-SNAPSHOT-2017-12-25-a: f35a91502bad0065c83d8760407c23be7b899f48
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
func 1() {}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
_ = unknown
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// RUN: %sourcekitd-test -req=track-compiles == -req=sema %s -- %s | %FileCheck %s -check-prefix=NODIAGS
2+
// NODIAGS: key.notification: source.notification.compile-did-finish
3+
// NODIAGS-NEXT: key.diagnostics: [
4+
// NODIAGS-NEXT: ]
5+
6+
// RUN: %sourcekitd-test -req=track-compiles == -req=sema %S/Inputs/parse-error.swift -- %S/Inputs/parse-error.swift | %FileCheck %s -check-prefix=PARSE
7+
// PARSE: key.notification: source.notification.compile-did-finish
8+
// PARSE-NEXT: key.diagnostics: [
9+
// PARSE-NEXT: {
10+
// PARSE-NEXT: key.line: 1
11+
// PARSE-NEXT: key.column: 6
12+
// PARSE-NEXT: key.filepath: "{{.*}}parse-error.swift"
13+
// PARSE-NEXT: key.severity: source.diagnostic.severity.error
14+
// PARSE-NEXT: key.description: "function name
15+
// PARSE-NEXT: }
16+
// PARSE-NEXT: ]
17+
18+
// Diagnostic from other file.
19+
// RUN: %sourcekitd-test -req=track-compiles == -req=sema %s -- %s %S/Inputs/parse-error.swift | %FileCheck %s -check-prefix=PARSE
20+
21+
// RUN: %sourcekitd-test -req=track-compiles == -req=sema %S/Inputs/sema-error.swift -- %S/Inputs/sema-error.swift | %FileCheck %s -check-prefix=SEMA
22+
// SEMA: key.notification: source.notification.compile-did-finish
23+
// SEMA-NEXT: key.diagnostics: [
24+
// SEMA-NEXT: {
25+
// SEMA-NEXT: key.line: 1
26+
// SEMA-NEXT: key.column: 5
27+
// SEMA-NEXT: key.filepath: "{{.*}}sema-error.swift"
28+
// SEMA-NEXT: key.severity: source.diagnostic.severity.error
29+
// SEMA-NEXT: key.description: "use of
30+
// SEMA-NEXT: key.ranges: [
31+
32+
// RUN: %sourcekitd-test -req=track-compiles == -req=sema %s -- %s -Xcc -include -Xcc /doesnotexist | %FileCheck %s -check-prefix=CLANG_IMPORTER
33+
// CLANG_IMPORTER: key.notification: source.notification.compile-did-finish,
34+
// CLANG_IMPORTER-NEXT: key.diagnostics: [
35+
// CLANG_IMPORTER-NEXT: {
36+
// CLANG_IMPORTER-NEXT: key.line:
37+
// CLANG_IMPORTER-NEXT: key.column:
38+
// CLANG_IMPORTER-NEXT: key.filepath: "<{{.*}}>"
39+
// CLANG_IMPORTER-NEXT: key.severity: source.diagnostic.severity.error,
40+
// CLANG_IMPORTER-NEXT: key.description: {{.*}}not found

branches/swift-5.0-branch/tools/SourceKit/include/SourceKit/Support/Tracing.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,17 @@
1313
#ifndef LLVM_SOURCEKIT_SUPPORT_TRACING_H
1414
#define LLVM_SOURCEKIT_SUPPORT_TRACING_H
1515

16+
#include "SourceKit/Core/LLVM.h"
1617
#include "SourceKit/Support/UIdent.h"
1718
#include "swift/Basic/OptionSet.h"
19+
#include "llvm/ADT/ArrayRef.h"
1820
#include "llvm/ADT/Optional.h"
1921

2022
#include <vector>
2123

2224
namespace SourceKit {
25+
struct DiagnosticEntryInfo;
26+
2327
namespace trace {
2428

2529
struct SwiftArguments {
@@ -76,7 +80,8 @@ class TraceConsumer {
7680
const StringPairs &OpArgs) = 0;
7781

7882
// Operation previously started with startXXX has finished
79-
virtual void operationFinished(uint64_t OpId, OperationKind OpKind) = 0;
83+
virtual void operationFinished(uint64_t OpId, OperationKind OpKind,
84+
ArrayRef<DiagnosticEntryInfo> Diagnostics) = 0;
8085

8186
/// Returns the set of operations this consumer is interested in.
8287
///
@@ -99,7 +104,8 @@ uint64_t startOperation(OperationKind OpKind,
99104
const StringPairs &OpArgs = StringPairs());
100105

101106
// Operation previously started with startXXX has finished
102-
void operationFinished(uint64_t OpId, OperationKind OpKind);
107+
void operationFinished(uint64_t OpId, OperationKind OpKind,
108+
ArrayRef<DiagnosticEntryInfo> Diagnostics);
103109

104110
// Register trace consumer.
105111
void registerConsumer(TraceConsumer *Consumer);
@@ -134,9 +140,9 @@ class TracedOperation final {
134140
OpId = startOperation(OpKind, Inv, OpArgs);
135141
}
136142

137-
void finish() {
143+
void finish(ArrayRef<DiagnosticEntryInfo> Diagnostics = llvm::None) {
138144
if (OpId.hasValue()) {
139-
operationFinished(OpId.getValue(), OpKind);
145+
operationFinished(OpId.getValue(), OpKind, Diagnostics);
140146
OpId.reset();
141147
}
142148
}

branches/swift-5.0-branch/tools/SourceKit/lib/Support/Tracing.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,12 @@ uint64_t trace::startOperation(trace::OperationKind OpKind,
5454
}
5555

5656
// Operation previously started with startXXX has finished
57-
void trace::operationFinished(uint64_t OpId, trace::OperationKind OpKind) {
57+
void trace::operationFinished(uint64_t OpId, trace::OperationKind OpKind,
58+
ArrayRef<DiagnosticEntryInfo> Diagnostics) {
5859
if (trace::anyEnabled()) {
5960
llvm::sys::ScopedLock L(consumersLock);
6061
for (auto *consumer : consumers) {
61-
consumer->operationFinished(OpId, OpKind);
62+
consumer->operationFinished(OpId, OpKind, Diagnostics);
6263
}
6364
}
6465
}

branches/swift-5.0-branch/tools/SourceKit/lib/SwiftLang/SwiftASTManager.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -878,6 +878,12 @@ ASTUnitRef ASTProducer::createASTUnit(SwiftASTManager::Implementation &MgrImpl,
878878
// TypeResolver is set before.
879879
ASTRef->Impl.TypeResolver = createLazyResolver(CompIns.getASTContext());
880880

881+
if (TracedOp.enabled()) {
882+
SmallVector<DiagnosticEntryInfo, 8> Diagnostics;
883+
Consumer.getAllDiagnostics(Diagnostics);
884+
TracedOp.finish(Diagnostics);
885+
}
886+
881887
return ASTRef;
882888
}
883889

branches/swift-5.0-branch/tools/SourceKit/lib/SwiftLang/SwiftEditor.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,28 @@ using namespace SourceKit;
4646
using namespace swift;
4747
using namespace ide;
4848

49+
static std::vector<unsigned> getSortedBufferIDs(
50+
const llvm::DenseMap<unsigned, std::vector<DiagnosticEntryInfo>> &Map) {
51+
std::vector<unsigned> bufferIDs;
52+
bufferIDs.reserve(Map.size());
53+
for (auto I = Map.begin(), E = Map.end(); I != E; ++I) {
54+
bufferIDs.push_back(I->getFirst());
55+
}
56+
llvm::array_pod_sort(bufferIDs.begin(), bufferIDs.end());
57+
return bufferIDs;
58+
}
59+
60+
void EditorDiagConsumer::getAllDiagnostics(
61+
SmallVectorImpl<DiagnosticEntryInfo> &Result) {
62+
// Note: we cannot reuse InputBufIds because there may be diagnostics outside
63+
// the inputs. Instead, sort the extant buffers.
64+
auto bufferIDs = getSortedBufferIDs(BufferDiagnostics);
65+
for (unsigned bufferID : bufferIDs) {
66+
const auto &diags = BufferDiagnostics[bufferID];
67+
Result.append(diags.begin(), diags.end());
68+
}
69+
}
70+
4971
void EditorDiagConsumer::handleDiagnostic(
5072
SourceManager &SM, SourceLoc Loc, DiagnosticKind Kind,
5173
StringRef FormatString, ArrayRef<DiagnosticArgument> FormatArgs,

branches/swift-5.0-branch/tools/SourceKit/lib/SwiftLang/SwiftEditorDiagConsumer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ class EditorDiagConsumer : public swift::DiagnosticConsumer {
6262
return Diags;
6363
}
6464

65+
void getAllDiagnostics(SmallVectorImpl<DiagnosticEntryInfo> &Result);
66+
6567
bool hadErrorWithInvalidLoc() const { return HadInvalidLocError; }
6668

6769
bool hadAnyError() const { return HadAnyError; }

branches/swift-5.0-branch/tools/SourceKit/tools/sourcekitd/bin/XPC/Service/XpcTracing.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,9 @@ class XpcTraceConsumer : public SourceKit::trace::TraceConsumer {
9898
const StringPairs &OpArgs) override;
9999

100100
// Operation previously started with startXXX has finished
101-
void operationFinished(uint64_t OpId, OperationKind OpKind) override;
101+
void operationFinished(
102+
uint64_t OpId, OperationKind OpKind,
103+
ArrayRef<SourceKit::DiagnosticEntryInfo> Diagnostics) override;
102104
};
103105

104106
// Trace start of SourceKit operation
@@ -117,7 +119,9 @@ void XpcTraceConsumer::operationStarted(uint64_t OpId,
117119
}
118120

119121
// Operation previously started with startXXX has finished
120-
void XpcTraceConsumer::operationFinished(uint64_t OpId, OperationKind OpKind) {
122+
void XpcTraceConsumer::operationFinished(
123+
uint64_t OpId, OperationKind OpKind,
124+
ArrayRef<SourceKit::DiagnosticEntryInfo> Diagnostics) {
121125
xpc_object_t Contents = xpc_array_create(nullptr, 0);
122126
append(Contents, trace::ActionKind::OperationFinished);
123127
append(Contents, OpId);

branches/swift-5.0-branch/tools/SourceKit/tools/sourcekitd/lib/API/Requests.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2695,7 +2695,8 @@ class CompileTrackingConsumer final : public trace::TraceConsumer {
26952695
void operationStarted(uint64_t OpId, trace::OperationKind OpKind,
26962696
const trace::SwiftInvocation &Inv,
26972697
const trace::StringPairs &OpArgs) override;
2698-
void operationFinished(uint64_t OpId, trace::OperationKind OpKind) override;
2698+
void operationFinished(uint64_t OpId, trace::OperationKind OpKind,
2699+
ArrayRef<DiagnosticEntryInfo> Diagnostics) override;
26992700
swift::OptionSet<trace::OperationKind> desiredOperations() override {
27002701
return swift::OptionSet<trace::OperationKind>() |
27012702
trace::OperationKind::PerformSema |
@@ -2721,8 +2722,9 @@ void CompileTrackingConsumer::operationStarted(
27212722
sourcekitd::postNotification(RespBuilder.createResponse());
27222723
}
27232724

2724-
void CompileTrackingConsumer::operationFinished(uint64_t OpId,
2725-
trace::OperationKind OpKind) {
2725+
void CompileTrackingConsumer::operationFinished(
2726+
uint64_t OpId, trace::OperationKind OpKind,
2727+
ArrayRef<DiagnosticEntryInfo> Diagnostics) {
27262728
if (!desiredOperations().contains(OpKind))
27272729
return;
27282730

@@ -2731,7 +2733,11 @@ void CompileTrackingConsumer::operationFinished(uint64_t OpId,
27312733
auto Dict = RespBuilder.getDictionary();
27322734
Dict.set(KeyNotification, CompileDidFinishUID);
27332735
Dict.set(KeyCompileID, std::to_string(OpId));
2734-
// Diagnostics
2736+
auto DiagArray = Dict.setArray(KeyDiagnostics);
2737+
for (const auto &DiagInfo : Diagnostics) {
2738+
fillDictionaryForDiagnosticInfo(DiagArray.appendDictionary(), DiagInfo);
2739+
}
2740+
27352741
sourcekitd::postNotification(RespBuilder.createResponse());
27362742
}
27372743

0 commit comments

Comments
 (0)