From 0bda862ccaddf6b5780db3cfa163f320c530d3b7 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 14 May 2018 22:49:50 -0700 Subject: [PATCH 1/4] Remove assert --- src/compiler/checker.ts | 2 +- .../codeFixInferFromUsageJSXElement.ts | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b85acc03d46..f308348fb46 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3604,7 +3604,7 @@ namespace ts { function symbolToParameterDeclaration(parameterSymbol: Symbol, context: NodeBuilderContext, preserveModifierFlags?: boolean): ParameterDeclaration { const parameterDeclaration = getDeclarationOfKind(parameterSymbol, SyntaxKind.Parameter); - Debug.assert(!!parameterDeclaration || isTransientSymbol(parameterSymbol) && !!parameterSymbol.isRestParameter); + Debug.assert(!!parameterDeclaration || isTransientSymbol(parameterSymbol)); let parameterType = getTypeOfSymbol(parameterSymbol); if (parameterDeclaration && isRequiredInitializedParameter(parameterDeclaration)) { diff --git a/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts b/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts new file mode 100644 index 00000000000..c7ce7cc6bdd --- /dev/null +++ b/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts @@ -0,0 +1,40 @@ +/// + +// @noImplicitAny: true +// @jsx: react +// @module: es2015 +// @moduleResolution: node + +// @Filename: /node_modules/@types/react/index.d.ts +////export = React; +////export as namespace React; +////declare namespace React { +//// export class Component { render(): JSX.Element | null; } +////} +////declare global { +//// namespace JSX { +//// interface Element {} +//// } +////} + + +// @filename: a.tsx +//// import React from 'react'; +//// +//// export default function Component([|props |]) { +//// if (props.isLoading) { +//// return
...Loading < /div>; +//// } +//// else { +//// return { +//// return props.update(rec); +//// } +//// } +//// />; +//// } +//// } + + +verify.rangeAfterCodeFix("props: { isLoading: any; update: (...arg0: any) => void; }",/*includeWhiteSpace*/ undefined, /*errorCode*/ undefined, 0); \ No newline at end of file From 6f4ed3afa6cf60015476d3b3f62dd8247a558d8f Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 15 May 2018 22:08:01 -0700 Subject: [PATCH 2/4] Handel synthetic rest parameter declarations --- src/compiler/checker.ts | 3 ++- tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index f308348fb46..8a64e585e4a 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3613,7 +3613,8 @@ namespace ts { const parameterTypeNode = typeToTypeNodeHelper(parameterType, context); const modifiers = !(context.flags & NodeBuilderFlags.OmitParameterModifiers) && preserveModifierFlags && parameterDeclaration && parameterDeclaration.modifiers && parameterDeclaration.modifiers.map(getSynthesizedClone); - const dotDotDotToken = !parameterDeclaration || isRestParameter(parameterDeclaration) ? createToken(SyntaxKind.DotDotDotToken) : undefined; + const isRest = parameterDeclaration ? isRestParameter(parameterDeclaration) : (parameterSymbol as TransientSymbol).isRestParameter; + const dotDotDotToken = isRest ? createToken(SyntaxKind.DotDotDotToken) : undefined; const name = parameterDeclaration ? parameterDeclaration.name ? parameterDeclaration.name.kind === SyntaxKind.Identifier ? diff --git a/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts b/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts index c7ce7cc6bdd..250673d91fc 100644 --- a/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts +++ b/tests/cases/fourslash/codeFixInferFromUsageJSXElement.ts @@ -37,4 +37,4 @@ //// } -verify.rangeAfterCodeFix("props: { isLoading: any; update: (...arg0: any) => void; }",/*includeWhiteSpace*/ undefined, /*errorCode*/ undefined, 0); \ No newline at end of file +verify.rangeAfterCodeFix("props: { isLoading: any; update: (arg0: any) => void; }",/*includeWhiteSpace*/ undefined, /*errorCode*/ undefined, 0); \ No newline at end of file From 0b89460c18eecc0ee39ae562ab6bb44616ea59c5 Mon Sep 17 00:00:00 2001 From: Andrew Casey Date: Wed, 16 May 2018 13:36:02 -0700 Subject: [PATCH 3/4] Don't collect open-file telemetry on the syntax server It's throwing an exception (since there's no program from which to retrieve the SourceFile) and there's no reason to fix it since the same files are open in the semantic server. --- src/server/editorServices.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 459b4b12d83..bb3560cbde5 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -2123,7 +2123,7 @@ namespace ts.server { } private telemetryOnOpenFile(scriptInfo: ScriptInfo): void { - if (!this.eventHandler || !scriptInfo.isJavaScript() || !addToSeen(this.allJsFilesForOpenFileTelemetry, scriptInfo.path)) { + if (this.syntaxOnly || !this.eventHandler || !scriptInfo.isJavaScript() || !addToSeen(this.allJsFilesForOpenFileTelemetry, scriptInfo.path)) { return; } From d70da6478ac5b1e2988b7f531516353bf0186609 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Wed, 16 May 2018 13:53:40 -0700 Subject: [PATCH 4/4] Use newer signature help check (#24179) --- .../jsxWithTypeParametershasInstantiatedSignatureHelp.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/cases/fourslash/jsxWithTypeParametershasInstantiatedSignatureHelp.tsx b/tests/cases/fourslash/jsxWithTypeParametershasInstantiatedSignatureHelp.tsx index e317fe338ed..71859594cea 100644 --- a/tests/cases/fourslash/jsxWithTypeParametershasInstantiatedSignatureHelp.tsx +++ b/tests/cases/fourslash/jsxWithTypeParametershasInstantiatedSignatureHelp.tsx @@ -14,6 +14,6 @@ //// (/>); goTo.marker("1"); -verify.currentSignatureHelpIs("SFC(_props: Record): string"); +verify.signatureHelp({ text: "SFC(_props: Record): string" }); goTo.marker("2"); -verify.currentSignatureHelpIs("SFC(_props: Record): string"); +verify.signatureHelp({ text: "SFC(_props: Record): string" });