feat(43963): change var to a parameter in destructured function parameters (#44767)

This commit is contained in:
Oleksandr T 2021-08-17 03:19:44 +03:00 committed by GitHub
parent e263fcebf8
commit 424464d46b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 31 additions and 26 deletions

View File

@ -2059,7 +2059,9 @@ namespace ts {
// Display-part writer helpers
// #region
export function isFirstDeclarationOfSymbolParameter(symbol: Symbol) {
return symbol.declarations && symbol.declarations.length > 0 && symbol.declarations[0].kind === SyntaxKind.Parameter;
const declaration = symbol.declarations ? firstOrUndefined(symbol.declarations) : undefined;
return !!findAncestor(declaration, n =>
isParameter(n) ? true : isBindingElement(n) || isObjectBindingPattern(n) || isArrayBindingPattern(n) ? false : "quit");
}
const displayPartWriter = getDisplayPartWriter();

View File

@ -8,7 +8,7 @@ const [r0Def, r0, r1Def, r1] = test.ranges();
verify.referenceGroups(r0, [{ definition: "function bar(): string", ranges: [r0, r1] }]);
verify.referenceGroups(r1, [
{ definition: "function bar(): string", ranges: [r0] },
{ definition: "var bar: () => string", ranges: [r1] },
{ definition: "(parameter) bar: () => string", ranges: [r1] },
]);
verify.renameLocations(r0, [r0, { range: r1, suffixText: ": bar" }]);
verify.renameLocations(r1, [{ range: r1, prefixText: "bar: " }])

View File

@ -16,6 +16,6 @@ const [r0Def, r0, r1Def, r1, r2Def, r2, r3] = test.ranges();
verify.referenceGroups([r0, r1], [{ definition: "(property) I.property1: number", ranges: [r0, r1, r2] }]);
verify.referenceGroups(r2, [
{ definition: "(property) I.property1: number", ranges: [r0, r1] },
{ definition: "var property1: number", ranges: [r2, r3] },
{ definition: "(parameter) property1: number", ranges: [r2, r3] },
]);
verify.referenceGroups(r3, [{ definition: "var property1: number", ranges: [r2, r3] }]);
verify.referenceGroups(r3, [{ definition: "(parameter) property1: number", ranges: [r2, r3] }]);

View File

@ -1,19 +1,18 @@
/// <reference path='fourslash.ts'/>
// Repros from issues #4949 and #4818
////const result = [{ foo: 'hello' }]
//// .map(({ /*1*/foo }) => /*2*/foo)
//// .map(foo => foo);
////const result = [{ a: 'hello' }]
//// .map(({ /*1*/a }) => /*2*/a)
//// .map(a => a);
////
////const f = (foo: (bar: string[]) => void) => { };
////const f1 = (a: (b: string[]) => void) => {};
////f1(([a, b]) => { /*3*/a.charAt(0); });
////
////f(([a, b]) => {
//// /*3*/a.charAt(0); // Not okay: inferred as `any`
////});
////function f2({/*4*/a }: { a: string; }, [/*5*/b]: [string]) {}
verify.quickInfos({
1: "var foo: string",
2: "var foo: string",
3: "var a: string"
1: "(parameter) a: string",
2: "(parameter) a: string",
3: "(parameter) a: string",
4: "(parameter) a: string",
5: "(parameter) b: string"
});

View File

@ -1,9 +1,13 @@
/// <reference path='fourslash.ts'/>
////[[{foo: 'hello', bar: [1]}]]
//// .map(([{foo, bar: [baz]}]) => /*1*/foo + /*2*/baz);
////[[{ a: 'hello', b: [1] }]]
//// .map(([{ a, b: [c] }]) => /*1*/a + /*2*/c);
////function f([[/*3*/a]]: [[string]], { b1: { /*4*/b2 } }: { b1: { b2: string; } }) {}
verify.quickInfos({
1: "var foo: string",
2: "var baz: number"
1: "(parameter) a: string",
2: "(parameter) c: number",
3: "(parameter) a: string",
4: "(parameter) b2: string"
});

View File

@ -9,13 +9,13 @@
////((a/*9*/, b/*10*/, c/*11*/) => [a/*12*/,b/*13*/,c/*14*/])("foo", 101, false);
verify.quickInfos({
1: "var q: number",
2: "var qq: number",
1: "(parameter) q: number",
2: "(parameter) qq: number",
3: "(parameter) x: number",
4: "var p: number",
5: "var q: number",
6: "var qq: number",
7: "var p: number",
4: "(parameter) p: number",
5: "(parameter) q: number",
6: "(parameter) qq: number",
7: "(parameter) p: number",
8: "(parameter) x: number",
9: "(parameter) a: string",
10: "(parameter) b: number",