Skip to content

Commit 9ce8074

Browse files
committed
---
yaml --- r: 349532 b: refs/heads/master-next c: 7329356 h: refs/heads/master
1 parent ee685b6 commit 9ce8074

File tree

6 files changed

+40
-68
lines changed

6 files changed

+40
-68
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
refs/heads/master: 3574c513bbc5578dd9346b4ea9ab5995c5927bb5
3-
refs/heads/master-next: f681adb300e567e29e491d285d6bc6c519b82653
3+
refs/heads/master-next: 7329356881ece3526ae0687d4f0aab28d7e54611
44
refs/tags/osx-passed: b6b74147ef8a386f532cf9357a1bde006e552c54
55
refs/tags/swift-2.2-SNAPSHOT-2015-12-01-a: 6bb18e013c2284f2b45f5f84f2df2887dc0f7dea
66
refs/tags/swift-2.2-SNAPSHOT-2015-12-01-b: 66d897bfcf64a82cb9a87f5e663d889189d06d07

branches/master-next/docs/Diagnostics.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ Most diagnostics have no reason to change behavior under editor mode. An example
9797

9898
- `%0`, `%1`, etc - Formats the specified diagnostic argument based on its type.
9999

100-
- `%select{a|b|c}0` - Chooses from a list of alternatives, separated by vertical bars, based on the value of the given argument. In this example, a value of 2 in diagnostic argument 0 would result in "c" being output.
100+
- `%select{a|b|c}0` - Chooses from a list of alternatives, separated by vertical bars, based on the value of the given argument. In this example, a value of 2 in diagnostic argument 0 would result in "c" being output. The argument to the %select may be an integer, enum, or StringRef. If it's a StringRef, the specifier acts as an emptiness check.
101101

102102
- `%s0` - Produces an "s" if the given argument is anything other than 1, as meant for an English plural. This isn't particularly localizable without a more general `%plural` form, but most diagnostics try to avoid cases where a plural/singular distinction would be necessary in the first place.
103103

