Update LKG

This commit is contained in:
Mohamed Hegazy
2017-09-22 12:55:18 -07:00
parent aa40be6553
commit 94b4f8b79e
6 changed files with 450 additions and 240 deletions

View File

@@ -2199,6 +2199,8 @@ var ts;
return sourceFile.checkJsDirective ? sourceFile.checkJsDirective.enabled : compilerOptions.checkJs;
}
ts.isCheckJsEnabledForFile = isCheckJsEnabledForFile;
function assertTypeIsNever(_) { }
ts.assertTypeIsNever = assertTypeIsNever;
})(ts || (ts = {}));
var ts;
(function (ts) {
@@ -18064,17 +18066,20 @@ var ts;
return ts.combinePaths(directory, "package.json");
}
function loadModuleFromNodeModulesFolder(extensions, moduleName, nodeModulesFolder, nodeModulesFolderExists, failedLookupLocations, state) {
var _a = getNameOfTopDirectory(moduleName), top = _a.top, rest = _a.rest;
var packageRootPath = ts.combinePaths(nodeModulesFolder, top);
var _a = getPackageName(moduleName), packageName = _a.packageName, rest = _a.rest;
var packageRootPath = ts.combinePaths(nodeModulesFolder, packageName);
var _b = getPackageJsonInfo(packageRootPath, rest, failedLookupLocations, !nodeModulesFolderExists, state), packageJsonContent = _b.packageJsonContent, packageId = _b.packageId;
var candidate = ts.normalizePath(ts.combinePaths(nodeModulesFolder, moduleName));
var pathAndExtension = loadModuleFromFile(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state) ||
loadNodeModuleFromDirectoryWorker(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state, packageJsonContent);
return withPackageId(packageId, pathAndExtension);
}
function getNameOfTopDirectory(name) {
var idx = name.indexOf(ts.directorySeparator);
return idx === -1 ? { top: name, rest: "" } : { top: name.slice(0, idx), rest: name.slice(idx + 1) };
function getPackageName(moduleName) {
var idx = moduleName.indexOf(ts.directorySeparator);
if (moduleName[0] === "@") {
idx = moduleName.indexOf(ts.directorySeparator, idx + 1);
}
return idx === -1 ? { packageName: moduleName, rest: "" } : { packageName: moduleName.slice(0, idx), rest: moduleName.slice(idx + 1) };
}
function loadModuleFromNodeModules(extensions, moduleName, directory, failedLookupLocations, state, cache) {
return loadModuleFromNodeModulesWorker(extensions, moduleName, directory, failedLookupLocations, state, false, cache);

View File

@@ -3232,6 +3232,8 @@ var ts;
return sourceFile.checkJsDirective ? sourceFile.checkJsDirective.enabled : compilerOptions.checkJs;
}
ts.isCheckJsEnabledForFile = isCheckJsEnabledForFile;
function assertTypeIsNever(_) { }
ts.assertTypeIsNever = assertTypeIsNever;
})(ts || (ts = {}));
var ts;
(function (ts) {
@@ -5232,17 +5234,20 @@ var ts;
return ts.combinePaths(directory, "package.json");
}
function loadModuleFromNodeModulesFolder(extensions, moduleName, nodeModulesFolder, nodeModulesFolderExists, failedLookupLocations, state) {
var _a = getNameOfTopDirectory(moduleName), top = _a.top, rest = _a.rest;
var packageRootPath = ts.combinePaths(nodeModulesFolder, top);
var _a = getPackageName(moduleName), packageName = _a.packageName, rest = _a.rest;
var packageRootPath = ts.combinePaths(nodeModulesFolder, packageName);
var _b = getPackageJsonInfo(packageRootPath, rest, failedLookupLocations, !nodeModulesFolderExists, state), packageJsonContent = _b.packageJsonContent, packageId = _b.packageId;
var candidate = ts.normalizePath(ts.combinePaths(nodeModulesFolder, moduleName));
var pathAndExtension = loadModuleFromFile(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state) ||
loadNodeModuleFromDirectoryWorker(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state, packageJsonContent);
return withPackageId(packageId, pathAndExtension);
}
function getNameOfTopDirectory(name) {
var idx = name.indexOf(ts.directorySeparator);
return idx === -1 ? { top: name, rest: "" } : { top: name.slice(0, idx), rest: name.slice(idx + 1) };
function getPackageName(moduleName) {
var idx = moduleName.indexOf(ts.directorySeparator);
if (moduleName[0] === "@") {
idx = moduleName.indexOf(ts.directorySeparator, idx + 1);
}
return idx === -1 ? { packageName: moduleName, rest: "" } : { packageName: moduleName.slice(0, idx), rest: moduleName.slice(idx + 1) };
}
function loadModuleFromNodeModules(extensions, moduleName, directory, failedLookupLocations, state, cache) {
return loadModuleFromNodeModulesWorker(extensions, moduleName, directory, failedLookupLocations, state, false, cache);
@@ -74601,7 +74606,7 @@ var ts;
Messages.CannotExtractRangeThatContainsWritesToReferencesLocatedOutsideOfTheTargetRangeInGenerators = createMessage("Cannot extract range containing writes to references located outside of the target range in generators.");
Messages.TypeWillNotBeVisibleInTheNewScope = createMessage("Type will not visible in the new scope.");
Messages.FunctionWillNotBeVisibleInTheNewScope = createMessage("Function will not visible in the new scope.");
Messages.InsufficientSelection = createMessage("Select more than a single token.");
Messages.InsufficientSelection = createMessage("Select more than a single identifier.");
Messages.CannotExtractExportedEntity = createMessage("Cannot extract exported declaration");
Messages.CannotCombineWritesAndReturns = createMessage("Cannot combine writes and returns");
Messages.CannotExtractReadonlyPropertyInitializerOutsideConstructor = createMessage("Cannot move initialization of read-only class property outside of the constructor");
@@ -74618,6 +74623,9 @@ var ts;
})(RangeFacts || (RangeFacts = {}));
function getRangeToExtract(sourceFile, span) {
var length = span.length || 0;
if (length === 0) {
return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.StatementOrExpressionExpected)] };
}
var start = getParentNodeInSpan(ts.getTokenAtPosition(sourceFile, span.start, false), sourceFile, span);
var end = getParentNodeInSpan(ts.findTokenOnLeftOfPosition(sourceFile, ts.textSpanEnd(span)), sourceFile, span);
var declarations = [];
@@ -74666,7 +74674,7 @@ var ts;
return { errors: [ts.createFileDiagnostic(sourceFile, start, length, message)] };
}
function checkRootNode(node) {
if (ts.isToken(ts.isExpressionStatement(node) ? node.expression : node)) {
if (ts.isIdentifier(ts.isExpressionStatement(node) ? node.expression : node)) {
return [ts.createDiagnosticForNode(node, Messages.InsufficientSelection)];
}
return undefined;
@@ -74759,39 +74767,26 @@ var ts;
return false;
}
var savedPermittedJumps = permittedJumps;
if (node.parent) {
switch (node.parent.kind) {
case 211:
if (node.parent.thenStatement === node || node.parent.elseStatement === node) {
permittedJumps = 0;
}
break;
case 224:
if (node.parent.tryBlock === node) {
permittedJumps = 0;
}
else if (node.parent.finallyBlock === node) {
permittedJumps = 4;
}
break;
case 260:
if (node.parent.block === node) {
permittedJumps = 0;
}
break;
case 257:
if (node.expression !== node) {
permittedJumps |= 1;
}
break;
default:
if (ts.isIterationStatement(node.parent, false)) {
if (node.parent.statement === node) {
permittedJumps |= 1 | 2;
}
}
break;
}
switch (node.kind) {
case 211:
permittedJumps = 0;
break;
case 224:
permittedJumps = 0;
break;
case 207:
if (node.parent && node.parent.kind === 224 && node.finallyBlock === node) {
permittedJumps = 4;
}
break;
case 257:
permittedJumps |= 1;
break;
default:
if (ts.isIterationStatement(node, false)) {
permittedJumps |= 1 | 2;
}
break;
}
switch (node.kind) {
case 169:
@@ -74816,7 +74811,7 @@ var ts;
}
}
else {
if (!(permittedJumps & (218 ? 1 : 2))) {
if (!(permittedJumps & (node.kind === 218 ? 1 : 2))) {
(errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.CannotExtractRangeContainingConditionalBreakOrContinueStatements));
}
}
@@ -74934,7 +74929,7 @@ var ts;
else if (ts.isClassLike(scope)) {
return scope.kind === 229
? "class '" + scope.name.text + "'"
: scope.name.text
: scope.name && scope.name.text
? "class expression '" + scope.name.text + "'"
: "anonymous class expression";
}
@@ -74991,13 +74986,20 @@ var ts;
if (range.facts & RangeFacts.IsAsyncFunction) {
modifiers.push(ts.createToken(120));
}
newFunction = ts.createMethod(undefined, modifiers, range.facts & RangeFacts.IsGenerator ? ts.createToken(39) : undefined, functionName, undefined, undefined, parameters, returnType, body);
newFunction = ts.createMethod(undefined, modifiers.length ? modifiers : undefined, range.facts & RangeFacts.IsGenerator ? ts.createToken(39) : undefined, functionName, undefined, undefined, parameters, returnType, body);
}
else {
newFunction = ts.createFunctionDeclaration(undefined, range.facts & RangeFacts.IsAsyncFunction ? [ts.createToken(120)] : undefined, range.facts & RangeFacts.IsGenerator ? ts.createToken(39) : undefined, functionName, undefined, parameters, returnType, body);
}
var changeTracker = ts.textChanges.ChangeTracker.fromCodeFixContext(context);
changeTracker.insertNodeBefore(context.file, scope.getLastToken(), newFunction, { prefix: context.newLineCharacter, suffix: context.newLineCharacter });
var minInsertionPos = (isReadonlyArray(range.range) ? ts.lastOrUndefined(range.range) : range.range).end;
var nodeToInsertBefore = getNodeToInsertBefore(minInsertionPos, scope);
if (nodeToInsertBefore) {
changeTracker.insertNodeBefore(context.file, nodeToInsertBefore, newFunction, { suffix: context.newLineCharacter + context.newLineCharacter });
}
else {
changeTracker.insertNodeBefore(context.file, scope.getLastToken(), newFunction, { prefix: context.newLineCharacter, suffix: context.newLineCharacter });
}
var newNodes = [];
var called = getCalledExpression(scope, range, functionNameText);
var call = ts.createCall(called, undefined, callArguments);
@@ -75021,6 +75023,9 @@ var ts;
}
else {
newNodes.push(ts.createStatement(ts.createBinary(assignments[0].name, 58, call)));
if (range.facts & RangeFacts.HasReturn) {
newNodes.push(ts.createReturn());
}
}
}
else {
@@ -75055,6 +75060,33 @@ var ts;
var renameFilename = renameRange.getSourceFile().fileName;
var renameLocation = getRenameLocation(edits, renameFilename, functionNameText);
return { renameFilename: renameFilename, renameLocation: renameLocation, edits: edits };
function getStatementsOrClassElements(scope) {
if (ts.isFunctionLike(scope)) {
var body_1 = scope.body;
if (ts.isBlock(body_1)) {
return body_1.statements;
}
}
else if (ts.isModuleBlock(scope) || ts.isSourceFile(scope)) {
return scope.statements;
}
else if (ts.isClassLike(scope)) {
return scope.members;
}
else {
ts.assertTypeIsNever(scope);
}
return ts.emptyArray;
}
function getNodeToInsertBefore(minPos, scope) {
var children = getStatementsOrClassElements(scope);
for (var _i = 0, children_3 = children; _i < children_3.length; _i++) {
var child = children_3[_i];
if (child.pos >= minPos && ts.isFunctionLike(child) && !ts.isConstructorDeclaration(child)) {
return child;
}
}
}
}
function getRenameLocation(edits, renameFilename, functionNameText) {
var delta = 0;
@@ -75088,6 +75120,7 @@ var ts;
return { body: ts.createBlock(body.statements, true), returnValueProperty: undefined };
}
var returnValueProperty;
var ignoreReturns = false;
var statements = ts.createNodeArray(ts.isBlock(body) ? body.statements.slice(0) : [ts.isStatement(body) ? body : ts.createReturn(body)]);
if (writes || substitutions.size) {
var rewrittenStatements = ts.visitNodes(statements, visitor).slice();
@@ -75106,7 +75139,7 @@ var ts;
return { body: ts.createBlock(statements, true), returnValueProperty: undefined };
}
function visitor(node) {
if (node.kind === 219 && writes) {
if (!ignoreReturns && node.kind === 219 && writes) {
var assignments = getPropertyAssignmentsForWrites(writes);
if (node.expression) {
if (!returnValueProperty) {
@@ -75122,8 +75155,12 @@ var ts;
}
}
else {
var oldIgnoreReturns = ignoreReturns;
ignoreReturns = ignoreReturns || ts.isFunctionLike(node) || ts.isClassLike(node);
var substitution = substitutions.get(ts.getNodeId(node).toString());
return substitution || ts.visitEachChild(node, visitor, ts.nullTransformationContext);
var result = substitution || ts.visitEachChild(node, visitor, ts.nullTransformationContext);
ignoreReturns = oldIgnoreReturns;
return result;
}
}
}
@@ -75228,7 +75265,9 @@ var ts;
}
}
function recordUsagebySymbol(identifier, usage, isTypeName) {
var symbol = checker.getSymbolAtLocation(identifier);
var symbol = identifier.parent && ts.isShorthandPropertyAssignment(identifier.parent) && identifier.parent.name === identifier
? checker.getShorthandAssignmentValueSymbol(identifier.parent)
: checker.getSymbolAtLocation(identifier);
if (!symbol) {
return undefined;
}
@@ -75252,7 +75291,7 @@ var ts;
if (!declInFile) {
return undefined;
}
if (ts.rangeContainsRange(enclosingTextRange, declInFile)) {
if (ts.rangeContainsStartEnd(enclosingTextRange, declInFile.getStart(), declInFile.end)) {
return undefined;
}
if (targetRange.facts & RangeFacts.IsGenerator && usage === 2) {
@@ -75447,9 +75486,9 @@ var ts;
return;
}
if (ts.isJSDocCommentContainingNode(this)) {
var children_3 = [];
this.forEachChild(function (child) { children_3.push(child); });
this._children = children_3;
var children_4 = [];
this.forEachChild(function (child) { children_4.push(child); });
this._children = children_4;
return;
}
var children = [];
@@ -79377,7 +79416,8 @@ var ts;
return { info: info, projectErrors: this.getGlobalProjectErrors() };
}
var lastReportedFileNames_1 = this.lastReportedFileNames;
var currentFiles_1 = ts.arrayToSet(this.getFileNames());
var externalFiles = this.getExternalFiles().map(function (f) { return server.toNormalizedPath(f); });
var currentFiles_1 = ts.arrayToSet(this.getFileNames().concat(externalFiles));
var added_1 = [];
var removed_1 = [];
var updated = updatedFileNames ? ts.arrayFrom(updatedFileNames.keys()) : [];
@@ -79397,9 +79437,11 @@ var ts;
}
else {
var projectFileNames = this.getFileNames();
this.lastReportedFileNames = ts.arrayToSet(projectFileNames);
var externalFiles = this.getExternalFiles().map(function (f) { return server.toNormalizedPath(f); });
var allFiles = projectFileNames.concat(externalFiles);
this.lastReportedFileNames = ts.arrayToSet(allFiles);
this.lastReportedVersion = this.projectStructureVersion;
return { info: info, files: projectFileNames, projectErrors: this.getGlobalProjectErrors() };
return { info: info, files: allFiles, projectErrors: this.getGlobalProjectErrors() };
}
};
Project.prototype.getReferencedFiles = function (path) {
@@ -79565,8 +79607,11 @@ var ts;
}
if (this.projectService.globalPlugins) {
var _loop_10 = function (globalPluginName) {
if (!globalPluginName)
return "continue";
if (options.plugins && options.plugins.some(function (p) { return p.name === globalPluginName; }))
return "continue";
this_2.projectService.logger.info("Loading global plugin " + globalPluginName);
this_2.enablePlugin({ name: globalPluginName, global: true }, searchPaths);
};
var this_2 = this;
@@ -79578,6 +79623,7 @@ var ts;
};
ConfiguredProject.prototype.enablePlugin = function (pluginConfigEntry, searchPaths) {
var _this = this;
this.projectService.logger.info("Enabling plugin " + pluginConfigEntry.name + " from candidate paths: " + searchPaths.join(","));
var log = function (message) {
_this.projectService.logger.info(message);
};
@@ -79589,7 +79635,7 @@ var ts;
return;
}
}
this.projectService.logger.info("Couldn't find " + pluginConfigEntry.name + " anywhere in paths: " + searchPaths.join(","));
this.projectService.logger.info("Couldn't find " + pluginConfigEntry.name);
};
ConfiguredProject.prototype.enableProxy = function (pluginModuleFactory, configEntry) {
try {
@@ -79605,7 +79651,16 @@ var ts;
serverHost: this.projectService.host
};
var pluginModule = pluginModuleFactory({ typescript: ts });
this.languageService = pluginModule.create(info);
var newLS = pluginModule.create(info);
for (var _i = 0, _a = Object.keys(this.languageService); _i < _a.length; _i++) {
var k = _a[_i];
if (!(k in newLS)) {
this.projectService.logger.info("Plugin activation warning: Missing proxied method " + k + " in created LS. Patching.");
newLS[k] = this.languageService[k];
}
}
this.projectService.logger.info("Plugin validation succeded");
this.languageService = newLS;
this.plugins.push(pluginModule);
}
catch (e) {
@@ -79634,6 +79689,9 @@ var ts;
}
catch (e) {
_this.projectService.logger.info("A plugin threw an exception in getExternalFiles: " + e);
if (e.stack) {
_this.projectService.logger.info(e.stack);
}
}
}));
};
@@ -83796,7 +83854,7 @@ var ts;
return;
}
if (this.telemetryEnabled) {
var body_1 = {
var body_2 = {
telemetryEventName: "typingsInstalled",
payload: {
installedPackages: response.packagesToInstall.join(","),
@@ -83805,7 +83863,7 @@ var ts;
}
};
var eventName_1 = "telemetry";
this.eventSender.event(body_1, eventName_1);
this.eventSender.event(body_2, eventName_1);
}
var body = {
eventId: response.eventId,

View File

@@ -3232,6 +3232,8 @@ var ts;
return sourceFile.checkJsDirective ? sourceFile.checkJsDirective.enabled : compilerOptions.checkJs;
}
ts.isCheckJsEnabledForFile = isCheckJsEnabledForFile;
function assertTypeIsNever(_) { }
ts.assertTypeIsNever = assertTypeIsNever;
})(ts || (ts = {}));
var ts;
(function (ts) {
@@ -18256,17 +18258,20 @@ var ts;
return ts.combinePaths(directory, "package.json");
}
function loadModuleFromNodeModulesFolder(extensions, moduleName, nodeModulesFolder, nodeModulesFolderExists, failedLookupLocations, state) {
var _a = getNameOfTopDirectory(moduleName), top = _a.top, rest = _a.rest;
var packageRootPath = ts.combinePaths(nodeModulesFolder, top);
var _a = getPackageName(moduleName), packageName = _a.packageName, rest = _a.rest;
var packageRootPath = ts.combinePaths(nodeModulesFolder, packageName);
var _b = getPackageJsonInfo(packageRootPath, rest, failedLookupLocations, !nodeModulesFolderExists, state), packageJsonContent = _b.packageJsonContent, packageId = _b.packageId;
var candidate = ts.normalizePath(ts.combinePaths(nodeModulesFolder, moduleName));
var pathAndExtension = loadModuleFromFile(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state) ||
loadNodeModuleFromDirectoryWorker(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state, packageJsonContent);
return withPackageId(packageId, pathAndExtension);
}
function getNameOfTopDirectory(name) {
var idx = name.indexOf(ts.directorySeparator);
return idx === -1 ? { top: name, rest: "" } : { top: name.slice(0, idx), rest: name.slice(idx + 1) };
function getPackageName(moduleName) {
var idx = moduleName.indexOf(ts.directorySeparator);
if (moduleName[0] === "@") {
idx = moduleName.indexOf(ts.directorySeparator, idx + 1);
}
return idx === -1 ? { packageName: moduleName, rest: "" } : { packageName: moduleName.slice(0, idx), rest: moduleName.slice(idx + 1) };
}
function loadModuleFromNodeModules(extensions, moduleName, directory, failedLookupLocations, state, cache) {
return loadModuleFromNodeModulesWorker(extensions, moduleName, directory, failedLookupLocations, state, false, cache);
@@ -74601,7 +74606,7 @@ var ts;
Messages.CannotExtractRangeThatContainsWritesToReferencesLocatedOutsideOfTheTargetRangeInGenerators = createMessage("Cannot extract range containing writes to references located outside of the target range in generators.");
Messages.TypeWillNotBeVisibleInTheNewScope = createMessage("Type will not visible in the new scope.");
Messages.FunctionWillNotBeVisibleInTheNewScope = createMessage("Function will not visible in the new scope.");
Messages.InsufficientSelection = createMessage("Select more than a single token.");
Messages.InsufficientSelection = createMessage("Select more than a single identifier.");
Messages.CannotExtractExportedEntity = createMessage("Cannot extract exported declaration");
Messages.CannotCombineWritesAndReturns = createMessage("Cannot combine writes and returns");
Messages.CannotExtractReadonlyPropertyInitializerOutsideConstructor = createMessage("Cannot move initialization of read-only class property outside of the constructor");
@@ -74618,6 +74623,9 @@ var ts;
})(RangeFacts || (RangeFacts = {}));
function getRangeToExtract(sourceFile, span) {
var length = span.length || 0;
if (length === 0) {
return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.StatementOrExpressionExpected)] };
}
var start = getParentNodeInSpan(ts.getTokenAtPosition(sourceFile, span.start, false), sourceFile, span);
var end = getParentNodeInSpan(ts.findTokenOnLeftOfPosition(sourceFile, ts.textSpanEnd(span)), sourceFile, span);
var declarations = [];
@@ -74666,7 +74674,7 @@ var ts;
return { errors: [ts.createFileDiagnostic(sourceFile, start, length, message)] };
}
function checkRootNode(node) {
if (ts.isToken(ts.isExpressionStatement(node) ? node.expression : node)) {
if (ts.isIdentifier(ts.isExpressionStatement(node) ? node.expression : node)) {
return [ts.createDiagnosticForNode(node, Messages.InsufficientSelection)];
}
return undefined;
@@ -74759,39 +74767,26 @@ var ts;
return false;
}
var savedPermittedJumps = permittedJumps;
if (node.parent) {
switch (node.parent.kind) {
case 211:
if (node.parent.thenStatement === node || node.parent.elseStatement === node) {
permittedJumps = 0;
}
break;
case 224:
if (node.parent.tryBlock === node) {
permittedJumps = 0;
}
else if (node.parent.finallyBlock === node) {
permittedJumps = 4;
}
break;
case 260:
if (node.parent.block === node) {
permittedJumps = 0;
}
break;
case 257:
if (node.expression !== node) {
permittedJumps |= 1;
}
break;
default:
if (ts.isIterationStatement(node.parent, false)) {
if (node.parent.statement === node) {
permittedJumps |= 1 | 2;
}
}
break;
}
switch (node.kind) {
case 211:
permittedJumps = 0;
break;
case 224:
permittedJumps = 0;
break;
case 207:
if (node.parent && node.parent.kind === 224 && node.finallyBlock === node) {
permittedJumps = 4;
}
break;
case 257:
permittedJumps |= 1;
break;
default:
if (ts.isIterationStatement(node, false)) {
permittedJumps |= 1 | 2;
}
break;
}
switch (node.kind) {
case 169:
@@ -74816,7 +74811,7 @@ var ts;
}
}
else {
if (!(permittedJumps & (218 ? 1 : 2))) {
if (!(permittedJumps & (node.kind === 218 ? 1 : 2))) {
(errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.CannotExtractRangeContainingConditionalBreakOrContinueStatements));
}
}
@@ -74934,7 +74929,7 @@ var ts;
else if (ts.isClassLike(scope)) {
return scope.kind === 229
? "class '" + scope.name.text + "'"
: scope.name.text
: scope.name && scope.name.text
? "class expression '" + scope.name.text + "'"
: "anonymous class expression";
}
@@ -74991,13 +74986,20 @@ var ts;
if (range.facts & RangeFacts.IsAsyncFunction) {
modifiers.push(ts.createToken(120));
}
newFunction = ts.createMethod(undefined, modifiers, range.facts & RangeFacts.IsGenerator ? ts.createToken(39) : undefined, functionName, undefined, undefined, parameters, returnType, body);
newFunction = ts.createMethod(undefined, modifiers.length ? modifiers : undefined, range.facts & RangeFacts.IsGenerator ? ts.createToken(39) : undefined, functionName, undefined, undefined, parameters, returnType, body);
}
else {
newFunction = ts.createFunctionDeclaration(undefined, range.facts & RangeFacts.IsAsyncFunction ? [ts.createToken(120)] : undefined, range.facts & RangeFacts.IsGenerator ? ts.createToken(39) : undefined, functionName, undefined, parameters, returnType, body);
}
var changeTracker = ts.textChanges.ChangeTracker.fromCodeFixContext(context);
changeTracker.insertNodeBefore(context.file, scope.getLastToken(), newFunction, { prefix: context.newLineCharacter, suffix: context.newLineCharacter });
var minInsertionPos = (isReadonlyArray(range.range) ? ts.lastOrUndefined(range.range) : range.range).end;
var nodeToInsertBefore = getNodeToInsertBefore(minInsertionPos, scope);
if (nodeToInsertBefore) {
changeTracker.insertNodeBefore(context.file, nodeToInsertBefore, newFunction, { suffix: context.newLineCharacter + context.newLineCharacter });
}
else {
changeTracker.insertNodeBefore(context.file, scope.getLastToken(), newFunction, { prefix: context.newLineCharacter, suffix: context.newLineCharacter });
}
var newNodes = [];
var called = getCalledExpression(scope, range, functionNameText);
var call = ts.createCall(called, undefined, callArguments);
@@ -75021,6 +75023,9 @@ var ts;
}
else {
newNodes.push(ts.createStatement(ts.createBinary(assignments[0].name, 58, call)));
if (range.facts & RangeFacts.HasReturn) {
newNodes.push(ts.createReturn());
}
}
}
else {
@@ -75055,6 +75060,33 @@ var ts;
var renameFilename = renameRange.getSourceFile().fileName;
var renameLocation = getRenameLocation(edits, renameFilename, functionNameText);
return { renameFilename: renameFilename, renameLocation: renameLocation, edits: edits };
function getStatementsOrClassElements(scope) {
if (ts.isFunctionLike(scope)) {
var body_1 = scope.body;
if (ts.isBlock(body_1)) {
return body_1.statements;
}
}
else if (ts.isModuleBlock(scope) || ts.isSourceFile(scope)) {
return scope.statements;
}
else if (ts.isClassLike(scope)) {
return scope.members;
}
else {
ts.assertTypeIsNever(scope);
}
return ts.emptyArray;
}
function getNodeToInsertBefore(minPos, scope) {
var children = getStatementsOrClassElements(scope);
for (var _i = 0, children_3 = children; _i < children_3.length; _i++) {
var child = children_3[_i];
if (child.pos >= minPos && ts.isFunctionLike(child) && !ts.isConstructorDeclaration(child)) {
return child;
}
}
}
}
function getRenameLocation(edits, renameFilename, functionNameText) {
var delta = 0;
@@ -75088,6 +75120,7 @@ var ts;
return { body: ts.createBlock(body.statements, true), returnValueProperty: undefined };
}
var returnValueProperty;
var ignoreReturns = false;
var statements = ts.createNodeArray(ts.isBlock(body) ? body.statements.slice(0) : [ts.isStatement(body) ? body : ts.createReturn(body)]);
if (writes || substitutions.size) {
var rewrittenStatements = ts.visitNodes(statements, visitor).slice();
@@ -75106,7 +75139,7 @@ var ts;
return { body: ts.createBlock(statements, true), returnValueProperty: undefined };
}
function visitor(node) {
if (node.kind === 219 && writes) {
if (!ignoreReturns && node.kind === 219 && writes) {
var assignments = getPropertyAssignmentsForWrites(writes);
if (node.expression) {
if (!returnValueProperty) {
@@ -75122,8 +75155,12 @@ var ts;
}
}
else {
var oldIgnoreReturns = ignoreReturns;
ignoreReturns = ignoreReturns || ts.isFunctionLike(node) || ts.isClassLike(node);
var substitution = substitutions.get(ts.getNodeId(node).toString());
return substitution || ts.visitEachChild(node, visitor, ts.nullTransformationContext);
var result = substitution || ts.visitEachChild(node, visitor, ts.nullTransformationContext);
ignoreReturns = oldIgnoreReturns;
return result;
}
}
}
@@ -75228,7 +75265,9 @@ var ts;
}
}
function recordUsagebySymbol(identifier, usage, isTypeName) {
var symbol = checker.getSymbolAtLocation(identifier);
var symbol = identifier.parent && ts.isShorthandPropertyAssignment(identifier.parent) && identifier.parent.name === identifier
? checker.getShorthandAssignmentValueSymbol(identifier.parent)
: checker.getSymbolAtLocation(identifier);
if (!symbol) {
return undefined;
}
@@ -75252,7 +75291,7 @@ var ts;
if (!declInFile) {
return undefined;
}
if (ts.rangeContainsRange(enclosingTextRange, declInFile)) {
if (ts.rangeContainsStartEnd(enclosingTextRange, declInFile.getStart(), declInFile.end)) {
return undefined;
}
if (targetRange.facts & RangeFacts.IsGenerator && usage === 2) {
@@ -75447,9 +75486,9 @@ var ts;
return;
}
if (ts.isJSDocCommentContainingNode(this)) {
var children_3 = [];
this.forEachChild(function (child) { children_3.push(child); });
this._children = children_3;
var children_4 = [];
this.forEachChild(function (child) { children_4.push(child); });
this._children = children_4;
return;
}
var children = [];
@@ -81115,7 +81154,8 @@ var ts;
return { info: info, projectErrors: this.getGlobalProjectErrors() };
}
var lastReportedFileNames_1 = this.lastReportedFileNames;
var currentFiles_1 = ts.arrayToSet(this.getFileNames());
var externalFiles = this.getExternalFiles().map(function (f) { return server.toNormalizedPath(f); });
var currentFiles_1 = ts.arrayToSet(this.getFileNames().concat(externalFiles));
var added_1 = [];
var removed_1 = [];
var updated = updatedFileNames ? ts.arrayFrom(updatedFileNames.keys()) : [];
@@ -81135,9 +81175,11 @@ var ts;
}
else {
var projectFileNames = this.getFileNames();
this.lastReportedFileNames = ts.arrayToSet(projectFileNames);
var externalFiles = this.getExternalFiles().map(function (f) { return server.toNormalizedPath(f); });
var allFiles = projectFileNames.concat(externalFiles);
this.lastReportedFileNames = ts.arrayToSet(allFiles);
this.lastReportedVersion = this.projectStructureVersion;
return { info: info, files: projectFileNames, projectErrors: this.getGlobalProjectErrors() };
return { info: info, files: allFiles, projectErrors: this.getGlobalProjectErrors() };
}
};
Project.prototype.getReferencedFiles = function (path) {
@@ -81303,8 +81345,11 @@ var ts;
}
if (this.projectService.globalPlugins) {
var _loop_10 = function (globalPluginName) {
if (!globalPluginName)
return "continue";
if (options.plugins && options.plugins.some(function (p) { return p.name === globalPluginName; }))
return "continue";
this_2.projectService.logger.info("Loading global plugin " + globalPluginName);
this_2.enablePlugin({ name: globalPluginName, global: true }, searchPaths);
};
var this_2 = this;
@@ -81316,6 +81361,7 @@ var ts;
};
ConfiguredProject.prototype.enablePlugin = function (pluginConfigEntry, searchPaths) {
var _this = this;
this.projectService.logger.info("Enabling plugin " + pluginConfigEntry.name + " from candidate paths: " + searchPaths.join(","));
var log = function (message) {
_this.projectService.logger.info(message);
};
@@ -81327,7 +81373,7 @@ var ts;
return;
}
}
this.projectService.logger.info("Couldn't find " + pluginConfigEntry.name + " anywhere in paths: " + searchPaths.join(","));
this.projectService.logger.info("Couldn't find " + pluginConfigEntry.name);
};
ConfiguredProject.prototype.enableProxy = function (pluginModuleFactory, configEntry) {
try {
@@ -81343,7 +81389,16 @@ var ts;
serverHost: this.projectService.host
};
var pluginModule = pluginModuleFactory({ typescript: ts });
this.languageService = pluginModule.create(info);
var newLS = pluginModule.create(info);
for (var _i = 0, _a = Object.keys(this.languageService); _i < _a.length; _i++) {
var k = _a[_i];
if (!(k in newLS)) {
this.projectService.logger.info("Plugin activation warning: Missing proxied method " + k + " in created LS. Patching.");
newLS[k] = this.languageService[k];
}
}
this.projectService.logger.info("Plugin validation succeded");
this.languageService = newLS;
this.plugins.push(pluginModule);
}
catch (e) {
@@ -81372,6 +81427,9 @@ var ts;
}
catch (e) {
_this.projectService.logger.info("A plugin threw an exception in getExternalFiles: " + e);
if (e.stack) {
_this.projectService.logger.info(e.stack);
}
}
}));
};

