Skip to content

Commit 4342de9

Browse files
authored
Merge pull request swiftlang#22084 from dingobye/sr9732
[Sema] Improve diagnostics for `variable_never_mutated` in case of for-each loop's binding.
2 parents 727bf43 + 421d6b0 commit 4342de9

File tree

4 files changed

+8
-7
lines changed

4 files changed

+8
-7
lines changed

include/swift/AST/DiagnosticsSema.def

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4187,8 +4187,8 @@ WARNING(immutable_value_never_used_but_assigned, none,
41874187
(Identifier))
41884188
WARNING(variable_never_mutated, none,
41894189
"%select{variable|parameter}1 %0 was never mutated; "
4190-
"consider changing to 'let' constant",
4191-
(Identifier, unsigned))
4190+
"consider %select{removing 'var' to make it|changing to 'let'}2 constant",
4191+
(Identifier, unsigned, bool))
41924192
WARNING(variable_never_read, none,
41934193
"%select{variable|parameter}1 %0 was written to, but never read",
41944194
(Identifier, unsigned))

lib/Sema/MiscDiagnostics.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2708,9 +2708,10 @@ VarDeclUsageChecker::~VarDeclUsageChecker() {
27082708

27092709
// If this is a parameter explicitly marked 'var', remove it.
27102710
unsigned varKind = isa<ParamDecl>(var);
2711-
if (FixItLoc.isInvalid())
2711+
if (FixItLoc.isInvalid()) {
27122712
Diags.diagnose(var->getLoc(), diag::variable_never_mutated,
2713-
var->getName(), varKind);
2713+
var->getName(), varKind, true);
2714+
}
27142715
else {
27152716
bool suggestLet = true;
27162717
if (auto *stmt = var->getParentPatternStmt()) {
@@ -2721,7 +2722,7 @@ VarDeclUsageChecker::~VarDeclUsageChecker() {
27212722
}
27222723

27232724
auto diag = Diags.diagnose(var->getLoc(), diag::variable_never_mutated,
2724-
var->getName(), varKind);
2725+
var->getName(), varKind, suggestLet);
27252726

27262727
if (suggestLet)
27272728
diag.fixItReplace(FixItLoc, "let");

test/Constraints/diagnostics.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1065,7 +1065,7 @@ let _: KeyPath<R32101765, Float> = \R32101765.prop32101765.unknown
10651065
// expected-error@-1 {{type 'Int' has no member 'unknown'}}
10661066

10671067
// rdar://problem/32390726 - Bad Diagnostic: Don't suggest `var` to `let` when binding inside for-statement
1068-
for var i in 0..<10 { // expected-warning {{variable 'i' was never mutated; consider changing to 'let' constant}} {{5-9=}}
1068+
for var i in 0..<10 { // expected-warning {{variable 'i' was never mutated; consider removing 'var' to make it constant}} {{5-9=}}
10691069
_ = i + 1
10701070
}
10711071

test/decl/var/usage.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ func testFixitsInStatementsWithPatterns(_ a : Int?) {
197197
_ = b2
198198
}
199199

200-
for var b in [42] { // expected-warning {{variable 'b' was never mutated; consider changing to 'let' constant}} {{7-11=}}
200+
for var b in [42] { // expected-warning {{variable 'b' was never mutated; consider removing 'var' to make it constant}} {{7-11=}}
201201
_ = b
202202
}
203203

0 commit comments

Comments
 (0)