branches/master-next/include/swift/AST/DiagnosticsSema.def

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2226,10 +2226,8 @@ ERROR(multiple_override,none,
22262226
NOTE(multiple_override_prev,none,
22272227
"%0 previously overridden here", (DeclName))
22282228

2229-
ERROR(override_unavailable,none,
2230-
"cannot override %0 which has been marked unavailable", (DeclBaseName))
2231-
ERROR(override_unavailable_msg, none,
2232-
"cannot override %0 which has been marked unavailable: %1",
2229+
ERROR(override_unavailable, none,
2230+
"cannot override %0 which has been marked unavailable%select{|: %1}1",
22332231
(DeclBaseName, StringRef))
22342232

22352233
ERROR(override_less_available,none,
@@ -4121,27 +4119,16 @@ ERROR(dynamic_replacement_replaced_constructor_is_not_convenience, none,
41214119

41224120
ERROR(availability_decl_unavailable, none,
41234121
"%select{getter for |setter for |}0%1 is unavailable"
4124-
"%select{ in %3|}2",
4125-
(unsigned, DeclName, bool, StringRef))
4122+
"%select{ in %3|}2%select{|: %4}4",
4123+
(unsigned, DeclName, bool, StringRef, StringRef))
41264124

41274125
#define REPLACEMENT_DECL_KIND_SELECT "select{| instance method| property}"
41284126
ERROR(availability_decl_unavailable_rename, none,
41294127
"%select{getter for |setter for |}0%1 has been "
41304128
"%select{renamed to|replaced by}2%" REPLACEMENT_DECL_KIND_SELECT "3 "
4131-
"'%4'",
4132-
(unsigned, DeclName, bool, unsigned, StringRef))
4133-
4134-
ERROR(availability_decl_unavailable_rename_msg, none,
4135-
"%select{getter for |setter for |}0%1 has been "
4136-
"%select{renamed to|replaced by}2%" REPLACEMENT_DECL_KIND_SELECT "3 "
4137-
"'%4': %5",
4129+
"'%4'%select{|: %5}5",
41384130
(unsigned, DeclName, bool, unsigned, StringRef, StringRef))
41394131

4140-
ERROR(availability_decl_unavailable_msg, none,
4141-
"%select{getter for |setter for |}0%1 is unavailable"
4142-
"%select{ in %3|}2: %4",
4143-
(unsigned, DeclName, bool, StringRef, StringRef))
4144-
41454132
NOTE(availability_marked_unavailable, none,
41464133
"%select{getter for |setter for |}0%1 has been explicitly marked "
41474134
"unavailable here", (unsigned, DeclName))
@@ -4156,12 +4143,7 @@ NOTE(availability_obsoleted, none,
41564143

41574144
WARNING(availability_deprecated, none,
41584145
"%select{getter for |setter for |}0%1 %select{is|%select{is|was}4}2 "
4159-
"deprecated%select{| in %3%select{| %5}4}2",
4160-
(unsigned, DeclName, bool, StringRef, bool, llvm::VersionTuple))
4161-
4162-
WARNING(availability_deprecated_msg, none,
4163-
"%select{getter for |setter for |}0%1 %select{is|%select{is|was}4}2 "
4164-
"deprecated%select{| in %3%select{| %5}4}2: %6",
4146+
"deprecated%select{| in %3%select{| %5}4}2%select{|: %6}6",
41654147
(unsigned, DeclName, bool, StringRef, bool, llvm::VersionTuple,
41664148
StringRef))
41674149

branches/master-next/lib/AST/DiagnosticEngine.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -449,8 +449,14 @@ static void formatDiagnosticArgument(StringRef Modifier,
449449
break;
450450

451451
case DiagnosticArgumentKind::String:
452-
assert(Modifier.empty() && "Improper modifier for string argument");
453-
Out << Arg.getAsString();
452+
if (Modifier == "select") {
453+
formatSelectionArgument(ModifierArguments, Args,
454+
Arg.getAsString().empty() ? 0 : 1, FormatOpts,
455+
Out);
456+
} else {
457+
assert(Modifier.empty() && "Improper modifier for string argument");
458+
Out << Arg.getAsString();
459+
}
454460
break;
455461

456462
case DiagnosticArgumentKind::Identifier:

branches/master-next/lib/Sema/TypeCheckAvailability.cpp

Lines changed: 19 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1956,8 +1956,9 @@ void TypeChecker::diagnoseIfDeprecated(SourceRange ReferenceRange,
19561956
if (Attr->Message.empty() && Attr->Rename.empty()) {
19571957
diagnose(ReferenceRange.Start, diag::availability_deprecated,
19581958
RawAccessorKind, Name, Attr->hasPlatform(), Platform,
1959-
Attr->Deprecated.hasValue(), DeprecatedVersion)
1960-
.highlight(Attr->getRange());
1959+
Attr->Deprecated.hasValue(), DeprecatedVersion,
1960+
/*message*/ StringRef())
1961+
.highlight(Attr->getRange());
19611962
return;
19621963
}
19631964

@@ -1968,11 +1969,11 @@ void TypeChecker::diagnoseIfDeprecated(SourceRange ReferenceRange,
19681969

19691970
if (!Attr->Message.empty()) {
19701971
EncodedDiagnosticMessage EncodedMessage(Attr->Message);
1971-
diagnose(ReferenceRange.Start, diag::availability_deprecated_msg,
1972+
diagnose(ReferenceRange.Start, diag::availability_deprecated,
19721973
RawAccessorKind, Name, Attr->hasPlatform(), Platform,
19731974
Attr->Deprecated.hasValue(), DeprecatedVersion,
19741975
EncodedMessage.Message)
1975-
.highlight(Attr->getRange());
1976+
.highlight(Attr->getRange());
19761977
} else {
19771978
unsigned rawReplaceKind = static_cast<unsigned>(
19781979
replacementDeclKind.getValueOr(ReplacementDeclKind::None));
@@ -1999,12 +2000,9 @@ void swift::diagnoseUnavailableOverride(ValueDecl *override,
19992000
ASTContext &ctx = override->getASTContext();
20002001
auto &diags = ctx.Diags;
20012002
if (attr->Rename.empty()) {
2002-
if (attr->Message.empty())
2003-
diags.diagnose(override, diag::override_unavailable,
2004-
override->getBaseName());
2005-
else
2006-
diags.diagnose(override, diag::override_unavailable_msg,
2007-
override->getBaseName(), attr->Message);
2003+
EncodedDiagnosticMessage EncodedMessage(attr->Message);
2004+
diags.diagnose(override, diag::override_unavailable,
2005+
override->getBaseName(), EncodedMessage.Message);
20082006

20092007
DeclName name;
20102008
unsigned rawAccessorKind;
@@ -2186,22 +2184,12 @@ bool swift::diagnoseExplicitUnavailability(
21862184
unsigned rawReplaceKind = static_cast<unsigned>(
21872185
replaceKind.getValueOr(ReplacementDeclKind::None));
21882186
StringRef newName = replaceKind ? newNameBuf.str() : Attr->Rename;
2189-
2190-
if (Attr->Message.empty()) {
2191-
auto diag = diags.diagnose(Loc,
2192-
diag::availability_decl_unavailable_rename,
2193-
RawAccessorKind, Name,
2194-
replaceKind.hasValue(),
2195-
rawReplaceKind, newName);
2196-
attachRenameFixIts(diag);
2197-
} else {
21982187
EncodedDiagnosticMessage EncodedMessage(Attr->Message);
21992188
auto diag =
2200-
diags.diagnose(Loc, diag::availability_decl_unavailable_rename_msg,
2201-
RawAccessorKind, Name, replaceKind.hasValue(),
2202-
rawReplaceKind, newName, EncodedMessage.Message);
2189+
diags.diagnose(Loc, diag::availability_decl_unavailable_rename,
2190+
RawAccessorKind, Name, replaceKind.hasValue(),
2191+
rawReplaceKind, newName, EncodedMessage.Message);
22032192
attachRenameFixIts(diag);
2204-
}
22052193
} else if (isSubscriptReturningString(D, ctx)) {
22062194
diags.diagnose(Loc, diag::availabilty_string_subscript_migration)
22072195
.highlight(R)
@@ -2210,16 +2198,12 @@ bool swift::diagnoseExplicitUnavailability(
22102198

22112199
// Skip the note emitted below.
22122200
return true;
2213-
} else if (Attr->Message.empty()) {
2214-
diags.diagnose(Loc, diag::availability_decl_unavailable,
2215-
RawAccessorKind, Name, platform.empty(), platform)
2216-
.highlight(R);
22172201
} else {
22182202
EncodedDiagnosticMessage EncodedMessage(Attr->Message);
2219-
diags.diagnose(Loc, diag::availability_decl_unavailable_msg,
2220-
RawAccessorKind, Name, platform.empty(), platform,
2221-
EncodedMessage.Message)
2222-
.highlight(R);
2203+
diags
2204+
.diagnose(Loc, diag::availability_decl_unavailable, RawAccessorKind,
2205+
Name, platform.empty(), platform, EncodedMessage.Message)
2206+
.highlight(R);
22232207
}
22242208

22252209
switch (Attr->getVersionAvailability(ctx)) {
@@ -2696,7 +2680,7 @@ AvailabilityWalker::diagnoseIncDecRemoval(const ValueDecl *D, SourceRange R,
26962680
std::tie(RawAccessorKind, Name) = getAccessorKindAndNameForDiagnostics(D);
26972681

26982682
// If we emit a deprecation diagnostic, produce a fixit hint as well.
2699-
auto diag = TC.diagnose(R.Start, diag::availability_decl_unavailable_msg,
2683+
auto diag = TC.diagnose(R.Start, diag::availability_decl_unavailable,
27002684
RawAccessorKind, Name, true, "",
27012685
"it has been removed in Swift 3");
27022686
if (isa<PrefixUnaryExpr>(call)) {
@@ -2747,9 +2731,9 @@ AvailabilityWalker::diagnoseMemoryLayoutMigration(const ValueDecl *D,
27472731
std::tie(RawAccessorKind, Name) = getAccessorKindAndNameForDiagnostics(D);
27482732

27492733
EncodedDiagnosticMessage EncodedMessage(Attr->Message);
2750-
auto diag = TC.diagnose(R.Start, diag::availability_decl_unavailable_msg,
2751-
RawAccessorKind, Name, true, "",
2752-
EncodedMessage.Message);
2734+
auto diag =
2735+
TC.diagnose(R.Start, diag::availability_decl_unavailable, RawAccessorKind,
2736+
Name, true, "", EncodedMessage.Message);
27532737
diag.highlight(R);
27542738

27552739
auto subject = args->getSubExpr();

branches/master-next/lib/Sema/TypeCheckPattern.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1405,11 +1405,11 @@ bool TypeChecker::coercePatternToType(Pattern *&P, TypeResolution resolution,
14051405
EEP->getName().str() == "Some") {
14061406
SmallString<4> Rename;
14071407
camel_case::toLowercaseWord(EEP->getName().str(), Rename);
1408-
diagnose(EEP->getLoc(),
1409-
diag::availability_decl_unavailable_rename,
1410-
/*"getter" prefix*/2, EEP->getName(), /*replaced*/false,
1411-
/*special kind*/0, Rename.str())
1412-
.fixItReplace(EEP->getLoc(), Rename.str());
1408+
diagnose(
1409+
EEP->getLoc(), diag::availability_decl_unavailable_rename,
1410+
/*"getter" prefix*/ 2, EEP->getName(), /*replaced*/ false,
1411+
/*special kind*/ 0, Rename.str(), /*message*/ StringRef())
1412+
.fixItReplace(EEP->getLoc(), Rename.str());
14131413

14141414
return true;
14151415
}

0 commit comments

Comments
 (0)