View File

@@ -3718,6 +3718,8 @@ var ts;
return sourceFile.checkJsDirective ? sourceFile.checkJsDirective.enabled : compilerOptions.checkJs;
}
ts.isCheckJsEnabledForFile = isCheckJsEnabledForFile;
function assertTypeIsNever(_) { }
ts.assertTypeIsNever = assertTypeIsNever;
})(ts || (ts = {}));
/// <reference path="core.ts"/>
var ts;
@@ -22430,17 +22432,20 @@ var ts;
return ts.combinePaths(directory, "package.json");
}
function loadModuleFromNodeModulesFolder(extensions, moduleName, nodeModulesFolder, nodeModulesFolderExists, failedLookupLocations, state) {
var _a = getNameOfTopDirectory(moduleName), top = _a.top, rest = _a.rest;
var packageRootPath = ts.combinePaths(nodeModulesFolder, top);
var _a = getPackageName(moduleName), packageName = _a.packageName, rest = _a.rest;
var packageRootPath = ts.combinePaths(nodeModulesFolder, packageName);
var _b = getPackageJsonInfo(packageRootPath, rest, failedLookupLocations, !nodeModulesFolderExists, state), packageJsonContent = _b.packageJsonContent, packageId = _b.packageId;
var candidate = ts.normalizePath(ts.combinePaths(nodeModulesFolder, moduleName));
var pathAndExtension = loadModuleFromFile(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state) ||
loadNodeModuleFromDirectoryWorker(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state, packageJsonContent);
return withPackageId(packageId, pathAndExtension);
}
function getNameOfTopDirectory(name) {
var idx = name.indexOf(ts.directorySeparator);
return idx === -1 ? { top: name, rest: "" } : { top: name.slice(0, idx), rest: name.slice(idx + 1) };
function getPackageName(moduleName) {
var idx = moduleName.indexOf(ts.directorySeparator);
if (moduleName[0] === "@") {
idx = moduleName.indexOf(ts.directorySeparator, idx + 1);
}
return idx === -1 ? { packageName: moduleName, rest: "" } : { packageName: moduleName.slice(0, idx), rest: moduleName.slice(idx + 1) };
}
function loadModuleFromNodeModules(extensions, moduleName, directory, failedLookupLocations, state, cache) {
return loadModuleFromNodeModulesWorker(extensions, moduleName, directory, failedLookupLocations, state, /*typesOnly*/ false, cache);
@@ -89584,7 +89589,7 @@ var ts;
Messages.CannotExtractRangeThatContainsWritesToReferencesLocatedOutsideOfTheTargetRangeInGenerators = createMessage("Cannot extract range containing writes to references located outside of the target range in generators.");
Messages.TypeWillNotBeVisibleInTheNewScope = createMessage("Type will not visible in the new scope.");
Messages.FunctionWillNotBeVisibleInTheNewScope = createMessage("Function will not visible in the new scope.");
Messages.InsufficientSelection = createMessage("Select more than a single token.");
Messages.InsufficientSelection = createMessage("Select more than a single identifier.");
Messages.CannotExtractExportedEntity = createMessage("Cannot extract exported declaration");
Messages.CannotCombineWritesAndReturns = createMessage("Cannot combine writes and returns");
Messages.CannotExtractReadonlyPropertyInitializerOutsideConstructor = createMessage("Cannot move initialization of read-only class property outside of the constructor");
@@ -89611,6 +89616,9 @@ var ts;
// exported only for tests
function getRangeToExtract(sourceFile, span) {
var length = span.length || 0;
if (length === 0) {
return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.StatementOrExpressionExpected)] };
}
// Walk up starting from the the start position until we find a non-SourceFile node that subsumes the selected span.
// This may fail (e.g. you select two statements in the root of a source file)
var start = getParentNodeInSpan(ts.getTokenAtPosition(sourceFile, span.start, /*includeJsDocComment*/ false), sourceFile, span);
@@ -89683,7 +89691,7 @@ var ts;
return { errors: [ts.createFileDiagnostic(sourceFile, start, length, message)] };
}
function checkRootNode(node) {
if (ts.isToken(ts.isExpressionStatement(node) ? node.expression : node)) {
if (ts.isIdentifier(ts.isExpressionStatement(node) ? node.expression : node)) {
return [ts.createDiagnosticForNode(node, Messages.InsufficientSelection)];
}
return undefined;
@@ -89785,45 +89793,30 @@ var ts;
return false;
}
var savedPermittedJumps = permittedJumps;
if (node.parent) {
switch (node.parent.kind) {
case 211 /* IfStatement */:
if (node.parent.thenStatement === node || node.parent.elseStatement === node) {
// forbid all jumps inside thenStatement or elseStatement
permittedJumps = 0 /* None */;
}
break;
case 224 /* TryStatement */:
if (node.parent.tryBlock === node) {
// forbid all jumps inside try blocks
permittedJumps = 0 /* None */;
}
else if (node.parent.finallyBlock === node) {
// allow unconditional returns from finally blocks
permittedJumps = 4 /* Return */;
}
break;
case 260 /* CatchClause */:
if (node.parent.block === node) {
// forbid all jumps inside the block of catch clause
permittedJumps = 0 /* None */;
}
break;
case 257 /* CaseClause */:
if (node.expression !== node) {
// allow unlabeled break inside case clauses
permittedJumps |= 1 /* Break */;
}
break;
default:
if (ts.isIterationStatement(node.parent, /*lookInLabeledStatements*/ false)) {
if (node.parent.statement === node) {
// allow unlabeled break/continue inside loops
permittedJumps |= 1 /* Break */ | 2 /* Continue */;
}
}
break;
}
switch (node.kind) {
case 211 /* IfStatement */:
permittedJumps = 0 /* None */;
break;
case 224 /* TryStatement */:
// forbid all jumps inside try blocks
permittedJumps = 0 /* None */;
break;
case 207 /* Block */:
if (node.parent && node.parent.kind === 224 /* TryStatement */ && node.finallyBlock === node) {
// allow unconditional returns from finally blocks
permittedJumps = 4 /* Return */;
}
break;
case 257 /* CaseClause */:
// allow unlabeled break inside case clauses
permittedJumps |= 1 /* Break */;
break;
default:
if (ts.isIterationStatement(node, /*lookInLabeledStatements*/ false)) {
// allow unlabeled break/continue inside loops
permittedJumps |= 1 /* Break */ | 2 /* Continue */;
}
break;
}
switch (node.kind) {
case 169 /* ThisType */:
@@ -89849,7 +89842,7 @@ var ts;
}
}
else {
if (!(permittedJumps & (218 /* BreakStatement */ ? 1 /* Break */ : 2 /* Continue */))) {
if (!(permittedJumps & (node.kind === 218 /* BreakStatement */ ? 1 /* Break */ : 2 /* Continue */))) {
// attempt to break or continue in a forbidden context
(errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.CannotExtractRangeContainingConditionalBreakOrContinueStatements));
}
@@ -89994,7 +89987,7 @@ var ts;
else if (ts.isClassLike(scope)) {
return scope.kind === 229 /* ClassDeclaration */
? "class '" + scope.name.text + "'"
: scope.name.text
: scope.name && scope.name.text
? "class expression '" + scope.name.text + "'"
: "anonymous class expression";
}
@@ -90066,7 +90059,7 @@ var ts;
modifiers.push(ts.createToken(120 /* AsyncKeyword */));
}
newFunction = ts.createMethod(
/*decorators*/ undefined, modifiers, range.facts & RangeFacts.IsGenerator ? ts.createToken(39 /* AsteriskToken */) : undefined, functionName,
/*decorators*/ undefined, modifiers.length ? modifiers : undefined, range.facts & RangeFacts.IsGenerator ? ts.createToken(39 /* AsteriskToken */) : undefined, functionName,
/*questionToken*/ undefined,
/*typeParameters*/ undefined, parameters, returnType, body);
}
@@ -90076,8 +90069,14 @@ var ts;
/*typeParameters*/ undefined, parameters, returnType, body);
}
var changeTracker = ts.textChanges.ChangeTracker.fromCodeFixContext(context);
// insert function at the end of the scope
changeTracker.insertNodeBefore(context.file, scope.getLastToken(), newFunction, { prefix: context.newLineCharacter, suffix: context.newLineCharacter });
var minInsertionPos = (isReadonlyArray(range.range) ? ts.lastOrUndefined(range.range) : range.range).end;
var nodeToInsertBefore = getNodeToInsertBefore(minInsertionPos, scope);
if (nodeToInsertBefore) {
changeTracker.insertNodeBefore(context.file, nodeToInsertBefore, newFunction, { suffix: context.newLineCharacter + context.newLineCharacter });
}
else {
changeTracker.insertNodeBefore(context.file, scope.getLastToken(), newFunction, { prefix: context.newLineCharacter, suffix: context.newLineCharacter });
}
var newNodes = [];
// replace range with function call
var called = getCalledExpression(scope, range, functionNameText);
@@ -90106,6 +90105,9 @@ var ts;
}
else {
newNodes.push(ts.createStatement(ts.createBinary(assignments[0].name, 58 /* EqualsToken */, call)));
if (range.facts & RangeFacts.HasReturn) {
newNodes.push(ts.createReturn());
}
}
}
else {
@@ -90143,6 +90145,37 @@ var ts;
var renameFilename = renameRange.getSourceFile().fileName;
var renameLocation = getRenameLocation(edits, renameFilename, functionNameText);
return { renameFilename: renameFilename, renameLocation: renameLocation, edits: edits };
function getStatementsOrClassElements(scope) {
if (ts.isFunctionLike(scope)) {
var body_1 = scope.body;
if (ts.isBlock(body_1)) {
return body_1.statements;
}
}
else if (ts.isModuleBlock(scope) || ts.isSourceFile(scope)) {
return scope.statements;
}
else if (ts.isClassLike(scope)) {
return scope.members;
}
else {
ts.assertTypeIsNever(scope);
}
return ts.emptyArray;
}
/**
* If `scope` contains a function after `minPos`, then return the first such function.
* Otherwise, return `undefined`.
*/
function getNodeToInsertBefore(minPos, scope) {
var children = getStatementsOrClassElements(scope);
for (var _i = 0, children_3 = children; _i < children_3.length; _i++) {
var child = children_3[_i];
if (child.pos >= minPos && ts.isFunctionLike(child) && !ts.isConstructorDeclaration(child)) {
return child;
}
}
}
}
function getRenameLocation(edits, renameFilename, functionNameText) {
var delta = 0;
@@ -90180,6 +90213,7 @@ var ts;
return { body: ts.createBlock(body.statements, /*multLine*/ true), returnValueProperty: undefined };
}
var returnValueProperty;
var ignoreReturns = false;
var statements = ts.createNodeArray(ts.isBlock(body) ? body.statements.slice(0) : [ts.isStatement(body) ? body : ts.createReturn(body)]);
// rewrite body if either there are writes that should be propagated back via return statements or there are substitutions
if (writes || substitutions.size) {
@@ -90201,7 +90235,7 @@ var ts;
return { body: ts.createBlock(statements, /*multiLine*/ true), returnValueProperty: undefined };
}
function visitor(node) {
if (node.kind === 219 /* ReturnStatement */ && writes) {
if (!ignoreReturns && node.kind === 219 /* ReturnStatement */ && writes) {
var assignments = getPropertyAssignmentsForWrites(writes);
if (node.expression) {
if (!returnValueProperty) {
@@ -90217,8 +90251,12 @@ var ts;
}
}
else {
var oldIgnoreReturns = ignoreReturns;
ignoreReturns = ignoreReturns || ts.isFunctionLike(node) || ts.isClassLike(node);
var substitution = substitutions.get(ts.getNodeId(node).toString());
return substitution || ts.visitEachChild(node, visitor, ts.nullTransformationContext);
var result = substitution || ts.visitEachChild(node, visitor, ts.nullTransformationContext);
ignoreReturns = oldIgnoreReturns;
return result;
}
}
}
@@ -90340,7 +90378,11 @@ var ts;
}
}
function recordUsagebySymbol(identifier, usage, isTypeName) {
var symbol = checker.getSymbolAtLocation(identifier);
// If the identifier is both a property name and its value, we're only interested in its value
// (since the name is a declaration and will be included in the extracted range).
var symbol = identifier.parent && ts.isShorthandPropertyAssignment(identifier.parent) && identifier.parent.name === identifier
? checker.getShorthandAssignmentValueSymbol(identifier.parent)
: checker.getSymbolAtLocation(identifier);
if (!symbol) {
// cannot find symbol - do nothing
return undefined;
@@ -90374,7 +90416,7 @@ var ts;
if (!declInFile) {
return undefined;
}
if (ts.rangeContainsRange(enclosingTextRange, declInFile)) {
if (ts.rangeContainsStartEnd(enclosingTextRange, declInFile.getStart(), declInFile.end)) {
// declaration is located in range to be extracted - do nothing
return undefined;
}
@@ -90615,9 +90657,9 @@ var ts;
}
if (ts.isJSDocCommentContainingNode(this)) {
/** Don't add trivia for "tokens" since this is in a comment. */
var children_3 = [];
this.forEachChild(function (child) { children_3.push(child); });
this._children = children_3;
var children_4 = [];
this.forEachChild(function (child) { children_4.push(child); });
this._children = children_4;
return;
}
var children = [];

View File

@@ -3718,6 +3718,8 @@ var ts;
return sourceFile.checkJsDirective ? sourceFile.checkJsDirective.enabled : compilerOptions.checkJs;
}
ts.isCheckJsEnabledForFile = isCheckJsEnabledForFile;
function assertTypeIsNever(_) { }
ts.assertTypeIsNever = assertTypeIsNever;
})(ts || (ts = {}));
/// <reference path="core.ts"/>
var ts;
@@ -22430,17 +22432,20 @@ var ts;
return ts.combinePaths(directory, "package.json");
}
function loadModuleFromNodeModulesFolder(extensions, moduleName, nodeModulesFolder, nodeModulesFolderExists, failedLookupLocations, state) {
var _a = getNameOfTopDirectory(moduleName), top = _a.top, rest = _a.rest;
var packageRootPath = ts.combinePaths(nodeModulesFolder, top);
var _a = getPackageName(moduleName), packageName = _a.packageName, rest = _a.rest;
var packageRootPath = ts.combinePaths(nodeModulesFolder, packageName);
var _b = getPackageJsonInfo(packageRootPath, rest, failedLookupLocations, !nodeModulesFolderExists, state), packageJsonContent = _b.packageJsonContent, packageId = _b.packageId;
var candidate = ts.normalizePath(ts.combinePaths(nodeModulesFolder, moduleName));
var pathAndExtension = loadModuleFromFile(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state) ||
loadNodeModuleFromDirectoryWorker(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state, packageJsonContent);
return withPackageId(packageId, pathAndExtension);
}
function getNameOfTopDirectory(name) {
var idx = name.indexOf(ts.directorySeparator);
return idx === -1 ? { top: name, rest: "" } : { top: name.slice(0, idx), rest: name.slice(idx + 1) };
function getPackageName(moduleName) {
var idx = moduleName.indexOf(ts.directorySeparator);
if (moduleName[0] === "@") {
idx = moduleName.indexOf(ts.directorySeparator, idx + 1);
}
return idx === -1 ? { packageName: moduleName, rest: "" } : { packageName: moduleName.slice(0, idx), rest: moduleName.slice(idx + 1) };
}
function loadModuleFromNodeModules(extensions, moduleName, directory, failedLookupLocations, state, cache) {
return loadModuleFromNodeModulesWorker(extensions, moduleName, directory, failedLookupLocations, state, /*typesOnly*/ false, cache);
@@ -89584,7 +89589,7 @@ var ts;
Messages.CannotExtractRangeThatContainsWritesToReferencesLocatedOutsideOfTheTargetRangeInGenerators = createMessage("Cannot extract range containing writes to references located outside of the target range in generators.");
Messages.TypeWillNotBeVisibleInTheNewScope = createMessage("Type will not visible in the new scope.");
Messages.FunctionWillNotBeVisibleInTheNewScope = createMessage("Function will not visible in the new scope.");
Messages.InsufficientSelection = createMessage("Select more than a single token.");
Messages.InsufficientSelection = createMessage("Select more than a single identifier.");
Messages.CannotExtractExportedEntity = createMessage("Cannot extract exported declaration");
Messages.CannotCombineWritesAndReturns = createMessage("Cannot combine writes and returns");
Messages.CannotExtractReadonlyPropertyInitializerOutsideConstructor = createMessage("Cannot move initialization of read-only class property outside of the constructor");
@@ -89611,6 +89616,9 @@ var ts;
// exported only for tests
function getRangeToExtract(sourceFile, span) {
var length = span.length || 0;
if (length === 0) {
return { errors: [ts.createFileDiagnostic(sourceFile, span.start, length, Messages.StatementOrExpressionExpected)] };
}
// Walk up starting from the the start position until we find a non-SourceFile node that subsumes the selected span.
// This may fail (e.g. you select two statements in the root of a source file)
var start = getParentNodeInSpan(ts.getTokenAtPosition(sourceFile, span.start, /*includeJsDocComment*/ false), sourceFile, span);
@@ -89683,7 +89691,7 @@ var ts;
return { errors: [ts.createFileDiagnostic(sourceFile, start, length, message)] };
}
function checkRootNode(node) {
if (ts.isToken(ts.isExpressionStatement(node) ? node.expression : node)) {
if (ts.isIdentifier(ts.isExpressionStatement(node) ? node.expression : node)) {
return [ts.createDiagnosticForNode(node, Messages.InsufficientSelection)];
}
return undefined;
@@ -89785,45 +89793,30 @@ var ts;
return false;
}
var savedPermittedJumps = permittedJumps;
if (node.parent) {
switch (node.parent.kind) {
case 211 /* IfStatement */:
if (node.parent.thenStatement === node || node.parent.elseStatement === node) {
// forbid all jumps inside thenStatement or elseStatement
permittedJumps = 0 /* None */;
}
break;
case 224 /* TryStatement */:
if (node.parent.tryBlock === node) {
// forbid all jumps inside try blocks
permittedJumps = 0 /* None */;
}
else if (node.parent.finallyBlock === node) {
// allow unconditional returns from finally blocks
permittedJumps = 4 /* Return */;
}
break;
case 260 /* CatchClause */:
if (node.parent.block === node) {
// forbid all jumps inside the block of catch clause
permittedJumps = 0 /* None */;
}
break;
case 257 /* CaseClause */:
if (node.expression !== node) {
// allow unlabeled break inside case clauses
permittedJumps |= 1 /* Break */;
}
break;
default:
if (ts.isIterationStatement(node.parent, /*lookInLabeledStatements*/ false)) {
if (node.parent.statement === node) {
// allow unlabeled break/continue inside loops
permittedJumps |= 1 /* Break */ | 2 /* Continue */;
}
}
break;
}
switch (node.kind) {
case 211 /* IfStatement */:
permittedJumps = 0 /* None */;
break;
case 224 /* TryStatement */:
// forbid all jumps inside try blocks
permittedJumps = 0 /* None */;
break;
case 207 /* Block */:
if (node.parent && node.parent.kind === 224 /* TryStatement */ && node.finallyBlock === node) {
// allow unconditional returns from finally blocks
permittedJumps = 4 /* Return */;
}
break;
case 257 /* CaseClause */:
// allow unlabeled break inside case clauses
permittedJumps |= 1 /* Break */;
break;
default:
if (ts.isIterationStatement(node, /*lookInLabeledStatements*/ false)) {
// allow unlabeled break/continue inside loops
permittedJumps |= 1 /* Break */ | 2 /* Continue */;
}
break;
}
switch (node.kind) {
case 169 /* ThisType */:
@@ -89849,7 +89842,7 @@ var ts;
}
}
else {
if (!(permittedJumps & (218 /* BreakStatement */ ? 1 /* Break */ : 2 /* Continue */))) {
if (!(permittedJumps & (node.kind === 218 /* BreakStatement */ ? 1 /* Break */ : 2 /* Continue */))) {
// attempt to break or continue in a forbidden context
(errors || (errors = [])).push(ts.createDiagnosticForNode(node, Messages.CannotExtractRangeContainingConditionalBreakOrContinueStatements));
}
@@ -89994,7 +89987,7 @@ var ts;
else if (ts.isClassLike(scope)) {
return scope.kind === 229 /* ClassDeclaration */
? "class '" + scope.name.text + "'"
: scope.name.text
: scope.name && scope.name.text
? "class expression '" + scope.name.text + "'"
: "anonymous class expression";
}
@@ -90066,7 +90059,7 @@ var ts;
modifiers.push(ts.createToken(120 /* AsyncKeyword */));
}
newFunction = ts.createMethod(
/*decorators*/ undefined, modifiers, range.facts & RangeFacts.IsGenerator ? ts.createToken(39 /* AsteriskToken */) : undefined, functionName,
/*decorators*/ undefined, modifiers.length ? modifiers : undefined, range.facts & RangeFacts.IsGenerator ? ts.createToken(39 /* AsteriskToken */) : undefined, functionName,
/*questionToken*/ undefined,
/*typeParameters*/ undefined, parameters, returnType, body);
}
@@ -90076,8 +90069,14 @@ var ts;
/*typeParameters*/ undefined, parameters, returnType, body);
}
var changeTracker = ts.textChanges.ChangeTracker.fromCodeFixContext(context);
// insert function at the end of the scope
changeTracker.insertNodeBefore(context.file, scope.getLastToken(), newFunction, { prefix: context.newLineCharacter, suffix: context.newLineCharacter });
var minInsertionPos = (isReadonlyArray(range.range) ? ts.lastOrUndefined(range.range) : range.range).end;
var nodeToInsertBefore = getNodeToInsertBefore(minInsertionPos, scope);
if (nodeToInsertBefore) {
changeTracker.insertNodeBefore(context.file, nodeToInsertBefore, newFunction, { suffix: context.newLineCharacter + context.newLineCharacter });
}
else {
changeTracker.insertNodeBefore(context.file, scope.getLastToken(), newFunction, { prefix: context.newLineCharacter, suffix: context.newLineCharacter });
}
var newNodes = [];
// replace range with function call
var called = getCalledExpression(scope, range, functionNameText);
@@ -90106,6 +90105,9 @@ var ts;
}
else {
newNodes.push(ts.createStatement(ts.createBinary(assignments[0].name, 58 /* EqualsToken */, call)));
if (range.facts & RangeFacts.HasReturn) {
newNodes.push(ts.createReturn());
}
}
}
else {
@@ -90143,6 +90145,37 @@ var ts;
var renameFilename = renameRange.getSourceFile().fileName;
var renameLocation = getRenameLocation(edits, renameFilename, functionNameText);
return { renameFilename: renameFilename, renameLocation: renameLocation, edits: edits };
function getStatementsOrClassElements(scope) {
if (ts.isFunctionLike(scope)) {
var body_1 = scope.body;
if (ts.isBlock(body_1)) {
return body_1.statements;
}
}
else if (ts.isModuleBlock(scope) || ts.isSourceFile(scope)) {
return scope.statements;
}
else if (ts.isClassLike(scope)) {
return scope.members;
}
else {
ts.assertTypeIsNever(scope);
}
return ts.emptyArray;
}
/**
* If `scope` contains a function after `minPos`, then return the first such function.
* Otherwise, return `undefined`.
*/
function getNodeToInsertBefore(minPos, scope) {
var children = getStatementsOrClassElements(scope);
for (var _i = 0, children_3 = children; _i < children_3.length; _i++) {
var child = children_3[_i];
if (child.pos >= minPos && ts.isFunctionLike(child) && !ts.isConstructorDeclaration(child)) {
return child;
}
}
}
}
function getRenameLocation(edits, renameFilename, functionNameText) {
var delta = 0;
@@ -90180,6 +90213,7 @@ var ts;
return { body: ts.createBlock(body.statements, /*multLine*/ true), returnValueProperty: undefined };
}
var returnValueProperty;
var ignoreReturns = false;
var statements = ts.createNodeArray(ts.isBlock(body) ? body.statements.slice(0) : [ts.isStatement(body) ? body : ts.createReturn(body)]);
// rewrite body if either there are writes that should be propagated back via return statements or there are substitutions
if (writes || substitutions.size) {
@@ -90201,7 +90235,7 @@ var ts;
return { body: ts.createBlock(statements, /*multiLine*/ true), returnValueProperty: undefined };
}
function visitor(node) {
if (node.kind === 219 /* ReturnStatement */ && writes) {
if (!ignoreReturns && node.kind === 219 /* ReturnStatement */ && writes) {
var assignments = getPropertyAssignmentsForWrites(writes);
if (node.expression) {
if (!returnValueProperty) {
@@ -90217,8 +90251,12 @@ var ts;
}
}
else {
var oldIgnoreReturns = ignoreReturns;
ignoreReturns = ignoreReturns || ts.isFunctionLike(node) || ts.isClassLike(node);
var substitution = substitutions.get(ts.getNodeId(node).toString());
return substitution || ts.visitEachChild(node, visitor, ts.nullTransformationContext);
var result = substitution || ts.visitEachChild(node, visitor, ts.nullTransformationContext);
ignoreReturns = oldIgnoreReturns;
return result;
}
}
}
@@ -90340,7 +90378,11 @@ var ts;
}
}
function recordUsagebySymbol(identifier, usage, isTypeName) {
var symbol = checker.getSymbolAtLocation(identifier);
// If the identifier is both a property name and its value, we're only interested in its value
// (since the name is a declaration and will be included in the extracted range).
var symbol = identifier.parent && ts.isShorthandPropertyAssignment(identifier.parent) && identifier.parent.name === identifier
? checker.getShorthandAssignmentValueSymbol(identifier.parent)
: checker.getSymbolAtLocation(identifier);
if (!symbol) {
// cannot find symbol - do nothing
return undefined;
@@ -90374,7 +90416,7 @@ var ts;
if (!declInFile) {
return undefined;
}
if (ts.rangeContainsRange(enclosingTextRange, declInFile)) {
if (ts.rangeContainsStartEnd(enclosingTextRange, declInFile.getStart(), declInFile.end)) {
// declaration is located in range to be extracted - do nothing
return undefined;
}
@@ -90615,9 +90657,9 @@ var ts;
}
if (ts.isJSDocCommentContainingNode(this)) {
/** Don't add trivia for "tokens" since this is in a comment. */
var children_3 = [];
this.forEachChild(function (child) { children_3.push(child); });
this._children = children_3;
var children_4 = [];
this.forEachChild(function (child) { children_4.push(child); });
this._children = children_4;
return;
}
var children = [];

View File

@@ -2209,6 +2209,8 @@ var ts;
return sourceFile.checkJsDirective ? sourceFile.checkJsDirective.enabled : compilerOptions.checkJs;
}
ts.isCheckJsEnabledForFile = isCheckJsEnabledForFile;
function assertTypeIsNever(_) { }
ts.assertTypeIsNever = assertTypeIsNever;
})(ts || (ts = {}));
var ts;
(function (ts) {
@@ -17335,17 +17337,20 @@ var ts;
return ts.combinePaths(directory, "package.json");
}
function loadModuleFromNodeModulesFolder(extensions, moduleName, nodeModulesFolder, nodeModulesFolderExists, failedLookupLocations, state) {
var _a = getNameOfTopDirectory(moduleName), top = _a.top, rest = _a.rest;
var packageRootPath = ts.combinePaths(nodeModulesFolder, top);
var _a = getPackageName(moduleName), packageName = _a.packageName, rest = _a.rest;
var packageRootPath = ts.combinePaths(nodeModulesFolder, packageName);
var _b = getPackageJsonInfo(packageRootPath, rest, failedLookupLocations, !nodeModulesFolderExists, state), packageJsonContent = _b.packageJsonContent, packageId = _b.packageId;
var candidate = ts.normalizePath(ts.combinePaths(nodeModulesFolder, moduleName));
var pathAndExtension = loadModuleFromFile(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state) ||
loadNodeModuleFromDirectoryWorker(extensions, candidate, failedLookupLocations, !nodeModulesFolderExists, state, packageJsonContent);
return withPackageId(packageId, pathAndExtension);
}
function getNameOfTopDirectory(name) {
var idx = name.indexOf(ts.directorySeparator);
return idx === -1 ? { top: name, rest: "" } : { top: name.slice(0, idx), rest: name.slice(idx + 1) };
function getPackageName(moduleName) {
var idx = moduleName.indexOf(ts.directorySeparator);
if (moduleName[0] === "@") {
idx = moduleName.indexOf(ts.directorySeparator, idx + 1);
}
return idx === -1 ? { packageName: moduleName, rest: "" } : { packageName: moduleName.slice(0, idx), rest: moduleName.slice(idx + 1) };
}
function loadModuleFromNodeModules(extensions, moduleName, directory, failedLookupLocations, state, cache) {
return loadModuleFromNodeModulesWorker(extensions, moduleName, directory, failedLookupLocations, state, false, cache);