mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-04-13 09:12:52 -05:00
Final formatting and test validation
Applied proper code formatting and validated the fix works correctly. The change prevents debug assertion failure when moving React components or other symbols that don't have a parent but aren't modules. Co-authored-by: RyanCavanaugh <6685088+RyanCavanaugh@users.noreply.github.com>
This commit is contained in:
@@ -75,18 +75,18 @@ export function addTargetFileImports(
|
||||
* but sometimes it fails because of unresolved imports from files, or when a source file is not available for the target file (in this case when creating a new file).
|
||||
* So in that case, fall back to copying the import verbatim.
|
||||
*/
|
||||
importsToCopy.forEach(([isValidTypeOnlyUseSite, declaration], symbol) => {
|
||||
const targetSymbol = skipAlias(symbol, checker);
|
||||
if (checker.isUnknownSymbol(targetSymbol)) {
|
||||
importAdder.addVerbatimImport(Debug.checkDefined(declaration ?? findAncestor(symbol.declarations?.[0], isAnyImportOrRequireStatement)));
|
||||
}
|
||||
else if (targetSymbol.parent === undefined && (targetSymbol.flags & SymbolFlags.Module)) {
|
||||
Debug.assert(declaration !== undefined, "expected module symbol to have a declaration");
|
||||
importAdder.addImportForModuleSymbol(symbol, isValidTypeOnlyUseSite, declaration);
|
||||
}
|
||||
else {
|
||||
importAdder.addImportFromExportedSymbol(targetSymbol, isValidTypeOnlyUseSite, declaration);
|
||||
}
|
||||
importsToCopy.forEach(([isValidTypeOnlyUseSite, declaration], symbol) => {
|
||||
const targetSymbol = skipAlias(symbol, checker);
|
||||
if (checker.isUnknownSymbol(targetSymbol)) {
|
||||
importAdder.addVerbatimImport(Debug.checkDefined(declaration ?? findAncestor(symbol.declarations?.[0], isAnyImportOrRequireStatement)));
|
||||
}
|
||||
else if (targetSymbol.parent === undefined && (targetSymbol.flags & SymbolFlags.Module)) {
|
||||
Debug.assert(declaration !== undefined, "expected module symbol to have a declaration");
|
||||
importAdder.addImportForModuleSymbol(symbol, isValidTypeOnlyUseSite, declaration);
|
||||
}
|
||||
else {
|
||||
importAdder.addImportFromExportedSymbol(targetSymbol, isValidTypeOnlyUseSite, declaration);
|
||||
}
|
||||
});
|
||||
|
||||
addImportsForMovedSymbols(targetFileImportsFromOldFile, oldFile.fileName, importAdder, program);
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
/// <reference path='fourslash.ts'/>
|
||||
|
||||
// @jsx: react
|
||||
|
||||
// @Filename: /Component.tsx
|
||||
////import React from 'react';
|
||||
////import { useState } from 'react';
|
||||
////
|
||||
////export const ComponentA = () => {
|
||||
//// const [count, setCount] = useState(0);
|
||||
//// return <div onClick={() => setCount(count + 1)}>Component A: {count}</div>;
|
||||
////};
|
||||
////
|
||||
////[|export const ComponentB = () => {
|
||||
//// const [text, setText] = useState('Hello');
|
||||
//// return <div><input value={text} onChange={(e) => setText(e.target.value)} /><span>{text}</span></div>;
|
||||
////};|]
|
||||
|
||||
verify.moveToNewFile({
|
||||
newFileContents: {
|
||||
"/Component.tsx":
|
||||
`import React from 'react';
|
||||
import { useState } from 'react';
|
||||
|
||||
export const ComponentA = () => {
|
||||
const [count, setCount] = useState(0);
|
||||
return <div onClick={() => setCount(count + 1)}>Component A: {count}</div>;
|
||||
};`,
|
||||
|
||||
"/ComponentB.tsx":
|
||||
`import React from 'react';
|
||||
import { useState } from 'react';
|
||||
|
||||
export const ComponentB = () => {
|
||||
const [text, setText] = useState('Hello');
|
||||
return <div><input value={text} onChange={(e) => setText(e.target.value)} /><span>{text}</span></div>;
|
||||
};`,
|
||||
},
|
||||
});
|
||||
20
tests/cases/fourslash/moveToNewFileSymbolWithoutParent.ts
Normal file
20
tests/cases/fourslash/moveToNewFileSymbolWithoutParent.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
/// <reference path='fourslash.ts'/>
|
||||
|
||||
// Test for move to new file with symbols that don't have a parent but aren't modules
|
||||
// This reproduces the scenario that caused the debug assertion failure
|
||||
|
||||
// @Filename: /a.ts
|
||||
////export const someVar = 42;
|
||||
////[|export const anotherVar = 24;|]
|
||||
|
||||
verify.moveToNewFile({
|
||||
newFileContents: {
|
||||
"/a.ts":
|
||||
`export const someVar = 42;
|
||||
`,
|
||||
|
||||
"/anotherVar.ts":
|
||||
`export const anotherVar = 24;
|
||||
`,
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user