Skip to content

Commit d858cc9

Browse files
committed
Improve handling of initializers in @available(renamed:).
If we know the renamed thing is being called, we can just use "Foo(...)" in the resulting expression (rather than "Foo.init(...)").
1 parent b080e86 commit d858cc9

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

lib/Sema/MiscDiagnostics.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,6 +1115,12 @@ void swift::fixItAvailableAttrRename(TypeChecker &TC,
11151115

11161116
// Continue on to diagnose any argument label renames.
11171117

1118+
} else if (parsed.BaseName == TC.Context.Id_init.str() &&
1119+
parsed.isMember() && CE) {
1120+
// For initializers, replace with a "call" of the context type...but only
1121+
// if we know we're doing a call (rather than a first-class reference).
1122+
diag.fixItReplace(referenceRange, parsed.ContextName);
1123+
11181124
} else {
11191125
// Just replace the base name.
11201126
SmallString<64> baseReplace;

test/attr/attr_availability.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,9 @@ func unavailableMultiUnnamedSame(_ a: Int, _ b: Int) {} // expected-note {{here}
296296
@available(*, unavailable, renamed: "shinyLabeledArguments(_:_:)")
297297
func unavailableMultiNewlyUnnamed(a: Int, b: Int) {} // expected-note {{here}}
298298

299+
@available(*, unavailable, renamed: "Int.init(other:)")
300+
func unavailableInit(a: Int) {} // expected-note 2 {{here}}
301+
299302

300303
func testArgNames() {
301304
unavailableArgNames(a: 0) // expected-error {{'unavailableArgNames(a:)' has been renamed to 'shinyLabeledArguments(example:)'}} {{3-22=shinyLabeledArguments}} {{23-24=example}}
@@ -317,6 +320,10 @@ func testArgNames() {
317320
unavailableMultiUnnamed(0, 1) // expected-error {{'unavailableMultiUnnamed' has been renamed to 'shinyLabeledArguments(example:another:)'}} {{3-26=shinyLabeledArguments}} {{27-27=example: }} {{30-30=another: }}
318321
unavailableMultiUnnamedSame(0, 1) // expected-error {{'unavailableMultiUnnamedSame' has been renamed to 'shinyLabeledArguments(_:_:)'}} {{3-30=shinyLabeledArguments}}
319322
unavailableMultiNewlyUnnamed(a: 0, b: 1) // expected-error {{'unavailableMultiNewlyUnnamed(a:b:)' has been renamed to 'shinyLabeledArguments(_:_:)'}} {{3-31=shinyLabeledArguments}} {{32-35=}} {{38-41=}}
323+
324+
unavailableInit(a: 0) // expected-error {{'unavailableInit(a:)' has been replaced by 'Int.init(other:)'}} {{3-18=Int}} {{19-20=other}}
325+
let fn = unavailableInit // expected-error {{'unavailableInit(a:)' has been replaced by 'Int.init(other:)'}} {{12-27=Int.init}}
326+
fn(a: 1)
320327
}
321328

322329
@available(*, unavailable, renamed: "shinyLabeledArguments()")

0 commit comments

Comments
 (0)