diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters.ts b/tests/cases/fourslash/refactorConvertToNamedParameters.ts
index e160dd471c0..0834bf288fc 100644
--- a/tests/cases/fourslash/refactorConvertToNamedParameters.ts
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters.ts
@@ -3,6 +3,7 @@
////function f(/*a*/a: number, b: string/*b*/): string {
//// return b;
////}
+////f(4, "b");
goTo.select("a", "b");
edit.applyRefactor({
@@ -11,5 +12,6 @@ edit.applyRefactor({
actionDescription: "Convert to named parameters",
newContent: `function f({ a, b }: { a: number; b: string; }): string {
return b;
-}`
+}
+f({ a: 4, b: "b" });`
});
\ No newline at end of file
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters1.ts b/tests/cases/fourslash/refactorConvertToNamedParameters1.ts
new file mode 100644
index 00000000000..d7dce948cae
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters1.ts
@@ -0,0 +1,23 @@
+///
+
+////class Foo {
+//// /*a*/bar/*b*/(t: string, s: string): string {
+//// return s + t;
+//// }
+////}
+////var foo = new Foo();
+////foo.bar("a", "b");
+
+goTo.select("a", "b");
+edit.applyRefactor({
+ refactorName: "Convert to named parameters",
+ actionName: "Convert to named parameters",
+ actionDescription: "Convert to named parameters",
+ newContent: `class Foo {
+ bar({ t, s }: { t: string; s: string; }): string {
+ return s + t;
+ }
+}
+var foo = new Foo();
+foo.bar({ t: "a", s: "b" });`
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters10.ts b/tests/cases/fourslash/refactorConvertToNamedParameters10.ts
new file mode 100644
index 00000000000..209a06d5bfa
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters10.ts
@@ -0,0 +1,7 @@
+///
+
+////const { foo, bar } = { foo: /*a*/(a: number, b: number)/*b*/ => {}, bar: () => {} };
+////foo(1, 2);
+
+goTo.select("a", "b");
+verify.not.refactorAvailable("Convert to named parameters");
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters11.ts b/tests/cases/fourslash/refactorConvertToNamedParameters11.ts
new file mode 100644
index 00000000000..cbacbf1f21a
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters11.ts
@@ -0,0 +1,13 @@
+///
+
+////const foo = /*a*/function/*b*/(a: number, b: number) {};
+////foo(1, 2);
+
+goTo.select("a", "b");
+edit.applyRefactor({
+ refactorName: "Convert to named parameters",
+ actionName: "Convert to named parameters",
+ actionDescription: "Convert to named parameters",
+ newContent: `const foo = function({ a, b }: { a: number; b: number; }) {};
+foo({ a: 1, b: 2 });`
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters12.ts b/tests/cases/fourslash/refactorConvertToNamedParameters12.ts
new file mode 100644
index 00000000000..6a2fbdc6f04
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters12.ts
@@ -0,0 +1,13 @@
+///
+
+////const foo = /*a*/(a: number, b: number)/*b*/ => {};
+////foo(1, 2);
+
+goTo.select("a", "b");
+edit.applyRefactor({
+ refactorName: "Convert to named parameters",
+ actionName: "Convert to named parameters",
+ actionDescription: "Convert to named parameters",
+ newContent: `const foo = ({ a, b }: { a: number; b: number; }) => {};
+foo({ a: 1, b: 2 });`
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters13.ts b/tests/cases/fourslash/refactorConvertToNamedParameters13.ts
new file mode 100644
index 00000000000..ec25b50b067
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters13.ts
@@ -0,0 +1,7 @@
+///
+
+////var foo = /*a*/(a: number, b: number)/*b*/ => {};
+////foo(1, 2);
+
+goTo.select("a", "b");
+verify.not.refactorAvailable("Convert to named parameters");
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters14.ts b/tests/cases/fourslash/refactorConvertToNamedParameters14.ts
new file mode 100644
index 00000000000..a7914bc9f1f
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters14.ts
@@ -0,0 +1,17 @@
+///
+
+////const c = class {
+//// constructor(/*a*/a: number, b = { x: 1 }/*b*/) {}
+////}
+////var x = new c(2);
+
+goTo.select("a", "b");
+edit.applyRefactor({
+ refactorName: "Convert to named parameters",
+ actionName: "Convert to named parameters",
+ actionDescription: "Convert to named parameters",
+ newContent: `const c = class {
+ constructor({ a, b = { x: 1 } }: { a: number; b?: { x: number; }; }) {}
+}
+var x = new c({ a: 2 });`
+});
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters15.ts b/tests/cases/fourslash/refactorConvertToNamedParameters15.ts
new file mode 100644
index 00000000000..a056a82871b
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters15.ts
@@ -0,0 +1,8 @@
+///
+
+/////export default class {
+//// constructor(/*a*/a: number, b = { x: 1 }/*b*/) {}
+////}
+
+goTo.select("a", "b");
+verify.not.refactorAvailable("Convert to named parameters");
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters16.ts b/tests/cases/fourslash/refactorConvertToNamedParameters16.ts
new file mode 100644
index 00000000000..7d626215572
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters16.ts
@@ -0,0 +1,23 @@
+///
+
+////class Foo {
+//// /*a*/bar/*b*/(t: T, s: T) {
+//// return s;
+//// }
+////}
+////var foo = new Foo();
+////foo.bar("a", "b");
+
+goTo.select("a", "b");
+edit.applyRefactor({
+ refactorName: "Convert to named parameters",
+ actionName: "Convert to named parameters",
+ actionDescription: "Convert to named parameters",
+ newContent: `class Foo {
+ bar({ t, s }: { t: T; s: T; }) {
+ return s;
+ }
+}
+var foo = new Foo();
+foo.bar({ t: "a", s: "b" });`
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters17.ts b/tests/cases/fourslash/refactorConvertToNamedParameters17.ts
new file mode 100644
index 00000000000..5af97ca694a
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters17.ts
@@ -0,0 +1,17 @@
+///
+
+////function foo(/*a*/t: T, s: S/*b*/) {
+//// return s;
+////}
+////foo("a", "b");
+
+goTo.select("a", "b");
+edit.applyRefactor({
+ refactorName: "Convert to named parameters",
+ actionName: "Convert to named parameters",
+ actionDescription: "Convert to named parameters",
+ newContent: `function foo({ t, s }: { t: T; s: S; }) {
+ return s;
+}
+foo({ t: "a", s: "b" });`
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters2.ts b/tests/cases/fourslash/refactorConvertToNamedParameters2.ts
new file mode 100644
index 00000000000..86b1f9eb610
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters2.ts
@@ -0,0 +1,27 @@
+///
+
+////class Foo {
+//// t: string;
+//// s: string;
+//// /*a*/constructor/*b*/(t: string, s: string) {
+//// this.t = t;
+//// this.s = s;
+//// }
+////}
+////var foo = new Foo("a", "b");
+
+goTo.select("a", "b");
+edit.applyRefactor({
+ refactorName: "Convert to named parameters",
+ actionName: "Convert to named parameters",
+ actionDescription: "Convert to named parameters",
+ newContent: `class Foo {
+ t: string;
+ s: string;
+ constructor({ t, s }: { t: string; s: string; }) {
+ this.t = t;
+ this.s = s;
+ }
+}
+var foo = new Foo({ t: "a", s: "b" });`
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters3.ts b/tests/cases/fourslash/refactorConvertToNamedParameters3.ts
new file mode 100644
index 00000000000..c84c1aa20d4
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters3.ts
@@ -0,0 +1,21 @@
+///
+
+////class Foo {
+//// static /*a*/bar/*b*/(t: string, s: string): string {
+//// return s + t;
+//// }
+////}
+////Foo.bar("a", "b");
+
+goTo.select("a", "b");
+edit.applyRefactor({
+ refactorName: "Convert to named parameters",
+ actionName: "Convert to named parameters",
+ actionDescription: "Convert to named parameters",
+ newContent: `class Foo {
+ static bar({ t, s }: { t: string; s: string; }): string {
+ return s + t;
+ }
+}
+Foo.bar({ t: "a", s: "b" });`
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters4.ts b/tests/cases/fourslash/refactorConvertToNamedParameters4.ts
new file mode 100644
index 00000000000..b6bdb7a88c2
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters4.ts
@@ -0,0 +1,17 @@
+///
+
+////function f(/*a*/a: number, b = { x: 1, z: { s: true } }/*b*/) {
+//// return b;
+////}
+////f(2);
+
+goTo.select("a", "b");
+edit.applyRefactor({
+ refactorName: "Convert to named parameters",
+ actionName: "Convert to named parameters",
+ actionDescription: "Convert to named parameters",
+ newContent: `function f({ a, b = { x: 1, z: { s: true } } }: { a: number; b?: { x: number; z: { s: boolean; }; }; }) {
+ return b;
+}
+f({ a: 2 });`
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters5.ts b/tests/cases/fourslash/refactorConvertToNamedParameters5.ts
new file mode 100644
index 00000000000..8b8958bc674
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters5.ts
@@ -0,0 +1,23 @@
+///
+
+////class Foo {
+//// /*a*/bar/*b*/(t: string, s: string): string {
+//// return s + t;
+//// }
+////}
+////var foo = new Foo();
+////foo['bar']("a", "b");
+
+goTo.select("a", "b");
+edit.applyRefactor({
+ refactorName: "Convert to named parameters",
+ actionName: "Convert to named parameters",
+ actionDescription: "Convert to named parameters",
+ newContent: `class Foo {
+ bar({ t, s }: { t: string; s: string; }): string {
+ return s + t;
+ }
+}
+var foo = new Foo();
+foo['bar']({ t: "a", s: "b" });`
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters6.ts b/tests/cases/fourslash/refactorConvertToNamedParameters6.ts
new file mode 100644
index 00000000000..1e63f44fc35
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters6.ts
@@ -0,0 +1,17 @@
+///
+
+////function f(/*a*/a: number, b: string = "1"/*b*/): string {
+//// return b;
+////}
+////f(4, "b");
+
+goTo.select("a", "b");
+edit.applyRefactor({
+ refactorName: "Convert to named parameters",
+ actionName: "Convert to named parameters",
+ actionDescription: "Convert to named parameters",
+ newContent: `function f({ a, b = "1" }: { a: number; b?: string; }): string {
+ return b;
+}
+f({ a: 4, b: "b" });`
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters7.ts b/tests/cases/fourslash/refactorConvertToNamedParameters7.ts
new file mode 100644
index 00000000000..825b34c303d
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters7.ts
@@ -0,0 +1,17 @@
+///
+
+////function f(/*a*/a?: number, b: string = "1"/*b*/): string {
+//// return b;
+////}
+////f();
+
+goTo.select("a", "b");
+edit.applyRefactor({
+ refactorName: "Convert to named parameters",
+ actionName: "Convert to named parameters",
+ actionDescription: "Convert to named parameters",
+ newContent: `function f({ a, b = "1" }: { a?: number; b?: string; } = {}): string {
+ return b;
+}
+f();`
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters8.ts b/tests/cases/fourslash/refactorConvertToNamedParameters8.ts
new file mode 100644
index 00000000000..2c3d7de339f
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters8.ts
@@ -0,0 +1,17 @@
+///
+
+////function f(/*a*/a: number, b = 1/*b*/) {
+//// return b;
+////}
+////f(2);
+
+goTo.select("a", "b");
+edit.applyRefactor({
+ refactorName: "Convert to named parameters",
+ actionName: "Convert to named parameters",
+ actionDescription: "Convert to named parameters",
+ newContent: `function f({ a, b = 1 }: { a: number; b?: number; }) {
+ return b;
+}
+f({ a: 2 });`
+});
\ No newline at end of file
diff --git a/tests/cases/fourslash/refactorConvertToNamedParameters9.ts b/tests/cases/fourslash/refactorConvertToNamedParameters9.ts
new file mode 100644
index 00000000000..772f8ea8848
--- /dev/null
+++ b/tests/cases/fourslash/refactorConvertToNamedParameters9.ts
@@ -0,0 +1,10 @@
+///
+
+////function f(a: number, b: number);
+////function f(/*a*/a: number, b = 1/*b*/) {
+//// return b;
+////}
+////f(2);
+
+goTo.select("a", "b");
+verify.not.refactorAvailable("Convert to named parameters");
\ No newline at end of file