Skip to content

Commit 8b3ea21

Browse files
committed
[Diagnostics] Suppress expression diagnostics for code completion
Any produced diagnostics are suppressed anyway by a special diagnostic engine attached to the new type-checker, so there no point of doing any of that work. Resolves: rdar://problem/22996887
1 parent 10ddb04 commit 8b3ea21

File tree

4 files changed

+10
-5
lines changed

4 files changed

+10
-5
lines changed

lib/Sema/CSGen.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,6 +1167,7 @@ namespace {
11671167
if (!E->isActivated())
11681168
return Type();
11691169

1170+
CS.Options |= ConstraintSystemFlags::SuppressDiagnostics;
11701171
return CS.createTypeVariable(CS.getConstraintLocator(E),
11711172
TVO_CanBindToLValue);
11721173
}
@@ -3562,6 +3563,8 @@ class InferUnresolvedMemberConstraintGenerator : public ConstraintGenerator {
35623563
}
35633564

35643565
Type visitCodeCompletionExpr(CodeCompletionExpr *Expr) override {
3566+
auto &cs = getConstraintSystem();
3567+
cs.Options |= ConstraintSystemFlags::SuppressDiagnostics;
35653568
return createFreeTypeVariableType(Expr);
35663569
}
35673570

lib/Sema/TypeCheckConstraints.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2160,7 +2160,7 @@ bool TypeChecker::typeCheckCompletionSequence(Expr *&expr, DeclContext *DC) {
21602160
PrettyStackTraceExpr stackTrace(Context, "type-checking", expr);
21612161

21622162
// Construct a constraint system from this expression.
2163-
ConstraintSystem CS(*this, DC, ConstraintSystemFlags::AllowFixes);
2163+
ConstraintSystem CS(*this, DC, ConstraintSystemFlags::SuppressDiagnostics);
21642164
CleanupIllFormedExpressionRAII cleanup(expr);
21652165

21662166
auto *SE = cast<SequenceExpr>(expr);

lib/Sema/TypeChecker.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -900,13 +900,17 @@ bool swift::typeCheckExpression(DeclContext *DC, Expr *&parsedExpr) {
900900
auto &ctx = DC->getASTContext();
901901
if (ctx.getLazyResolver()) {
902902
TypeChecker *TC = static_cast<TypeChecker *>(ctx.getLazyResolver());
903-
auto resultTy = TC->typeCheckExpression(parsedExpr, DC);
903+
auto resultTy = TC->typeCheckExpression(parsedExpr, DC, TypeLoc(),
904+
ContextualTypePurpose::CTP_Unused,
905+
TypeCheckExprFlags::SuppressDiagnostics);
904906
return !resultTy;
905907
} else {
906908
// Set up a diagnostics engine that swallows diagnostics.
907909
DiagnosticEngine diags(ctx.SourceMgr);
908910
TypeChecker TC(ctx, diags);
909-
auto resultTy = TC.typeCheckExpression(parsedExpr, DC);
911+
auto resultTy = TC.typeCheckExpression(parsedExpr, DC, TypeLoc(),
912+
ContextualTypePurpose::CTP_Unused,
913+
TypeCheckExprFlags::SuppressDiagnostics);
910914
return !resultTy;
911915
}
912916
}

test/IDE/complete_operators.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,6 @@ func testInfix7(x: S2?) {
210210
x#^INFIX_7^#
211211
}
212212
// S2_INFIX_OPTIONAL: Begin completions
213-
// FIXME: rdar://problem/22996887 - shouldn't complete with optional LHS
214-
// S2_INFIX_OPTIONAL-DAG: Decl[InfixOperatorFunction]/CurrModule: ** {#Int#}[#S2#]
215213
// S2_INFIX_OPTIONAL-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: != {#{{.*}}#}[#Bool#]
216214
// S2_INFIX_OPTIONAL-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: == {#{{.*}}#}[#Bool#]
217215
// S2_INFIX_OPTIONAL-DAG: Decl[InfixOperatorFunction]/OtherModule[Swift]: ?? {#S2#}[#S2#]; name=?? S2

0 commit comments

Comments
 (0)