(oldFile, toMove, checker)
| 162405 | return movedSymbols.forEachEntry(ts.symbolNameNoDefault) || "newFile"; |
| 162406 | } |
| 162407 | function getUsageInfo(oldFile, toMove, checker) { |
| 162408 | var movedSymbols = new SymbolSet(); |
| 162409 | var oldImportsNeededByNewFile = new SymbolSet(); |
| 162410 | var newFileImportsFromOldFile = new SymbolSet(); |
| 162411 | var containsJsx = ts.find(toMove, function (statement) { return !!(statement.transformFlags & 2 /* TransformFlags.ContainsJsx */); }); |
| 162412 | var jsxNamespaceSymbol = getJsxNamespaceSymbol(containsJsx); |
| 162413 | if (jsxNamespaceSymbol) { // Might not exist (e.g. in non-compiling code) |
| 162414 | oldImportsNeededByNewFile.add(jsxNamespaceSymbol); |
| 162415 | } |
| 162416 | for (var _i = 0, toMove_1 = toMove; _i < toMove_1.length; _i++) { |
| 162417 | var statement = toMove_1[_i]; |
| 162418 | forEachTopLevelDeclaration(statement, function (decl) { |
| 162419 | movedSymbols.add(ts.Debug.checkDefined(ts.isExpressionStatement(decl) ? checker.getSymbolAtLocation(decl.expression.left) : decl.symbol, "Need a symbol here")); |
| 162420 | }); |
| 162421 | } |
| 162422 | for (var _a = 0, toMove_2 = toMove; _a < toMove_2.length; _a++) { |
| 162423 | var statement = toMove_2[_a]; |
| 162424 | forEachReference(statement, checker, function (symbol) { |
| 162425 | if (!symbol.declarations) |
| 162426 | return; |
| 162427 | for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { |
| 162428 | var decl = _a[_i]; |
| 162429 | if (isInImport(decl)) { |
| 162430 | oldImportsNeededByNewFile.add(symbol); |
| 162431 | } |
| 162432 | else if (isTopLevelDeclaration(decl) && sourceFileOfTopLevelDeclaration(decl) === oldFile && !movedSymbols.has(symbol)) { |
| 162433 | newFileImportsFromOldFile.add(symbol); |
| 162434 | } |
| 162435 | } |
| 162436 | }); |
| 162437 | } |
| 162438 | var unusedImportsFromOldFile = oldImportsNeededByNewFile.clone(); |
| 162439 | var oldFileImportsFromNewFile = new SymbolSet(); |
| 162440 | for (var _b = 0, _c = oldFile.statements; _b < _c.length; _b++) { |
| 162441 | var statement = _c[_b]; |
| 162442 | if (ts.contains(toMove, statement)) |
| 162443 | continue; |
| 162444 | // jsxNamespaceSymbol will only be set iff it is in oldImportsNeededByNewFile. |
| 162445 | if (jsxNamespaceSymbol && !!(statement.transformFlags & 2 /* TransformFlags.ContainsJsx */)) { |
| 162446 | unusedImportsFromOldFile.delete(jsxNamespaceSymbol); |
| 162447 | } |
| 162448 | forEachReference(statement, checker, function (symbol) { |
| 162449 | if (movedSymbols.has(symbol)) |
| 162450 | oldFileImportsFromNewFile.add(symbol); |
| 162451 | unusedImportsFromOldFile.delete(symbol); |
| 162452 | }); |
| 162453 | } |
| 162454 | return { movedSymbols: movedSymbols, newFileImportsFromOldFile: newFileImportsFromOldFile, oldFileImportsFromNewFile: oldFileImportsFromNewFile, oldImportsNeededByNewFile: oldImportsNeededByNewFile, unusedImportsFromOldFile: unusedImportsFromOldFile }; |
| 162455 | function getJsxNamespaceSymbol(containsJsx) { |
| 162456 | if (containsJsx === undefined) { |
| 162457 | return undefined; |
| 162458 | } |
| 162459 | var jsxNamespace = checker.getJsxNamespace(containsJsx); |
| 162460 | // Strictly speaking, this could resolve to a symbol other than the JSX namespace. |
| 162461 | // This will produce erroneous output (probably, an incorrectly copied import) but |
| 162462 | // is expected to be very rare and easily reversible. |
| 162463 | var jsxNamespaceSymbol = checker.resolveName(jsxNamespace, containsJsx, 1920 /* SymbolFlags.Namespace */, /*excludeGlobals*/ true); |
| 162464 | return !!jsxNamespaceSymbol && ts.some(jsxNamespaceSymbol.declarations, isInImport) |
no test coverage detected
searching dependent graphs…