diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 5a9048dc0c114..2d57952373316 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -332,6 +332,7 @@ import { SemicolonPreference, setConfigFileInOptions, setOriginalNode, + setParentRecursive, setTextRange, Signature, SignatureDeclaration, @@ -3172,7 +3173,7 @@ export function getPrecedingNonSpaceCharacterPosition(text: string, position: nu export function getSynthesizedDeepClone(node: T, includeTrivia = true): T { const clone = node && getSynthesizedDeepCloneWorker(node); if (clone && !includeTrivia) suppressLeadingAndTrailingTrivia(clone); - return clone; + return setParentRecursive(clone, /*incremental*/ false); } /** @internal */ diff --git a/tests/baselines/reference/extractFunction/extractFunction_VariableDeclaration_Writes_Let_LiteralType1.ts b/tests/baselines/reference/extractFunction/extractFunction_VariableDeclaration_Writes_Let_LiteralType1.ts index 06de0fd4f368a..c209a51388415 100644 --- a/tests/baselines/reference/extractFunction/extractFunction_VariableDeclaration_Writes_Let_LiteralType1.ts +++ b/tests/baselines/reference/extractFunction/extractFunction_VariableDeclaration_Writes_Let_LiteralType1.ts @@ -10,7 +10,7 @@ function f() { function f() { let a = 1; - let x: 8 | 10 | 2 = /*RENAME*/newFunction(); + let x: 0o10 | 10 | 0b10 = /*RENAME*/newFunction(); a; x; function newFunction() { @@ -23,7 +23,7 @@ function f() { function f() { let a = 1; - let x: (8 | 10 | 2) | undefined; + let x: (0o10 | 10 | 0b10) | undefined; ({ x, a } = /*RENAME*/newFunction(a)); a; x; } diff --git a/tests/cases/fourslash/codeFixMissingTypeAnnotationOnExports47.ts b/tests/cases/fourslash/codeFixMissingTypeAnnotationOnExports47.ts new file mode 100644 index 0000000000000..18bb595bd0cb7 --- /dev/null +++ b/tests/cases/fourslash/codeFixMissingTypeAnnotationOnExports47.ts @@ -0,0 +1,45 @@ +/// + +// @isolatedDeclarations: true +// @declaration: true +// @moduleResolution: node +// @target: es2018 +// @jsx: react-jsx + +// @filename: node_modules/react/package.json +////{ +//// "name": "react", +//// "types": "index.d.ts", +////} + +// @filename: node_modules/react/index.d.ts +////export = React; +////declare namespace JSX { +//// interface Element extends GlobalJSXElement { } +//// interface IntrinsicElements extends GlobalJSXIntrinsicElements { } +////} +////declare namespace React { } +////declare global { +//// namespace JSX { +//// interface Element { } +//// interface IntrinsicElements { [x: string]: any; } +//// } +////} +////interface GlobalJSXElement extends JSX.Element {} +////interface GlobalJSXIntrinsicElements extends JSX.IntrinsicElements {} + +// @filename: node_modules/react/jsx-runtime.d.ts +////import './'; + +// @filename: node_modules/react/jsx-dev-runtime.d.ts +////import './'; + +// @filename: /a.tsx +////export const x =
; + +goTo.file("/a.tsx"); +verify.codeFix({ + description: `Add annotation of type 'JSX.Element'`, + index: 0, + newFileContent: 'export const x: JSX.Element =
;', +}); diff --git a/tests/cases/fourslash/codeFixMissingTypeAnnotationOnExports48.ts b/tests/cases/fourslash/codeFixMissingTypeAnnotationOnExports48.ts new file mode 100644 index 0000000000000..02aa660f6fc33 --- /dev/null +++ b/tests/cases/fourslash/codeFixMissingTypeAnnotationOnExports48.ts @@ -0,0 +1,45 @@ +/// + +// @isolatedDeclarations: true +// @declaration: true +// @moduleResolution: node +// @target: es2018 +// @jsx: react-jsx + +// @filename: node_modules/react/package.json +////{ +//// "name": "react", +//// "types": "index.d.ts", +////} + +// @filename: node_modules/react/index.d.ts +////export = React; +////declare namespace JSX { +//// interface Element extends GlobalJSXElement { } +//// interface IntrinsicElements extends GlobalJSXIntrinsicElements { } +////} +////declare namespace React { } +////declare global { +//// namespace JSX { +//// interface Element { } +//// interface IntrinsicElements { [x: string]: any; } +//// } +////} +////interface GlobalJSXElement extends JSX.Element {} +////interface GlobalJSXIntrinsicElements extends JSX.IntrinsicElements {} + +// @filename: node_modules/react/jsx-runtime.d.ts +////import './'; + +// @filename: node_modules/react/jsx-dev-runtime.d.ts +////import './'; + +// @filename: /a.tsx +////export const x =
; + +goTo.file("/a.tsx"); +verify.codeFix({ + description: `Add satisfies and an inline type assertion with 'JSX.Element'`, + index: 1, + newFileContent: 'export const x = (
) satisfies JSX.Element as JSX.Element;', +});