Merge branch 'master' into fail-spec-lambda-parsing-on-parameter-initialiser-missing-=

This commit is contained in:
Nathan Shively-Sanders
2017-09-13 09:30:57 -07:00
207 changed files with 1539 additions and 959 deletions
+56 -46
View File
@@ -230,7 +230,7 @@ namespace ts {
getSuggestionForNonexistentSymbol: (location, name, meaning) => unescapeLeadingUnderscores(getSuggestionForNonexistentSymbol(location, escapeLeadingUnderscores(name), meaning)),
getBaseConstraintOfType,
resolveName(name, location, meaning) {
return resolveName(location, escapeLeadingUnderscores(name), meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined);
return resolveName(location, escapeLeadingUnderscores(name), meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false);
},
getJsxNamespace: () => unescapeLeadingUnderscores(getJsxNamespace()),
};
@@ -865,17 +865,22 @@ namespace ts {
}
}
// Resolve a given name for a given meaning at a given location. An error is reported if the name was not found and
// the nameNotFoundMessage argument is not undefined. Returns the resolved symbol, or undefined if no symbol with
// the given name can be found.
/**
* Resolve a given name for a given meaning at a given location. An error is reported if the name was not found and
* the nameNotFoundMessage argument is not undefined. Returns the resolved symbol, or undefined if no symbol with
* the given name can be found.
*
* @param isUse If true, this will count towards --noUnusedLocals / --noUnusedParameters.
*/
function resolveName(
location: Node | undefined,
name: __String,
meaning: SymbolFlags,
nameNotFoundMessage: DiagnosticMessage | undefined,
nameArg: __String | Identifier,
isUse: boolean,
suggestedNameNotFoundMessage?: DiagnosticMessage): Symbol {
return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, getSymbol, suggestedNameNotFoundMessage);
return resolveNameHelper(location, name, meaning, nameNotFoundMessage, nameArg, isUse, getSymbol, suggestedNameNotFoundMessage);
}
function resolveNameHelper(
@@ -884,6 +889,7 @@ namespace ts {
meaning: SymbolFlags,
nameNotFoundMessage: DiagnosticMessage,
nameArg: __String | Identifier,
isUse: boolean,
lookup: typeof getSymbol,
suggestedNameNotFoundMessage?: DiagnosticMessage): Symbol {
const originalLocation = location; // needed for did-you-mean error reporting, which gathers candidates starting from the original location
@@ -1114,7 +1120,7 @@ namespace ts {
// We just climbed up parents looking for the name, meaning that we started in a descendant node of `lastLocation`.
// If `result === lastLocation.symbol`, that means that we are somewhere inside `lastLocation` looking up a name, and resolving to `lastLocation` itself.
// That means that this is a self-reference of `lastLocation`, and shouldn't count this when considering whether `lastLocation` is used.
if (result && nameNotFoundMessage && noUnusedIdentifiers && result !== lastLocation.symbol) {
if (isUse && result && nameNotFoundMessage && noUnusedIdentifiers && result !== lastLocation.symbol) {
result.isReferenced = true;
}
@@ -1267,7 +1273,7 @@ namespace ts {
function checkAndReportErrorForUsingTypeAsNamespace(errorLocation: Node, name: __String, meaning: SymbolFlags): boolean {
if (meaning === SymbolFlags.Namespace) {
const symbol = resolveSymbol(resolveName(errorLocation, name, SymbolFlags.Type & ~SymbolFlags.Value, /*nameNotFoundMessage*/undefined, /*nameArg*/ undefined));
const symbol = resolveSymbol(resolveName(errorLocation, name, SymbolFlags.Type & ~SymbolFlags.Value, /*nameNotFoundMessage*/undefined, /*nameArg*/ undefined, /*isUse*/ false));
const parent = errorLocation.parent;
if (symbol) {
if (isQualifiedName(parent)) {
@@ -1298,7 +1304,7 @@ namespace ts {
error(errorLocation, Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here, unescapeLeadingUnderscores(name));
return true;
}
const symbol = resolveSymbol(resolveName(errorLocation, name, SymbolFlags.Type & ~SymbolFlags.Value, /*nameNotFoundMessage*/undefined, /*nameArg*/ undefined));
const symbol = resolveSymbol(resolveName(errorLocation, name, SymbolFlags.Type & ~SymbolFlags.Value, /*nameNotFoundMessage*/undefined, /*nameArg*/ undefined, /*isUse*/ false));
if (symbol && !(symbol.flags & SymbolFlags.NamespaceModule)) {
error(errorLocation, Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here, unescapeLeadingUnderscores(name));
return true;
@@ -1309,14 +1315,14 @@ namespace ts {
function checkAndReportErrorForUsingNamespaceModuleAsValue(errorLocation: Node, name: __String, meaning: SymbolFlags): boolean {
if (meaning & (SymbolFlags.Value & ~SymbolFlags.NamespaceModule & ~SymbolFlags.Type)) {
const symbol = resolveSymbol(resolveName(errorLocation, name, SymbolFlags.NamespaceModule & ~SymbolFlags.Value, /*nameNotFoundMessage*/undefined, /*nameArg*/ undefined));
const symbol = resolveSymbol(resolveName(errorLocation, name, SymbolFlags.NamespaceModule & ~SymbolFlags.Value, /*nameNotFoundMessage*/undefined, /*nameArg*/ undefined, /*isUse*/ false));
if (symbol) {
error(errorLocation, Diagnostics.Cannot_use_namespace_0_as_a_value, unescapeLeadingUnderscores(name));
return true;
}
}
else if (meaning & (SymbolFlags.Type & ~SymbolFlags.NamespaceModule & ~SymbolFlags.Value)) {
const symbol = resolveSymbol(resolveName(errorLocation, name, SymbolFlags.NamespaceModule & ~SymbolFlags.Type, /*nameNotFoundMessage*/undefined, /*nameArg*/ undefined));
const symbol = resolveSymbol(resolveName(errorLocation, name, SymbolFlags.NamespaceModule & ~SymbolFlags.Type, /*nameNotFoundMessage*/undefined, /*nameArg*/ undefined, /*isUse*/ false));
if (symbol) {
error(errorLocation, Diagnostics.Cannot_use_namespace_0_as_a_type, unescapeLeadingUnderscores(name));
return true;
@@ -1640,7 +1646,7 @@ namespace ts {
if (name.kind === SyntaxKind.Identifier) {
const message = meaning === SymbolFlags.Namespace ? Diagnostics.Cannot_find_namespace_0 : Diagnostics.Cannot_find_name_0;
symbol = resolveName(location || name, name.escapedText, meaning, ignoreErrors ? undefined : message, name);
symbol = resolveName(location || name, name.escapedText, meaning, ignoreErrors ? undefined : message, name, /*isUse*/ true);
if (!symbol) {
return undefined;
}
@@ -2314,7 +2320,7 @@ namespace ts {
}
const firstIdentifier = getFirstIdentifier(entityName);
const symbol = resolveName(enclosingDeclaration, firstIdentifier.escapedText, meaning, /*nodeNotFoundErrorMessage*/ undefined, /*nameArg*/ undefined);
const symbol = resolveName(enclosingDeclaration, firstIdentifier.escapedText, meaning, /*nodeNotFoundErrorMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false);
// Verify if the symbol is accessible
return (symbol && hasVisibleDeclarations(symbol, /*shouldComputeAliasToMakeVisible*/ true)) || {
@@ -3971,7 +3977,7 @@ namespace ts {
function collectLinkedAliases(node: Identifier): Node[] {
let exportSymbol: Symbol;
if (node.parent && node.parent.kind === SyntaxKind.ExportAssignment) {
exportSymbol = resolveName(node.parent, node.escapedText, SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Alias, Diagnostics.Cannot_find_name_0, node);
exportSymbol = resolveName(node.parent, node.escapedText, SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Alias, Diagnostics.Cannot_find_name_0, node, /*isUse*/ false);
}
else if (node.parent.kind === SyntaxKind.ExportSpecifier) {
exportSymbol = getTargetOfExportSpecifier(<ExportSpecifier>node.parent, SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Alias);
@@ -3993,7 +3999,7 @@ namespace ts {
const internalModuleReference = <Identifier | QualifiedName>(<ImportEqualsDeclaration>declaration).moduleReference;
const firstIdentifier = getFirstIdentifier(internalModuleReference);
const importSymbol = resolveName(declaration, firstIdentifier.escapedText, SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace,
undefined, undefined);
undefined, undefined, /*isUse*/ false);
if (importSymbol) {
buildVisibleNodeList(importSymbol.declarations);
}
@@ -6408,7 +6414,7 @@ namespace ts {
let paramSymbol = param.symbol;
// Include parameter symbol instead of property symbol in the signature
if (paramSymbol && !!(paramSymbol.flags & SymbolFlags.Property) && !isBindingPattern(param.name)) {
const resolvedSymbol = resolveName(param, paramSymbol.escapedName, SymbolFlags.Value, undefined, undefined);
const resolvedSymbol = resolveName(param, paramSymbol.escapedName, SymbolFlags.Value, undefined, undefined, /*isUse*/ false);
paramSymbol = resolvedSymbol;
}
if (i === 0 && paramSymbol.escapedName === "this") {
@@ -7085,7 +7091,8 @@ namespace ts {
}
function getGlobalSymbol(name: __String, meaning: SymbolFlags, diagnostic: DiagnosticMessage): Symbol {
return resolveName(undefined, name, meaning, diagnostic, name);
// Don't track references for global symbols anyway, so value if `isReference` is arbitrary
return resolveName(undefined, name, meaning, diagnostic, name, /*isUse*/ false);
}
function getGlobalType(name: __String, arity: 0, reportErrors: boolean): ObjectType;
@@ -10832,7 +10839,15 @@ namespace ts {
function getResolvedSymbol(node: Identifier): Symbol {
const links = getNodeLinks(node);
if (!links.resolvedSymbol) {
links.resolvedSymbol = !nodeIsMissing(node) && resolveName(node, node.escapedText, SymbolFlags.Value | SymbolFlags.ExportValue, Diagnostics.Cannot_find_name_0, node, Diagnostics.Cannot_find_name_0_Did_you_mean_1) || unknownSymbol;
links.resolvedSymbol = !nodeIsMissing(node) &&
resolveName(
node,
node.escapedText,
SymbolFlags.Value | SymbolFlags.ExportValue,
Diagnostics.Cannot_find_name_0,
node,
!isWriteOnlyAccess(node),
Diagnostics.Cannot_find_name_0_Did_you_mean_1) || unknownSymbol;
}
return links.resolvedSymbol;
}
@@ -14428,7 +14443,7 @@ namespace ts {
// And if there is no reactNamespace/jsxFactory's symbol in scope when targeting React emit, we should issue an error.
const reactRefErr = diagnostics && compilerOptions.jsx === JsxEmit.React ? Diagnostics.Cannot_find_name_0 : undefined;
const reactNamespace = getJsxNamespace();
const reactSym = resolveName(node.tagName, reactNamespace, SymbolFlags.Value, reactRefErr, reactNamespace);
const reactSym = resolveName(node.tagName, reactNamespace, SymbolFlags.Value, reactRefErr, reactNamespace, /*isUse*/ true);
if (reactSym) {
// Mark local symbol as referenced here because it might not have been marked
// if jsx emit was not react as there wont be error being emitted
@@ -14704,7 +14719,7 @@ namespace ts {
checkPropertyNotUsedBeforeDeclaration(prop, node, right);
markPropertyAsReferenced(prop);
markPropertyAsReferenced(prop, node);
getNodeLinks(node).resolvedSymbol = prop;
@@ -14804,7 +14819,7 @@ namespace ts {
}
function getSuggestionForNonexistentSymbol(location: Node, name: __String, meaning: SymbolFlags): __String {
const result = resolveNameHelper(location, name, meaning, /*nameNotFoundMessage*/ undefined, name, (symbols, name, meaning) => {
const result = resolveNameHelper(location, name, meaning, /*nameNotFoundMessage*/ undefined, name, /*isUse*/ false, (symbols, name, meaning) => {
const symbol = getSymbol(symbols, name, meaning);
if (symbol) {
// Sometimes the symbol is found when location is a return type of a function: `typeof x` and `x` is declared in the body of the function
@@ -14884,11 +14899,12 @@ namespace ts {
return bestCandidate;
}
function markPropertyAsReferenced(prop: Symbol) {
function markPropertyAsReferenced(prop: Symbol, nodeForCheckWriteOnly: Node | undefined) {
if (prop &&
noUnusedIdentifiers &&
(prop.flags & SymbolFlags.ClassMember) &&
prop.valueDeclaration && hasModifier(prop.valueDeclaration, ModifierFlags.Private)) {
prop.valueDeclaration && hasModifier(prop.valueDeclaration, ModifierFlags.Private)
&& !(nodeForCheckWriteOnly && isWriteOnlyAccess(nodeForCheckWriteOnly))) {
if (getCheckFlags(prop) & CheckFlags.Instantiated) {
getSymbolLinks(prop).target.isReferenced = true;
}
@@ -15153,7 +15169,6 @@ namespace ts {
let argCount: number; // Apparent number of arguments we will have in this call
let typeArguments: NodeArray<TypeNode>; // Type arguments (undefined if none)
let callIsIncomplete: boolean; // In incomplete call we want to be lenient when we have too few arguments
let isDecorator: boolean;
let spreadArgIndex = -1;
if (isJsxOpeningLikeElement(node)) {
@@ -15187,7 +15202,6 @@ namespace ts {
}
}
else if (node.kind === SyntaxKind.Decorator) {
isDecorator = true;
typeArguments = undefined;
argCount = getEffectiveArgumentCount(node, /*args*/ undefined, signature);
}
@@ -16582,7 +16596,7 @@ namespace ts {
}
// Make sure require is not a local function
if (!isIdentifier(node.expression)) throw Debug.fail();
const resolvedRequire = resolveName(node.expression, node.expression.escapedText, SymbolFlags.Value, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined);
const resolvedRequire = resolveName(node.expression, node.expression.escapedText, SymbolFlags.Value, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ true);
if (!resolvedRequire) {
// project does not contain symbol named 'require' - assume commonjs require
return true;
@@ -19579,8 +19593,11 @@ namespace ts {
}
function markEntityNameOrEntityExpressionAsReference(typeName: EntityNameOrEntityNameExpression) {
const rootName = typeName && getFirstIdentifier(typeName);
const rootSymbol = rootName && resolveName(rootName, rootName.escapedText, (typeName.kind === SyntaxKind.Identifier ? SymbolFlags.Type : SymbolFlags.Namespace) | SymbolFlags.Alias, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined);
if (!typeName) return;
const rootName = getFirstIdentifier(typeName);
const meaning = (typeName.kind === SyntaxKind.Identifier ? SymbolFlags.Type : SymbolFlags.Namespace) | SymbolFlags.Alias;
const rootSymbol = resolveName(rootName, rootName.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isRefernce*/ true);
if (rootSymbol
&& rootSymbol.flags & SymbolFlags.Alias
&& symbolIsValue(rootSymbol)
@@ -19874,7 +19891,7 @@ namespace ts {
!isParameterPropertyDeclaration(parameter) &&
!parameterIsThisKeyword(parameter) &&
!parameterNameStartsWithUnderscore(name)) {
error(name, Diagnostics._0_is_declared_but_never_used, unescapeLeadingUnderscores(local.escapedName));
error(name, Diagnostics._0_is_declared_but_its_value_is_never_read, unescapeLeadingUnderscores(local.escapedName));
}
}
else if (compilerOptions.noUnusedLocals) {
@@ -19903,7 +19920,7 @@ namespace ts {
}
if (!isRemovedPropertyFromObjectSpread(node.kind === SyntaxKind.Identifier ? node.parent : node)) {
error(node, Diagnostics._0_is_declared_but_never_used, name);
error(node, Diagnostics._0_is_declared_but_its_value_is_never_read, name);
}
}
@@ -19921,13 +19938,13 @@ namespace ts {
for (const member of node.members) {
if (member.kind === SyntaxKind.MethodDeclaration || member.kind === SyntaxKind.PropertyDeclaration) {
if (!member.symbol.isReferenced && hasModifier(member, ModifierFlags.Private)) {
error(member.name, Diagnostics._0_is_declared_but_never_used, unescapeLeadingUnderscores(member.symbol.escapedName));
error(member.name, Diagnostics._0_is_declared_but_its_value_is_never_read, unescapeLeadingUnderscores(member.symbol.escapedName));
}
}
else if (member.kind === SyntaxKind.Constructor) {
for (const parameter of (<ConstructorDeclaration>member).parameters) {
if (!parameter.symbol.isReferenced && hasModifier(parameter, ModifierFlags.Private)) {
error(parameter.name, Diagnostics.Property_0_is_declared_but_never_used, unescapeLeadingUnderscores(parameter.symbol.escapedName));
error(parameter.name, Diagnostics.Property_0_is_declared_but_its_value_is_never_read, unescapeLeadingUnderscores(parameter.symbol.escapedName));
}
}
}
@@ -19948,7 +19965,7 @@ namespace ts {
}
for (const typeParameter of node.typeParameters) {
if (!getMergedSymbol(typeParameter.symbol).isReferenced) {
error(typeParameter.name, Diagnostics._0_is_declared_but_never_used, unescapeLeadingUnderscores(typeParameter.symbol.escapedName));
error(typeParameter.name, Diagnostics._0_is_declared_but_its_value_is_never_read, unescapeLeadingUnderscores(typeParameter.symbol.escapedName));
}
}
}
@@ -20179,7 +20196,7 @@ namespace ts {
const symbol = getSymbolOfNode(node);
if (symbol.flags & SymbolFlags.FunctionScopedVariable) {
if (!isIdentifier(node.name)) throw Debug.fail();
const localDeclarationSymbol = resolveName(node, node.name.escapedText, SymbolFlags.Variable, /*nodeNotFoundErrorMessage*/ undefined, /*nameArg*/ undefined);
const localDeclarationSymbol = resolveName(node, node.name.escapedText, SymbolFlags.Variable, /*nodeNotFoundErrorMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false);
if (localDeclarationSymbol &&
localDeclarationSymbol !== symbol &&
localDeclarationSymbol.flags & SymbolFlags.BlockScopedVariable) {
@@ -20234,7 +20251,7 @@ namespace ts {
else if (n.kind === SyntaxKind.Identifier) {
// check FunctionLikeDeclaration.locals (stores parameters\function local variable)
// if it contains entry with a specified name
const symbol = resolveName(n, (<Identifier>n).escapedText, SymbolFlags.Value | SymbolFlags.Alias, /*nameNotFoundMessage*/undefined, /*nameArg*/undefined);
const symbol = resolveName(n, (<Identifier>n).escapedText, SymbolFlags.Value | SymbolFlags.Alias, /*nameNotFoundMessage*/undefined, /*nameArg*/undefined, /*isUse*/ false);
if (!symbol || symbol === unknownSymbol || !symbol.valueDeclaration) {
return;
}
@@ -20318,7 +20335,7 @@ namespace ts {
const parentType = getTypeForBindingElementParent(parent);
const name = node.propertyName || <Identifier>node.name;
const property = getPropertyOfType(parentType, getTextOfPropertyName(name));
markPropertyAsReferenced(property);
markPropertyAsReferenced(property, /*nodeForCheckWriteOnly*/ undefined); // A destructuring is never a write-only reference.
if (parent.initializer && property) {
checkPropertyAccessibility(parent, parent.initializer, parentType, property);
}
@@ -22254,7 +22271,7 @@ namespace ts {
const exportedName = node.propertyName || node.name;
// find immediate value referenced by exported name (SymbolFlags.Alias is set so we don't chase down aliases)
const symbol = resolveName(exportedName, exportedName.escapedText, SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Alias,
/*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined);
/*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ true);
if (symbol && (symbol === undefinedSymbol || isGlobalSourceFile(getDeclarationContainer(symbol.declarations[0])))) {
error(exportedName, Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, unescapeLeadingUnderscores(exportedName.escapedText));
}
@@ -23359,7 +23376,7 @@ namespace ts {
const container = getEnclosingBlockScopeContainer(symbol.valueDeclaration);
if (isStatementWithLocals(container)) {
const nodeLinks = getNodeLinks(symbol.valueDeclaration);
if (!!resolveName(container.parent, symbol.escapedName, SymbolFlags.Value, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined)) {
if (resolveName(container.parent, symbol.escapedName, SymbolFlags.Value, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false)) {
// redeclaration - always should be renamed
links.isDeclarationWithCollidingName = true;
}
@@ -23669,7 +23686,7 @@ namespace ts {
}
}
return resolveName(location, reference.escapedText, SymbolFlags.Value | SymbolFlags.ExportValue | SymbolFlags.Alias, /*nodeNotFoundMessage*/ undefined, /*nameArg*/ undefined);
return resolveName(location, reference.escapedText, SymbolFlags.Value | SymbolFlags.ExportValue | SymbolFlags.Alias, /*nodeNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ true);
}
function getReferencedValueDeclaration(reference: Identifier): Declaration {
@@ -23992,7 +24009,7 @@ namespace ts {
return quickResult;
}
let lastStatic: Node, lastPrivate: Node, lastProtected: Node, lastDeclare: Node, lastAsync: Node, lastReadonly: Node;
let lastStatic: Node, lastDeclare: Node, lastAsync: Node, lastReadonly: Node;
let flags = ModifierFlags.None;
for (const modifier of node.modifiers) {
if (modifier.kind !== SyntaxKind.ReadonlyKeyword) {
@@ -24014,13 +24031,6 @@ namespace ts {
case SyntaxKind.PrivateKeyword:
const text = visibilityToString(modifierToFlag(modifier.kind));
if (modifier.kind === SyntaxKind.ProtectedKeyword) {
lastProtected = modifier;
}
else if (modifier.kind === SyntaxKind.PrivateKeyword) {
lastPrivate = modifier;
}
if (flags & ModifierFlags.AccessibilityModifier) {
return grammarErrorOnNode(modifier, Diagnostics.Accessibility_modifier_already_seen);
}
+2 -2
View File
@@ -3102,7 +3102,7 @@
"category": "Message",
"code": 6132
},
"'{0}' is declared but never used.": {
"'{0}' is declared but its value is never read.": {
"category": "Error",
"code": 6133
},
@@ -3122,7 +3122,7 @@
"category": "Error",
"code": 6137
},
"Property '{0}' is declared but never used.": {
"Property '{0}' is declared but its value is never read.": {
"category": "Error",
"code": 6138
},
-7
View File
@@ -21,9 +21,6 @@ namespace ts {
const compilerOptions = context.getCompilerOptions();
const languageVersion = getEmitScriptTarget(compilerOptions);
// These variables contain state that changes as we descend into the tree.
let currentSourceFile: SourceFile;
/**
* Keeps track of whether expression substitution has been enabled for specific edge cases.
* They are persisted between each SourceFile transformation and should not be reset.
@@ -51,12 +48,8 @@ namespace ts {
return node;
}
currentSourceFile = node;
const visited = visitEachChild(node, visitor, context);
addEmitHelpers(visited, context.readEmitHelpers());
currentSourceFile = undefined;
return visited;
}
-4
View File
@@ -244,7 +244,6 @@ namespace ts {
const previousOnSubstituteNode = context.onSubstituteNode;
context.onSubstituteNode = onSubstituteNode;
let currentSourceFile: SourceFile;
let renamedCatchVariables: Map<boolean>;
let renamedCatchVariableDeclarations: Identifier[];
@@ -300,12 +299,9 @@ namespace ts {
return node;
}
currentSourceFile = node;
const visited = visitEachChild(node, visitor, context);
addEmitHelpers(visited, context.readEmitHelpers());
currentSourceFile = undefined;
return visited;
}
+1 -2
View File
@@ -100,7 +100,6 @@ namespace ts {
const commandLine = parseCommandLine(args);
let configFileName: string; // Configuration file name (if any)
let cachedConfigFileText: string; // Cached configuration file text, used for reparsing (if any)
let configFileWatcher: FileWatcher; // Configuration file watcher
let directoryWatcher: FileWatcher; // Directory watcher to monitor source file addition/removal
let cachedProgram: Program; // Program cached from last compilation
let rootFileNames: string[]; // Root fileNames for compilation
@@ -189,7 +188,7 @@ namespace ts {
return sys.exit(ExitStatus.DiagnosticsPresent_OutputsSkipped);
}
if (configFileName) {
configFileWatcher = sys.watchFile(configFileName, configFileChanged);
sys.watchFile(configFileName, configFileChanged);
}
if (sys.watchDirectory && configFileName) {
const directory = ts.getDirectoryPath(configFileName);
+41 -3
View File
@@ -500,13 +500,11 @@ namespace ts {
case SyntaxKind.ArrowFunction:
return true;
default:
staticAssertNever(node);
assertTypeIsNever(node);
return false;
}
}
function staticAssertNever(_: never): void {}
// Gets the nearest enclosing block scope container that has the provided node
// as a descendant, that is not the provided node.
export function getEnclosingBlockScopeContainer(node: Node): Node {
@@ -3504,6 +3502,46 @@ namespace ts {
export function getCombinedLocalAndExportSymbolFlags(symbol: Symbol): SymbolFlags {
return symbol.exportSymbol ? symbol.exportSymbol.flags | symbol.flags : symbol.flags;
}
export function isWriteOnlyAccess(node: Node) {
return accessKind(node) === AccessKind.Write;
}
export function isWriteAccess(node: Node) {
return accessKind(node) !== AccessKind.Read;
}
const enum AccessKind {
/** Only reads from a variable. */
Read,
/** Only writes to a variable without using the result. E.g.: `x++;`. */
Write,
/** Writes to a variable and uses the result as an expression. E.g.: `f(x++);`. */
ReadWrite
}
function accessKind(node: Node): AccessKind {
const { parent } = node;
if (!parent) return AccessKind.Read;
switch (parent.kind) {
case SyntaxKind.PostfixUnaryExpression:
case SyntaxKind.PrefixUnaryExpression:
const { operator } = parent as PrefixUnaryExpression | PostfixUnaryExpression;
return operator === SyntaxKind.PlusPlusToken || operator === SyntaxKind.MinusMinusToken ? writeOrReadWrite() : AccessKind.Read;
case SyntaxKind.BinaryExpression:
const { left, operatorToken } = parent as BinaryExpression;
return left === node && isAssignmentOperator(operatorToken.kind) ? writeOrReadWrite() : AccessKind.Read;
case SyntaxKind.PropertyAccessExpression:
return (parent as PropertyAccessExpression).name !== node ? AccessKind.Read : accessKind(parent);
default:
return AccessKind.Read;
}
function writeOrReadWrite(): AccessKind {
// If grandparent is not an ExpressionStatement, this is used as an expression in addition to having a side effect.
return parent.parent && parent.parent.kind === SyntaxKind.ExpressionStatement ? AccessKind.Write : AccessKind.ReadWrite;
}
}
}
namespace ts {
-18
View File
@@ -11,19 +11,13 @@ const enum CompilerTestType {
class CompilerBaselineRunner extends RunnerBase {
private basePath = "tests/cases";
private testSuiteName: TestRunnerKind;
private errors: boolean;
private emit: boolean;
private decl: boolean;
private output: boolean;
public options: string;
constructor(public testType: CompilerTestType) {
super();
this.errors = true;
this.emit = true;
this.decl = true;
this.output = true;
if (testType === CompilerTestType.Conformance) {
this.testSuiteName = "conformance";
}
@@ -214,26 +208,14 @@ class CompilerBaselineRunner extends RunnerBase {
private parseOptions() {
if (this.options && this.options.length > 0) {
this.errors = false;
this.emit = false;
this.decl = false;
this.output = false;
const opts = this.options.split(",");
for (let i = 0; i < opts.length; i++) {
switch (opts[i]) {
case "error":
this.errors = true;
break;
case "emit":
this.emit = true;
break;
case "decl":
this.decl = true;
break;
case "output":
this.output = true;
break;
default:
throw new Error("unsupported flag");
}
+34 -4
View File
@@ -2758,11 +2758,11 @@ namespace FourSlash {
}
}
private getSelection() {
return ({
private getSelection(): ts.TextRange {
return {
pos: this.currentCaretPosition,
end: this.selectionEnd === -1 ? this.currentCaretPosition : this.selectionEnd
});
};
}
public verifyRefactorAvailable(negative: boolean, name: string, actionName?: string) {
@@ -2803,7 +2803,7 @@ namespace FourSlash {
}
}
public applyRefactor({ refactorName, actionName, actionDescription }: FourSlashInterface.ApplyRefactorOptions) {
public applyRefactor({ refactorName, actionName, actionDescription, newContent: newContentWithRenameMarker }: FourSlashInterface.ApplyRefactorOptions) {
const range = this.getSelection();
const refactors = this.languageService.getApplicableRefactors(this.activeFile.fileName, range);
const refactor = refactors.find(r => r.name === refactorName);
@@ -2823,6 +2823,35 @@ namespace FourSlash {
for (const edit of editInfo.edits) {
this.applyEdits(edit.fileName, edit.textChanges, /*isFormattingEdit*/ false);
}
const { renamePosition, newContent } = parseNewContent();
this.verifyCurrentFileContent(newContent);
if (renamePosition === undefined) {
if (editInfo.renameLocation !== undefined) {
this.raiseError(`Did not expect a rename location, got ${editInfo.renameLocation}`);
}
}
else {
// TODO: test editInfo.renameFilename value
assert.isDefined(editInfo.renameFilename);
if (renamePosition !== editInfo.renameLocation) {
this.raiseError(`Expected rename position of ${renamePosition}, but got ${editInfo.renameLocation}`);
}
}
function parseNewContent(): { renamePosition: number | undefined, newContent: string } {
const renamePosition = newContentWithRenameMarker.indexOf("/*RENAME*/");
if (renamePosition === -1) {
return { renamePosition: undefined, newContent: newContentWithRenameMarker };
}
else {
const newContent = newContentWithRenameMarker.slice(0, renamePosition) + newContentWithRenameMarker.slice(renamePosition + "/*RENAME*/".length);
return { renamePosition, newContent };
}
}
}
public verifyFileAfterApplyingRefactorAtMarker(
@@ -4319,6 +4348,7 @@ namespace FourSlashInterface {
refactorName: string;
actionName: string;
actionDescription: string;
newContent: string;
}
export interface CompletionsAtOptions {
-11
View File
@@ -55,7 +55,6 @@ namespace ts.projectSystem {
let configFile: FileOrFolder;
let changeModuleFile1ShapeRequest1: server.protocol.Request;
let changeModuleFile1InternalRequest1: server.protocol.Request;
let changeModuleFile1ShapeRequest2: server.protocol.Request;
// A compile on save affected file request using file1
let moduleFile1FileListRequest: server.protocol.Request;
@@ -112,16 +111,6 @@ namespace ts.projectSystem {
insertString: `var T1: number;`
});
// Change the content of file1 to `export var T: number;export function Foo() { };`
changeModuleFile1ShapeRequest2 = makeSessionRequest<server.protocol.ChangeRequestArgs>(CommandNames.Change, {
file: moduleFile1.path,
line: 1,
offset: 1,
endLine: 1,
endOffset: 1,
insertString: `export var T2: number;`
});
moduleFile1FileListRequest = makeSessionRequest<server.protocol.FileRequestArgs>(CommandNames.CompileOnSaveAffectedFileList, { file: moduleFile1.path, projectFileName: configFile.path });
});
+61 -4
View File
@@ -224,7 +224,7 @@ namespace ts {
testExtractRange(`
function f() {
while (true) {
[#|
[#|
if (x) {
return;
} |]
@@ -234,7 +234,7 @@ namespace ts {
testExtractRange(`
function f() {
while (true) {
[#|
[#|
[$|if (x) {
}
return;|]
@@ -655,6 +655,60 @@ function test(x: number) {
finally {
[#|return 1;|]
}
}`);
// Extraction position - namespace
testExtractMethod("extractMethod23",
`namespace NS {
function M1() { }
function M2() {
[#|return 1;|]
}
function M3() { }
}`);
// Extraction position - function
testExtractMethod("extractMethod24",
`function Outer() {
function M1() { }
function M2() {
[#|return 1;|]
}
function M3() { }
}`);
// Extraction position - file
testExtractMethod("extractMethod25",
`function M1() { }
function M2() {
[#|return 1;|]
}
function M3() { }`);
// Extraction position - class without ctor
testExtractMethod("extractMethod26",
`class C {
M1() { }
M2() {
[#|return 1;|]
}
M3() { }
}`);
// Extraction position - class with ctor in middle
testExtractMethod("extractMethod27",
`class C {
M1() { }
M2() {
[#|return 1;|]
}
constructor() { }
M3() { }
}`);
// Extraction position - class with ctor at end
testExtractMethod("extractMethod28",
`class C {
M1() { }
M2() {
[#|return 1;|]
}
M3() { }
constructor() { }
}`);
});
@@ -691,9 +745,12 @@ function test(x: number) {
data.push(`// ==ORIGINAL==`);
data.push(sourceFile.text);
for (const r of results) {
const changes = refactor.extractMethod.getPossibleExtractions(result.targetRange, context, results.indexOf(r))[0].changes;
const { renameLocation, edits } = refactor.extractMethod.getExtractionAtIndex(result.targetRange, context, results.indexOf(r));
assert.lengthOf(edits, 1);
data.push(`// ==SCOPE::${r.scopeDescription}==`);
data.push(textChanges.applyChanges(sourceFile.text, changes[0].textChanges));
const newText = textChanges.applyChanges(sourceFile.text, edits[0].textChanges);
const newTextWithRename = newText.slice(0, renameLocation) + "/*RENAME*/" + newText.slice(renameLocation);
data.push(newTextWithRename);
}
return data.join(newLineCharacter);
});
@@ -366,13 +366,11 @@ namespace ts.projectSystem {
};
const host = createServerHost([file1, file2]);
let enqueueIsCalled = false;
const installer = new (class extends Installer {
constructor() {
super(host, { typesRegistry: createTypesRegistry("jquery") });
}
enqueueInstallTypingsRequest(project: server.Project, typeAcquisition: TypeAcquisition, unresolvedImports: server.SortedReadonlyArray<string>) {
enqueueIsCalled = true;
super.enqueueInstallTypingsRequest(project, typeAcquisition, unresolvedImports);
}
installWorker(_requestId: number, _args: string[], _cwd: string, cb: TI.RequestCompletedAction): void {
+1 -3
View File
@@ -586,9 +586,7 @@ namespace ts.server {
const response = this.processResponse<protocol.GetEditsForRefactorResponse>(request);
if (!response.body) {
return {
edits: []
};
return { edits: [], renameFilename: undefined, renameLocation: undefined };
}
const edits: FileTextChanges[] = this.convertCodeEditsToTextChanges(response.body.edits);
+1 -2
View File
@@ -585,7 +585,6 @@ namespace ts.server {
function createPollingWatchedFileSet(interval = 2500, chunkSize = 30) {
const watchedFiles: WatchedFile[] = [];
let nextFileToCheck = 0;
let watchTimer: any;
return { getModifiedTime, poll, startWatchTimer, addFile, removeFile };
function getModifiedTime(fileName: string): Date {
@@ -622,7 +621,7 @@ namespace ts.server {
// stat due to inconsistencies of fs.watch
// and efficiency of stat on modern filesystems
function startWatchTimer() {
watchTimer = setInterval(() => {
setInterval(() => {
let count = 0;
let nextToCheck = nextFileToCheck;
let firstCheck = -1;
@@ -2,8 +2,8 @@
namespace ts.codefix {
registerCodeFix({
errorCodes: [
Diagnostics._0_is_declared_but_never_used.code,
Diagnostics.Property_0_is_declared_but_never_used.code
Diagnostics._0_is_declared_but_its_value_is_never_read.code,
Diagnostics.Property_0_is_declared_but_its_value_is_never_read.code
],
getCodeActions: (context: CodeFixContext) => {
const sourceFile = context.sourceFile;
+4 -17
View File
@@ -175,7 +175,7 @@ namespace ts.FindAllReferences {
return {
fileName: node.getSourceFile().fileName,
textSpan: getTextSpan(node),
isWriteAccess: isWriteAccess(node),
isWriteAccess: isWriteAccessForReference(node),
isDefinition: node.kind === SyntaxKind.DefaultKeyword
|| isAnyDeclarationName(node)
|| isLiteralComputedPropertyDeclarationName(node),
@@ -224,7 +224,7 @@ namespace ts.FindAllReferences {
const { node, isInString } = entry;
const fileName = entry.node.getSourceFile().fileName;
const writeAccess = isWriteAccess(node);
const writeAccess = isWriteAccessForReference(node);
const span: HighlightSpan = {
textSpan: getTextSpan(node),
kind: writeAccess ? HighlightSpanKind.writtenReference : HighlightSpanKind.reference,
@@ -244,21 +244,8 @@ namespace ts.FindAllReferences {
}
/** A node is considered a writeAccess iff it is a name of a declaration or a target of an assignment */
function isWriteAccess(node: Node): boolean {
if (node.kind === SyntaxKind.DefaultKeyword || isAnyDeclarationName(node)) {
return true;
}
const { parent } = node;
switch (parent && parent.kind) {
case SyntaxKind.PostfixUnaryExpression:
case SyntaxKind.PrefixUnaryExpression:
return true;
case SyntaxKind.BinaryExpression:
return (<BinaryExpression>parent).left === node && isAssignmentOperator((<BinaryExpression>parent).operatorToken.kind);
default:
return false;
}
function isWriteAccessForReference(node: Node): boolean {
return node.kind === SyntaxKind.DefaultKeyword || isAnyDeclarationName(node) || isWriteAccess(node);
}
}
-2
View File
@@ -273,13 +273,11 @@ namespace ts {
// skip open bracket
token = nextToken();
let i = 0;
// scan until ']' or EOF
while (token !== SyntaxKind.CloseBracketToken && token !== SyntaxKind.EndOfFileToken) {
// record string literals as module names
if (token === SyntaxKind.StringLiteral) {
recordModuleName();
i++;
}
token = nextToken();
@@ -97,7 +97,9 @@ namespace ts.refactor.convertFunctionToES6Class {
}
return {
edits: changeTracker.getChanges()
edits: changeTracker.getChanges(),
renameFilename: undefined,
renameLocation: undefined,
};
function deleteNode(node: Node, inList = false) {
+223 -165
View File
@@ -31,16 +31,16 @@ namespace ts.refactor.extractMethod {
const usedNames: Map<boolean> = createMap();
let i = 0;
for (const extr of extractions) {
for (const { scopeDescription, errors } of extractions) {
// Skip these since we don't have a way to report errors yet
if (extr.errors && extr.errors.length) {
if (errors.length) {
continue;
}
// Don't issue refactorings with duplicated names.
// Scopes come back in "innermost first" order, so extractions will
// preferentially go into nearer scopes
const description = formatStringFromArgs(Diagnostics.Extract_to_0.message, [extr.scopeDescription]);
const description = formatStringFromArgs(Diagnostics.Extract_to_0.message, [scopeDescription]);
if (!usedNames.has(description)) {
usedNames.set(description, true);
actions.push({
@@ -75,10 +75,7 @@ namespace ts.refactor.extractMethod {
const index = +parsedIndexMatch[1];
Debug.assert(isFinite(index), "Expected to parse a finite number from the scope index");
const extractions = getPossibleExtractions(targetRange, context, index);
// Scope is no longer valid from when the user issued the refactor (??)
Debug.assert(extractions !== undefined, "The extraction went missing? How?");
return ({ edits: extractions[0].changes });
return getExtractionAtIndex(targetRange, context, index);
}
// Move these into diagnostic messages if they become user-facing
@@ -102,7 +99,7 @@ namespace ts.refactor.extractMethod {
export const CannotExtractAmbientBlock = createMessage("Cannot extract code from ambient contexts");
}
export enum RangeFacts {
enum RangeFacts {
None = 0,
HasReturn = 1 << 0,
IsGenerator = 1 << 1,
@@ -117,7 +114,7 @@ namespace ts.refactor.extractMethod {
/**
* Represents an expression or a list of statements that should be extracted with some extra information
*/
export interface TargetRange {
interface TargetRange {
readonly range: Expression | Statement[];
readonly facts: RangeFacts;
/**
@@ -130,7 +127,7 @@ namespace ts.refactor.extractMethod {
/**
* Result of 'getRangeToExtract' operation: contains either a range or a list of errors
*/
export type RangeToExtract = {
type RangeToExtract = {
readonly targetRange?: never;
readonly errors: ReadonlyArray<Diagnostic>;
} | {
@@ -141,18 +138,7 @@ namespace ts.refactor.extractMethod {
/*
* Scopes that can store newly extracted method
*/
export type Scope = FunctionLikeDeclaration | SourceFile | ModuleBlock | ClassLikeDeclaration;
/**
* Result of 'extractRange' operation for a specific scope.
* Stores either a list of changes that should be applied to extract a range or a list of errors
*/
export interface ExtractResultForScope {
readonly scope: Scope;
readonly scopeDescription: string;
readonly changes?: FileTextChanges[];
readonly errors?: Diagnostic[];
}
type Scope = FunctionLikeDeclaration | SourceFile | ModuleBlock | ClassLikeDeclaration;
/**
* getRangeToExtract takes a span inside a text file and returns either an expression or an array
@@ -160,6 +146,7 @@ namespace ts.refactor.extractMethod {
* process may fail, in which case a set of errors is returned instead (these are currently
* not shown to the user, but can be used by us diagnostically)
*/
// exported only for tests
export function getRangeToExtract(sourceFile: SourceFile, span: TextSpan): RangeToExtract {
const length = span.length || 0;
// Walk up starting from the the start position until we find a non-SourceFile node that subsumes the selected span.
@@ -458,7 +445,7 @@ namespace ts.refactor.extractMethod {
* you may be able to extract into a class method *or* local closure *or* namespace function,
* depending on what's in the extracted body.
*/
export function collectEnclosingScopes(range: TargetRange): Scope[] | undefined {
function collectEnclosingScopes(range: TargetRange): Scope[] | undefined {
let current: Node = isReadonlyArray(range.range) ? firstOrUndefined(range.range) : range.range;
if (range.facts & RangeFacts.UsesThis) {
// if range uses this as keyword or as type inside the class then it can only be extracted to a method of the containing class
@@ -494,12 +481,32 @@ namespace ts.refactor.extractMethod {
return scopes;
}
// exported only for tests
export function getExtractionAtIndex(targetRange: TargetRange, context: RefactorContext, requestedChangesIndex: number): RefactorEditInfo {
const { scopes, readsAndWrites: { target, usagesPerScope, errorsPerScope } } = getPossibleExtractionsWorker(targetRange, context);
Debug.assert(!errorsPerScope[requestedChangesIndex].length, "The extraction went missing? How?");
context.cancellationToken.throwIfCancellationRequested();
return extractFunctionInScope(target, scopes[requestedChangesIndex], usagesPerScope[requestedChangesIndex], targetRange, context);
}
interface PossibleExtraction {
readonly scopeDescription: string;
readonly errors: ReadonlyArray<Diagnostic>;
}
/**
* Given a piece of text to extract ('targetRange'), computes a list of possible extractions.
* Each returned ExtractResultForScope corresponds to a possible target scope and is either a set of changes
* or an error explaining why we can't extract into that scope.
*/
export function getPossibleExtractions(targetRange: TargetRange, context: RefactorContext, requestedChangesIndex: number = undefined): ReadonlyArray<ExtractResultForScope> | undefined {
// exported only for tests
export function getPossibleExtractions(targetRange: TargetRange, context: RefactorContext): ReadonlyArray<PossibleExtraction> | undefined {
const { scopes, readsAndWrites: { errorsPerScope } } = getPossibleExtractionsWorker(targetRange, context);
// Need the inner type annotation to avoid https://github.com/Microsoft/TypeScript/issues/7547
return scopes.map((scope, i): PossibleExtraction =>
({ scopeDescription: getDescriptionForScope(scope), errors: errorsPerScope[i] }));
}
function getPossibleExtractionsWorker(targetRange: TargetRange, context: RefactorContext): { readonly scopes: Scope[], readonly readsAndWrites: ReadsAndWrites } {
const { file: sourceFile } = context;
if (targetRange === undefined) {
@@ -512,35 +519,14 @@ namespace ts.refactor.extractMethod {
}
const enclosingTextRange = getEnclosingTextRange(targetRange, sourceFile);
const { target, usagesPerScope, errorsPerScope } = collectReadsAndWrites(
const readsAndWrites = collectReadsAndWrites(
targetRange,
scopes,
enclosingTextRange,
sourceFile,
context.program.getTypeChecker(),
context.cancellationToken);
context.cancellationToken.throwIfCancellationRequested();
if (requestedChangesIndex !== undefined) {
if (errorsPerScope[requestedChangesIndex].length) {
return undefined;
}
return [extractFunctionInScope(target, scopes[requestedChangesIndex], usagesPerScope[requestedChangesIndex], targetRange, context)];
}
else {
return scopes.map((scope, i) => {
const errors = errorsPerScope[i];
if (errors.length) {
return {
scope,
scopeDescription: getDescriptionForScope(scope),
errors
};
}
return { scope, scopeDescription: getDescriptionForScope(scope) };
});
}
return { scopes, readsAndWrites };
}
function getDescriptionForScope(scope: Scope): string {
@@ -583,34 +569,33 @@ namespace ts.refactor.extractMethod {
: scope.externalModuleIndicator ? "module scope" : "global scope";
}
function getUniqueName(isNameOkay: (name: string) => boolean) {
function getUniqueName(fileText: string): string {
let functionNameText = "newFunction";
if (isNameOkay(functionNameText)) {
return functionNameText;
}
let i = 1;
while (!isNameOkay(functionNameText = `newFunction_${i}`)) {
i++;
for (let i = 1; fileText.indexOf(functionNameText) !== -1; i++) {
functionNameText = `newFunction_${i}`;
}
return functionNameText;
}
export function extractFunctionInScope(
/**
* Result of 'extractRange' operation for a specific scope.
* Stores either a list of changes that should be applied to extract a range or a list of errors
*/
function extractFunctionInScope(
node: Statement | Expression | Block,
scope: Scope,
{ usages: usagesInScope, typeParameterUsages, substitutions }: ScopeUsages,
range: TargetRange,
context: RefactorContext): ExtractResultForScope {
context: RefactorContext): RefactorEditInfo {
const checker = context.program.getTypeChecker();
// Make a unique name for the extracted function
const file = scope.getSourceFile();
const functionNameText: string = getUniqueName(n => !file.identifiers.has(n));
const functionNameText = getUniqueName(file.text);
const isJS = isInJavaScriptFile(scope);
const functionName = createIdentifier(functionNameText as string);
const functionReference = createIdentifier(functionNameText as string);
const functionName = createIdentifier(functionNameText);
let returnType: TypeNode = undefined;
const parameters: ParameterDeclaration[] = [];
@@ -660,7 +645,7 @@ namespace ts.refactor.extractMethod {
returnType = checker.typeToTypeNode(contextualType);
}
const { body, returnValueProperty } = transformFunctionBody(node);
const { body, returnValueProperty } = transformFunctionBody(node, writes, substitutions, !!(range.facts & RangeFacts.HasReturn));
let newFunction: MethodDeclaration | FunctionDeclaration;
if (isClassLike(scope)) {
@@ -698,13 +683,21 @@ namespace ts.refactor.extractMethod {
}
const changeTracker = textChanges.ChangeTracker.fromContext(context);
// insert function at the end of the scope
changeTracker.insertNodeBefore(context.file, scope.getLastToken(), newFunction, { prefix: context.newLineCharacter, suffix: context.newLineCharacter });
const minInsertionPos = (isReadonlyArray(range.range) ? lastOrUndefined(range.range) : range.range).end;
const 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 });
}
const newNodes: Node[] = [];
// replace range with function call
const called = getCalledExpression(scope, range, functionNameText);
let call: Expression = createCall(
isClassLike(scope) ? createPropertyAccess(range.facts & RangeFacts.InStaticRegion ? createIdentifier(scope.name.getText()) : createThis(), functionReference) : functionReference,
called,
callTypeArguments, // Note that no attempt is made to take advantage of type argument inference
callArguments);
if (range.facts & RangeFacts.IsGenerator) {
@@ -773,114 +766,174 @@ namespace ts.refactor.extractMethod {
changeTracker.replaceNodeWithNodes(context.file, range.range, newNodes, { nodeSeparator: context.newLineCharacter });
}
return {
scope,
scopeDescription: getDescriptionForScope(scope),
changes: changeTracker.getChanges()
};
const edits = changeTracker.getChanges();
const renameRange = isReadonlyArray(range.range) ? range.range[0] : range.range;
function getFirstDeclaration(type: Type): Declaration | undefined {
let firstDeclaration = undefined;
const renameFilename = renameRange.getSourceFile().fileName;
const renameLocation = getRenameLocation(edits, renameFilename, functionNameText);
return { renameFilename, renameLocation, edits };
}
const symbol = type.symbol;
if (symbol && symbol.declarations) {
for (const declaration of symbol.declarations) {
if (firstDeclaration === undefined || declaration.pos < firstDeclaration.pos) {
firstDeclaration = declaration;
}
function getRenameLocation(edits: ReadonlyArray<FileTextChanges>, renameFilename: string, functionNameText: string): number {
let delta = 0;
for (const { fileName, textChanges } of edits) {
Debug.assert(fileName === renameFilename);
for (const change of textChanges) {
const { span, newText } = change;
// TODO(acasey): We are assuming that the call expression comes before the function declaration,
// because we want the new cursor to be on the call expression,
// which is closer to where the user was before extracting the function.
const index = newText.indexOf(functionNameText);
if (index !== -1) {
return span.start + delta + index;
}
delta += newText.length - span.length;
}
}
throw new Error(); // Didn't find the text we inserted?
}
function getFirstDeclaration(type: Type): Declaration | undefined {
let firstDeclaration = undefined;
const symbol = type.symbol;
if (symbol && symbol.declarations) {
for (const declaration of symbol.declarations) {
if (firstDeclaration === undefined || declaration.pos < firstDeclaration.pos) {
firstDeclaration = declaration;
}
}
return firstDeclaration;
}
function compareTypesByDeclarationOrder(
{type: type1, declaration: declaration1}: {type: Type, declaration?: Declaration},
{type: type2, declaration: declaration2}: {type: Type, declaration?: Declaration}) {
return firstDeclaration;
}
if (declaration1) {
if (declaration2) {
const positionDiff = declaration1.pos - declaration2.pos;
if (positionDiff !== 0) {
return positionDiff;
}
function compareTypesByDeclarationOrder(
{type: type1, declaration: declaration1}: {type: Type, declaration?: Declaration},
{type: type2, declaration: declaration2}: {type: Type, declaration?: Declaration}) {
if (declaration1) {
if (declaration2) {
const positionDiff = declaration1.pos - declaration2.pos;
if (positionDiff !== 0) {
return positionDiff;
}
else {
return 1; // Sort undeclared type parameters to the front.
}
}
else if (declaration2) {
return -1; // Sort undeclared type parameters to the front.
}
const name1 = type1.symbol ? type1.symbol.getName() : "";
const name2 = type2.symbol ? type2.symbol.getName() : "";
const nameDiff = compareStrings(name1, name2);
if (nameDiff !== 0) {
return nameDiff;
}
// IDs are guaranteed to be unique, so this ensures a total ordering.
return type1.id - type2.id;
}
function getPropertyAssignmentsForWrites(writes: UsageEntry[]) {
return writes.map(w => createShorthandPropertyAssignment(w.symbol.name));
}
function generateReturnValueProperty() {
return "__return";
}
function transformFunctionBody(body: Node) {
if (isBlock(body) && !writes && substitutions.size === 0) {
// already block, no writes to propagate back, no substitutions - can use node as is
return { body: createBlock(body.statements, /*multLine*/ true), returnValueProperty: undefined };
}
let returnValueProperty: string;
const statements = createNodeArray(isBlock(body) ? body.statements.slice(0) : [isStatement(body) ? body : createReturn(<Expression>body)]);
// rewrite body if either there are writes that should be propagated back via return statements or there are substitutions
if (writes || substitutions.size) {
const rewrittenStatements = visitNodes(statements, visitor).slice();
if (writes && !(range.facts & RangeFacts.HasReturn) && isStatement(body)) {
// add return at the end to propagate writes back in case if control flow falls out of the function body
// it is ok to know that range has at least one return since it we only allow unconditional returns
const assignments = getPropertyAssignmentsForWrites(writes);
if (assignments.length === 1) {
rewrittenStatements.push(createReturn(assignments[0].name));
}
else {
rewrittenStatements.push(createReturn(createObjectLiteral(assignments)));
}
}
return { body: createBlock(rewrittenStatements, /*multiLine*/ true), returnValueProperty };
}
else {
return { body: createBlock(statements, /*multiLine*/ true), returnValueProperty: undefined };
}
function visitor(node: Node): VisitResult<Node> {
if (node.kind === SyntaxKind.ReturnStatement && writes) {
const assignments: ObjectLiteralElementLike[] = getPropertyAssignmentsForWrites(writes);
if ((<ReturnStatement>node).expression) {
if (!returnValueProperty) {
returnValueProperty = generateReturnValueProperty();
}
assignments.unshift(createPropertyAssignment(returnValueProperty, visitNode((<ReturnStatement>node).expression, visitor)));
}
if (assignments.length === 1) {
return createReturn(assignments[0].name as Expression);
}
else {
return createReturn(createObjectLiteral(assignments));
}
}
else {
const substitution = substitutions.get(getNodeId(node).toString());
return substitution || visitEachChild(node, visitor, nullTransformationContext);
}
return 1; // Sort undeclared type parameters to the front.
}
}
else if (declaration2) {
return -1; // Sort undeclared type parameters to the front.
}
const name1 = type1.symbol ? type1.symbol.getName() : "";
const name2 = type2.symbol ? type2.symbol.getName() : "";
const nameDiff = compareStrings(name1, name2);
if (nameDiff !== 0) {
return nameDiff;
}
// IDs are guaranteed to be unique, so this ensures a total ordering.
return type1.id - type2.id;
}
function getCalledExpression(scope: Node, range: TargetRange, functionNameText: string): Expression {
const functionReference = createIdentifier(functionNameText);
if (isClassLike(scope)) {
const lhs = range.facts & RangeFacts.InStaticRegion ? createIdentifier(scope.name.text) : createThis();
return createPropertyAccess(lhs, functionReference);
}
else {
return functionReference;
}
}
function transformFunctionBody(body: Node, writes: ReadonlyArray<UsageEntry>, substitutions: ReadonlyMap<Node>, hasReturn: boolean): { body: Block, returnValueProperty: string } {
if (isBlock(body) && !writes && substitutions.size === 0) {
// already block, no writes to propagate back, no substitutions - can use node as is
return { body: createBlock(body.statements, /*multLine*/ true), returnValueProperty: undefined };
}
let returnValueProperty: string;
const statements = createNodeArray(isBlock(body) ? body.statements.slice(0) : [isStatement(body) ? body : createReturn(<Expression>body)]);
// rewrite body if either there are writes that should be propagated back via return statements or there are substitutions
if (writes || substitutions.size) {
const rewrittenStatements = visitNodes(statements, visitor).slice();
if (writes && !hasReturn && isStatement(body)) {
// add return at the end to propagate writes back in case if control flow falls out of the function body
// it is ok to know that range has at least one return since it we only allow unconditional returns
const assignments = getPropertyAssignmentsForWrites(writes);
if (assignments.length === 1) {
rewrittenStatements.push(createReturn(assignments[0].name));
}
else {
rewrittenStatements.push(createReturn(createObjectLiteral(assignments)));
}
}
return { body: createBlock(rewrittenStatements, /*multiLine*/ true), returnValueProperty };
}
else {
return { body: createBlock(statements, /*multiLine*/ true), returnValueProperty: undefined };
}
function visitor(node: Node): VisitResult<Node> {
if (node.kind === SyntaxKind.ReturnStatement && writes) {
const assignments: ObjectLiteralElementLike[] = getPropertyAssignmentsForWrites(writes);
if ((<ReturnStatement>node).expression) {
if (!returnValueProperty) {
returnValueProperty = "__return";
}
assignments.unshift(createPropertyAssignment(returnValueProperty, visitNode((<ReturnStatement>node).expression, visitor)));
}
if (assignments.length === 1) {
return createReturn(assignments[0].name as Expression);
}
else {
return createReturn(createObjectLiteral(assignments));
}
}
else {
const substitution = substitutions.get(getNodeId(node).toString());
return substitution || visitEachChild(node, visitor, nullTransformationContext);
}
}
}
function getStatementsOrClassElements(scope: Scope): ReadonlyArray<Statement> | ReadonlyArray<ClassElement> {
if (isFunctionLike(scope)) {
const body = scope.body;
if (isBlock(body)) {
return body.statements;
}
}
else if (isModuleBlock(scope) || isSourceFile(scope)) {
return scope.statements;
}
else if (isClassLike(scope)) {
return scope.members;
}
else {
assertTypeIsNever(scope);
}
return emptyArray;
}
/**
* If `scope` contains a function after `minPos`, then return the first such function.
* Otherwise, return `undefined`.
*/
function getNodeToInsertBefore(minPos: number, scope: Scope): Node | undefined {
const children = getStatementsOrClassElements(scope);
for (const child of children) {
if (child.pos >= minPos && isFunctionLike(child) && !isConstructorDeclaration(child)) {
return child;
}
}
}
function getPropertyAssignmentsForWrites(writes: ReadonlyArray<UsageEntry>): ShorthandPropertyAssignment[] {
return writes.map(w => createShorthandPropertyAssignment(w.symbol.name));
}
function isReadonlyArray(v: any): v is ReadonlyArray<any> {
@@ -909,25 +962,30 @@ namespace ts.refactor.extractMethod {
Write = 2
}
export interface UsageEntry {
interface UsageEntry {
readonly usage: Usage;
readonly symbol: Symbol;
readonly node: Node;
}
export interface ScopeUsages {
usages: Map<UsageEntry>;
typeParameterUsages: Map<TypeParameter>; // Key is type ID
substitutions: Map<Node>;
interface ScopeUsages {
readonly usages: Map<UsageEntry>;
readonly typeParameterUsages: Map<TypeParameter>; // Key is type ID
readonly substitutions: Map<Node>;
}
interface ReadsAndWrites {
readonly target: Expression | Block;
readonly usagesPerScope: ReadonlyArray<ScopeUsages>;
readonly errorsPerScope: ReadonlyArray<ReadonlyArray<Diagnostic>>;
}
function collectReadsAndWrites(
targetRange: TargetRange,
scopes: Scope[],
enclosingTextRange: TextRange,
sourceFile: SourceFile,
checker: TypeChecker,
cancellationToken: CancellationToken) {
cancellationToken: CancellationToken): ReadsAndWrites {
const allTypeParameterUsages = createMap<TypeParameter>(); // Key is type ID
const usagesPerScope: ScopeUsages[] = [];
+2 -2
View File
@@ -414,8 +414,8 @@ namespace ts {
*/
export interface RefactorEditInfo {
edits: FileTextChanges[];
renameFilename?: string;
renameLocation?: number;
renameFilename: string | undefined;
renameLocation: number | undefined;
}
export interface TextInsertion {
@@ -1,11 +1,11 @@
/a.ts(2,8): error TS6133: 'Bar' is declared but never used.
/a.ts(2,8): error TS6133: 'Bar' is declared but its value is never read.
==== /a.ts (1 errors) ====
import Foo from "foo";
import Bar from "bar"; // error: unused
~~~
!!! error TS6133: 'Bar' is declared but never used.
!!! error TS6133: 'Bar' is declared but its value is never read.
export class A extends Foo { }
==== /node_modules/foo/index.js (0 errors) ====
@@ -23,7 +23,7 @@ namespace A {
function a() {
let a = 1;
newFunction();
/*RENAME*/newFunction();
function newFunction() {
let y = 5;
@@ -43,7 +43,7 @@ namespace A {
function a() {
let a = 1;
a = newFunction(a);
a = /*RENAME*/newFunction(a);
}
function newFunction(a: number) {
@@ -64,7 +64,7 @@ namespace A {
function a() {
let a = 1;
a = newFunction(a);
a = /*RENAME*/newFunction(a);
}
}
@@ -85,7 +85,7 @@ namespace A {
function a() {
let a = 1;
a = newFunction(x, a, foo);
a = /*RENAME*/newFunction(x, a, foo);
}
}
}
@@ -15,7 +15,7 @@ namespace A {
class C {
a() {
let z = 1;
return this.newFunction();
return this./*RENAME*/newFunction();
}
private newFunction() {
@@ -30,7 +30,7 @@ namespace A {
class C {
a() {
let z = 1;
return newFunction();
return /*RENAME*/newFunction();
}
}
@@ -45,7 +45,7 @@ namespace A {
class C {
a() {
let z = 1;
return newFunction();
return /*RENAME*/newFunction();
}
}
}
@@ -18,7 +18,7 @@ namespace A {
a() {
let z = 1;
var __return: any;
({ __return, z } = this.newFunction(z));
({ __return, z } = this./*RENAME*/newFunction(z));
return __return;
}
@@ -37,7 +37,7 @@ namespace A {
a() {
let z = 1;
var __return: any;
({ __return, z } = newFunction(z));
({ __return, z } = /*RENAME*/newFunction(z));
return __return;
}
}
@@ -56,7 +56,7 @@ namespace A {
a() {
let z = 1;
var __return: any;
({ __return, y, z } = newFunction(y, z));
({ __return, y, z } = /*RENAME*/newFunction(y, z));
return __return;
}
}
@@ -21,7 +21,7 @@ namespace A {
a() {
let z = 1;
var __return: any;
({ __return, z } = this.newFunction(z));
({ __return, z } = this./*RENAME*/newFunction(z));
return __return;
}
@@ -20,7 +20,7 @@
<U2a, U2b>(u2a: U2a, u2b: U2b) => {
function F2<T2a, T2b>(t2a: T2a, t2b: T2b) {
<U3a, U3b>(u3a: U3a, u3b: U3b) => {
newFunction<U3a>(u3a);
/*RENAME*/newFunction<U3a>(u3a);
}
function newFunction<U3a>(u3a: U3a) {
@@ -40,7 +40,7 @@
<U2a, U2b>(u2a: U2a, u2b: U2b) => {
function F2<T2a, T2b>(t2a: T2a, t2b: T2b) {
<U3a, U3b>(u3a: U3a, u3b: U3b) => {
newFunction<U2a, T2a, U3a>(t2a, u2a, u3a);
/*RENAME*/newFunction<U2a, T2a, U3a>(t2a, u2a, u3a);
}
}
}
@@ -60,7 +60,7 @@
<U2a, U2b>(u2a: U2a, u2b: U2b) => {
function F2<T2a, T2b>(t2a: T2a, t2b: T2b) {
<U3a, U3b>(u3a: U3a, u3b: U3b) => {
newFunction<U1a, T1a, U2a, T2a, U3a>(t1a, t2a, u1a, u2a, u3a);
/*RENAME*/newFunction<U1a, T1a, U2a, T2a, U3a>(t1a, t2a, u1a, u2a, u3a);
}
}
}
@@ -8,7 +8,7 @@ function F<T>(t1: T) {
// ==SCOPE::inner function in function 'F'==
function F<T>(t1: T) {
function F<T>(t2: T) {
newFunction();
/*RENAME*/newFunction();
function newFunction() {
t1.toString();
@@ -19,7 +19,7 @@ function F<T>(t1: T) {
// ==SCOPE::inner function in function 'F'==
function F<T>(t1: T) {
function F<T>(t2: T) {
newFunction<T>(t2);
/*RENAME*/newFunction<T>(t2);
}
function newFunction<T>(t2: T) {
@@ -30,7 +30,7 @@ function F<T>(t1: T) {
// ==SCOPE::function in global scope==
function F<T>(t1: T) {
function F<T>(t2: T) {
newFunction<T, T>(t1, t2);
/*RENAME*/newFunction<T, T>(t1, t2);
}
}
function newFunction<T, T>(t1: T, t2: T) {
@@ -7,7 +7,7 @@ function F<T>(t1: T) {
// ==SCOPE::inner function in function 'F'==
function F<T>(t1: T) {
function F<U extends T[]>(t2: U) {
newFunction();
/*RENAME*/newFunction();
function newFunction() {
t2.toString();
@@ -17,7 +17,7 @@ function F<T>(t1: T) {
// ==SCOPE::inner function in function 'F'==
function F<T>(t1: T) {
function F<U extends T[]>(t2: U) {
newFunction<U>(t2);
/*RENAME*/newFunction<U>(t2);
}
function newFunction<U extends T[]>(t2: U) {
@@ -27,7 +27,7 @@ function F<T>(t1: T) {
// ==SCOPE::function in global scope==
function F<T>(t1: T) {
function F<U extends T[]>(t2: U) {
newFunction<T, U>(t2);
/*RENAME*/newFunction<T, U>(t2);
}
}
function newFunction<T, U extends T[]>(t2: U) {
@@ -4,7 +4,7 @@ function F<T>() {
}
// ==SCOPE::inner function in function 'F'==
function F<T>() {
const array: T[] = newFunction();
const array: T[] = /*RENAME*/newFunction();
function newFunction(): T[] {
return [];
@@ -12,7 +12,7 @@ function F<T>() {
}
// ==SCOPE::function in global scope==
function F<T>() {
const array: T[] = newFunction<T>();
const array: T[] = /*RENAME*/newFunction<T>();
}
function newFunction<T>(): T[] {
return [];
@@ -7,7 +7,7 @@ class C<T1, T2> {
// ==SCOPE::method in class 'C'==
class C<T1, T2> {
M(t1: T1, t2: T2) {
this.newFunction(t1);
this./*RENAME*/newFunction(t1);
}
private newFunction(t1: T1) {
@@ -17,7 +17,7 @@ class C<T1, T2> {
// ==SCOPE::function in global scope==
class C<T1, T2> {
M(t1: T1, t2: T2) {
newFunction<T1>(t1);
/*RENAME*/newFunction<T1>(t1);
}
}
function newFunction<T1>(t1: T1) {
@@ -7,7 +7,7 @@ class C {
// ==SCOPE::method in class 'C'==
class C {
M<T1, T2>(t1: T1, t2: T2) {
this.newFunction<T1>(t1);
this./*RENAME*/newFunction<T1>(t1);
}
private newFunction<T1>(t1: T1) {
@@ -17,7 +17,7 @@ class C {
// ==SCOPE::function in global scope==
class C {
M<T1, T2>(t1: T1, t2: T2) {
newFunction<T1>(t1);
/*RENAME*/newFunction<T1>(t1);
}
}
function newFunction<T1>(t1: T1) {
@@ -4,7 +4,7 @@ function F<T, U extends T[], V extends U[]>(v: V) {
}
// ==SCOPE::inner function in function 'F'==
function F<T, U extends T[], V extends U[]>(v: V) {
newFunction();
/*RENAME*/newFunction();
function newFunction() {
v.toString();
@@ -12,7 +12,7 @@ function F<T, U extends T[], V extends U[]>(v: V) {
}
// ==SCOPE::function in global scope==
function F<T, U extends T[], V extends U[]>(v: V) {
newFunction<T, U, V>(v);
/*RENAME*/newFunction<T, U, V>(v);
}
function newFunction<T, U extends T[], V extends U[]>(v: V) {
v.toString();
@@ -20,7 +20,7 @@ namespace A {
namespace B {
function a() {
return newFunction();
return /*RENAME*/newFunction();
function newFunction() {
let y = 5;
@@ -38,7 +38,7 @@ namespace A {
namespace B {
function a() {
return newFunction();
return /*RENAME*/newFunction();
}
function newFunction() {
@@ -56,7 +56,7 @@ namespace A {
namespace B {
function a() {
return newFunction();
return /*RENAME*/newFunction();
}
}
@@ -74,7 +74,7 @@ namespace A {
namespace B {
function a() {
return newFunction(x, foo);
return /*RENAME*/newFunction(x, foo);
}
}
}
@@ -8,7 +8,7 @@ const _ = class {
// ==SCOPE::method in anonymous class expression==
const _ = class {
a() {
return this.newFunction();
return this./*RENAME*/newFunction();
}
private newFunction() {
@@ -19,7 +19,7 @@ const _ = class {
// ==SCOPE::function in global scope==
const _ = class {
a() {
return newFunction();
return /*RENAME*/newFunction();
}
}
function newFunction() {
@@ -7,7 +7,7 @@ function foo() {
// ==SCOPE::inner function in function 'foo'==
function foo() {
let x = 10;
return newFunction();
return /*RENAME*/newFunction();
function newFunction() {
x++;
@@ -17,7 +17,7 @@ function foo() {
// ==SCOPE::function in global scope==
function foo() {
let x = 10;
x = newFunction(x);
x = /*RENAME*/newFunction(x);
return;
}
function newFunction(x: number) {
@@ -11,7 +11,7 @@ function test() {
try {
}
finally {
return newFunction();
return /*RENAME*/newFunction();
}
function newFunction() {
@@ -23,7 +23,7 @@ function test() {
try {
}
finally {
return newFunction();
return /*RENAME*/newFunction();
}
}
function newFunction() {
@@ -0,0 +1,43 @@
// ==ORIGINAL==
namespace NS {
function M1() { }
function M2() {
return 1;
}
function M3() { }
}
// ==SCOPE::inner function in function 'M2'==
namespace NS {
function M1() { }
function M2() {
return /*RENAME*/newFunction();
function newFunction() {
return 1;
}
}
function M3() { }
}
// ==SCOPE::function in namespace 'NS'==
namespace NS {
function M1() { }
function M2() {
return /*RENAME*/newFunction();
}
function newFunction() {
return 1;
}
function M3() { }
}
// ==SCOPE::function in global scope==
namespace NS {
function M1() { }
function M2() {
return /*RENAME*/newFunction();
}
function M3() { }
}
function newFunction() {
return 1;
}
@@ -0,0 +1,43 @@
// ==ORIGINAL==
function Outer() {
function M1() { }
function M2() {
return 1;
}
function M3() { }
}
// ==SCOPE::inner function in function 'M2'==
function Outer() {
function M1() { }
function M2() {
return /*RENAME*/newFunction();
function newFunction() {
return 1;
}
}
function M3() { }
}
// ==SCOPE::inner function in function 'Outer'==
function Outer() {
function M1() { }
function M2() {
return /*RENAME*/newFunction();
}
function newFunction() {
return 1;
}
function M3() { }
}
// ==SCOPE::function in global scope==
function Outer() {
function M1() { }
function M2() {
return /*RENAME*/newFunction();
}
function M3() { }
}
function newFunction() {
return 1;
}
@@ -0,0 +1,26 @@
// ==ORIGINAL==
function M1() { }
function M2() {
return 1;
}
function M3() { }
// ==SCOPE::inner function in function 'M2'==
function M1() { }
function M2() {
return /*RENAME*/newFunction();
function newFunction() {
return 1;
}
}
function M3() { }
// ==SCOPE::function in global scope==
function M1() { }
function M2() {
return /*RENAME*/newFunction();
}
function newFunction() {
return 1;
}
function M3() { }
@@ -0,0 +1,31 @@
// ==ORIGINAL==
class C {
M1() { }
M2() {
return 1;
}
M3() { }
}
// ==SCOPE::method in class 'C'==
class C {
M1() { }
M2() {
return this./*RENAME*/newFunction();
}
private newFunction() {
return 1;
}
M3() { }
}
// ==SCOPE::function in global scope==
class C {
M1() { }
M2() {
return /*RENAME*/newFunction();
}
M3() { }
}
function newFunction() {
return 1;
}
@@ -0,0 +1,34 @@
// ==ORIGINAL==
class C {
M1() { }
M2() {
return 1;
}
constructor() { }
M3() { }
}
// ==SCOPE::method in class 'C'==
class C {
M1() { }
M2() {
return this./*RENAME*/newFunction();
}
constructor() { }
private newFunction() {
return 1;
}
M3() { }
}
// ==SCOPE::function in global scope==
class C {
M1() { }
M2() {
return /*RENAME*/newFunction();
}
constructor() { }
M3() { }
}
function newFunction() {
return 1;
}
@@ -0,0 +1,34 @@
// ==ORIGINAL==
class C {
M1() { }
M2() {
return 1;
}
M3() { }
constructor() { }
}
// ==SCOPE::method in class 'C'==
class C {
M1() { }
M2() {
return this./*RENAME*/newFunction();
}
private newFunction() {
return 1;
}
M3() { }
constructor() { }
}
// ==SCOPE::function in global scope==
class C {
M1() { }
M2() {
return /*RENAME*/newFunction();
}
M3() { }
constructor() { }
}
function newFunction() {
return 1;
}
@@ -18,7 +18,7 @@ namespace A {
namespace B {
function* a(z: number) {
return yield* newFunction();
return yield* /*RENAME*/newFunction();
function* newFunction() {
let y = 5;
@@ -35,7 +35,7 @@ namespace A {
namespace B {
function* a(z: number) {
return yield* newFunction(z);
return yield* /*RENAME*/newFunction(z);
}
function* newFunction(z: number) {
@@ -52,7 +52,7 @@ namespace A {
namespace B {
function* a(z: number) {
return yield* newFunction(z);
return yield* /*RENAME*/newFunction(z);
}
}
@@ -69,7 +69,7 @@ namespace A {
namespace B {
function* a(z: number) {
return yield* newFunction(z, foo);
return yield* /*RENAME*/newFunction(z, foo);
}
}
}
@@ -20,7 +20,7 @@ namespace A {
namespace B {
async function a(z: number, z1: any) {
return await newFunction();
return await /*RENAME*/newFunction();
async function newFunction() {
let y = 5;
@@ -39,7 +39,7 @@ namespace A {
namespace B {
async function a(z: number, z1: any) {
return await newFunction(z, z1);
return await /*RENAME*/newFunction(z, z1);
}
async function newFunction(z: number, z1: any) {
@@ -58,7 +58,7 @@ namespace A {
namespace B {
async function a(z: number, z1: any) {
return await newFunction(z, z1);
return await /*RENAME*/newFunction(z, z1);
}
}
@@ -77,7 +77,7 @@ namespace A {
namespace B {
async function a(z: number, z1: any) {
return await newFunction(z, z1, foo);
return await /*RENAME*/newFunction(z, z1, foo);
}
}
}
@@ -23,7 +23,7 @@ namespace A {
function a() {
let a = 1;
newFunction();
/*RENAME*/newFunction();
function newFunction() {
let y = 5;
@@ -43,7 +43,7 @@ namespace A {
function a() {
let a = 1;
a = newFunction(a);
a = /*RENAME*/newFunction(a);
}
function newFunction(a: number) {
@@ -64,7 +64,7 @@ namespace A {
function a() {
let a = 1;
a = newFunction(a);
a = /*RENAME*/newFunction(a);
}
}
@@ -85,7 +85,7 @@ namespace A {
function a() {
let a = 1;
a = newFunction(x, a);
a = /*RENAME*/newFunction(x, a);
}
}
}
@@ -23,7 +23,7 @@ namespace A {
function a() {
let a = 1;
return newFunction();
return /*RENAME*/newFunction();
function newFunction() {
let y = 5;
@@ -44,7 +44,7 @@ namespace A {
let a = 1;
var __return: any;
({ __return, a } = newFunction(a));
({ __return, a } = /*RENAME*/newFunction(a));
return __return;
}
@@ -66,7 +66,7 @@ namespace A {
let a = 1;
var __return: any;
({ __return, a } = newFunction(a));
({ __return, a } = /*RENAME*/newFunction(a));
return __return;
}
}
@@ -88,7 +88,7 @@ namespace A {
let a = 1;
var __return: any;
({ __return, a } = newFunction(x, a));
({ __return, a } = /*RENAME*/newFunction(x, a));
return __return;
}
}
@@ -27,7 +27,7 @@ namespace A {
function a() {
let a = 1;
return newFunction();
return /*RENAME*/newFunction();
function newFunction() {
let y = 5;
@@ -50,7 +50,7 @@ namespace A {
let a = 1;
var __return: any;
({ __return, a } = newFunction(a));
({ __return, a } = /*RENAME*/newFunction(a));
return __return;
}
@@ -74,7 +74,7 @@ namespace A {
let a = 1;
var __return: any;
({ __return, a } = newFunction(a));
({ __return, a } = /*RENAME*/newFunction(a));
return __return;
}
}
@@ -98,7 +98,7 @@ namespace A {
let a = 1;
var __return: any;
({ __return, a } = newFunction(x, a));
({ __return, a } = /*RENAME*/newFunction(x, a));
return __return;
}
}
@@ -14,7 +14,7 @@ namespace A {
namespace B {
function a() {
let a1 = 1;
return newFunction() + 100;
return /*RENAME*/newFunction() + 100;
function newFunction() {
return 1 + a1 + x;
@@ -28,7 +28,7 @@ namespace A {
namespace B {
function a() {
let a1 = 1;
return newFunction(a1) + 100;
return /*RENAME*/newFunction(a1) + 100;
}
function newFunction(a1: number) {
@@ -42,7 +42,7 @@ namespace A {
namespace B {
function a() {
let a1 = 1;
return newFunction(a1) + 100;
return /*RENAME*/newFunction(a1) + 100;
}
}
@@ -56,7 +56,7 @@ namespace A {
namespace B {
function a() {
let a1 = 1;
return newFunction(a1, x) + 100;
return /*RENAME*/newFunction(a1, x) + 100;
}
}
}
@@ -13,7 +13,7 @@ namespace A {
export interface I { x: number };
namespace B {
function a() {
return newFunction();
return /*RENAME*/newFunction();
function newFunction() {
let a1: I = { x: 1 };
@@ -27,7 +27,7 @@ namespace A {
export interface I { x: number };
namespace B {
function a() {
return newFunction();
return /*RENAME*/newFunction();
}
function newFunction() {
@@ -41,7 +41,7 @@ namespace A {
export interface I { x: number };
namespace B {
function a() {
return newFunction();
return /*RENAME*/newFunction();
}
}
@@ -55,7 +55,7 @@ namespace A {
export interface I { x: number };
namespace B {
function a() {
return newFunction();
return /*RENAME*/newFunction();
}
}
}
@@ -1,6 +1,6 @@
tests/cases/compiler/noUnusedLocals_selfReference.ts(3,10): error TS6133: 'f' is declared but never used.
tests/cases/compiler/noUnusedLocals_selfReference.ts(4,7): error TS6133: 'C' is declared but never used.
tests/cases/compiler/noUnusedLocals_selfReference.ts(7,6): error TS6133: 'E' is declared but never used.
tests/cases/compiler/noUnusedLocals_selfReference.ts(3,10): error TS6133: 'f' is declared but its value is never read.
tests/cases/compiler/noUnusedLocals_selfReference.ts(4,7): error TS6133: 'C' is declared but its value is never read.
tests/cases/compiler/noUnusedLocals_selfReference.ts(7,6): error TS6133: 'E' is declared but its value is never read.
==== tests/cases/compiler/noUnusedLocals_selfReference.ts (3 errors) ====
@@ -8,15 +8,15 @@ tests/cases/compiler/noUnusedLocals_selfReference.ts(7,6): error TS6133: 'E' is
function f() { f; }
~
!!! error TS6133: 'f' is declared but never used.
!!! error TS6133: 'f' is declared but its value is never read.
class C {
~
!!! error TS6133: 'C' is declared but never used.
!!! error TS6133: 'C' is declared but its value is never read.
m() { C; }
}
enum E { A = 0, B = E.A }
~
!!! error TS6133: 'E' is declared but never used.
!!! error TS6133: 'E' is declared but its value is never read.
// Does not detect mutual recursion.
function g() { D; }
@@ -0,0 +1,16 @@
tests/cases/compiler/noUnusedLocals_writeOnly.ts(1,12): error TS6133: 'x' is declared but its value is never read.
==== tests/cases/compiler/noUnusedLocals_writeOnly.ts (1 errors) ====
function f(x = 0) {
~
!!! error TS6133: 'x' is declared but its value is never read.
x = 1;
x++;
x /= 2;
let y = 0;
// This is a write access to y, but not a write-*only* access.
f(y++);
}
@@ -0,0 +1,22 @@
//// [noUnusedLocals_writeOnly.ts]
function f(x = 0) {
x = 1;
x++;
x /= 2;
let y = 0;
// This is a write access to y, but not a write-*only* access.
f(y++);
}
//// [noUnusedLocals_writeOnly.js]
function f(x) {
if (x === void 0) { x = 0; }
x = 1;
x++;
x /= 2;
var y = 0;
// This is a write access to y, but not a write-*only* access.
f(y++);
}
@@ -0,0 +1,13 @@
tests/cases/compiler/noUnusedLocals_writeOnlyProperty.ts(2,13): error TS6133: 'x' is declared but its value is never read.
==== tests/cases/compiler/noUnusedLocals_writeOnlyProperty.ts (1 errors) ====
class C {
private x;
~
!!! error TS6133: 'x' is declared but its value is never read.
m() {
this.x = 0;
}
}
@@ -0,0 +1,18 @@
//// [noUnusedLocals_writeOnlyProperty.ts]
class C {
private x;
m() {
this.x = 0;
}
}
//// [noUnusedLocals_writeOnlyProperty.js]
var C = /** @class */ (function () {
function C() {
}
C.prototype.m = function () {
this.x = 0;
};
return C;
}());
@@ -1,11 +1,11 @@
tests/cases/compiler/unusedClassesinModule1.ts(2,11): error TS6133: 'Calculator' is declared but never used.
tests/cases/compiler/unusedClassesinModule1.ts(2,11): error TS6133: 'Calculator' is declared but its value is never read.
==== tests/cases/compiler/unusedClassesinModule1.ts (1 errors) ====
module A {
class Calculator {
~~~~~~~~~~
!!! error TS6133: 'Calculator' is declared but never used.
!!! error TS6133: 'Calculator' is declared but its value is never read.
public handelChar() {
}
}
@@ -1,11 +1,11 @@
tests/cases/compiler/unusedClassesinNamespace1.ts(2,11): error TS6133: 'c1' is declared but never used.
tests/cases/compiler/unusedClassesinNamespace1.ts(2,11): error TS6133: 'c1' is declared but its value is never read.
==== tests/cases/compiler/unusedClassesinNamespace1.ts (1 errors) ====
namespace Validation {
class c1 {
~~
!!! error TS6133: 'c1' is declared but never used.
!!! error TS6133: 'c1' is declared but its value is never read.
}
}
@@ -1,11 +1,11 @@
tests/cases/compiler/unusedClassesinNamespace2.ts(2,11): error TS6133: 'c1' is declared but never used.
tests/cases/compiler/unusedClassesinNamespace2.ts(2,11): error TS6133: 'c1' is declared but its value is never read.
==== tests/cases/compiler/unusedClassesinNamespace2.ts (1 errors) ====
namespace Validation {
class c1 {
~~
!!! error TS6133: 'c1' is declared but never used.
!!! error TS6133: 'c1' is declared but its value is never read.
}
@@ -1,4 +1,4 @@
tests/cases/compiler/unusedClassesinNamespace4.ts(10,11): error TS6133: 'c3' is declared but never used.
tests/cases/compiler/unusedClassesinNamespace4.ts(10,11): error TS6133: 'c3' is declared but its value is never read.
==== tests/cases/compiler/unusedClassesinNamespace4.ts (1 errors) ====
@@ -13,7 +13,7 @@ tests/cases/compiler/unusedClassesinNamespace4.ts(10,11): error TS6133: 'c3' is
class c3 extends c1 {
~~
!!! error TS6133: 'c3' is declared but never used.
!!! error TS6133: 'c3' is declared but its value is never read.
}
}
@@ -1,4 +1,4 @@
tests/cases/compiler/unusedClassesinNamespace5.ts(10,11): error TS6133: 'c3' is declared but never used.
tests/cases/compiler/unusedClassesinNamespace5.ts(10,11): error TS6133: 'c3' is declared but its value is never read.
==== tests/cases/compiler/unusedClassesinNamespace5.ts (1 errors) ====
@@ -13,7 +13,7 @@ tests/cases/compiler/unusedClassesinNamespace5.ts(10,11): error TS6133: 'c3' is
class c3 {
~~
!!! error TS6133: 'c3' is declared but never used.
!!! error TS6133: 'c3' is declared but its value is never read.
public x: c1;
}
}
@@ -1,15 +1,15 @@
tests/cases/compiler/unusedDestructuringParameters.ts(1,13): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedDestructuringParameters.ts(3,14): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedDestructuringParameters.ts(1,13): error TS6133: 'a' is declared but its value is never read.
tests/cases/compiler/unusedDestructuringParameters.ts(3,14): error TS6133: 'a' is declared but its value is never read.
==== tests/cases/compiler/unusedDestructuringParameters.ts (2 errors) ====
const f = ([a]) => { };
~
!!! error TS6133: 'a' is declared but never used.
!!! error TS6133: 'a' is declared but its value is never read.
f([1]);
const f2 = ({a}) => { };
~
!!! error TS6133: 'a' is declared but never used.
!!! error TS6133: 'a' is declared but its value is never read.
f2({ a: 10 });
const f3 = ([_]) => { };
f3([10]);
@@ -1,10 +1,10 @@
tests/cases/compiler/unusedFunctionsinNamespaces1.ts(2,14): error TS6133: 'function1' is declared but never used.
tests/cases/compiler/unusedFunctionsinNamespaces1.ts(2,14): error TS6133: 'function1' is declared but its value is never read.
==== tests/cases/compiler/unusedFunctionsinNamespaces1.ts (1 errors) ====
namespace Validation {
function function1() {
~~~~~~~~~
!!! error TS6133: 'function1' is declared but never used.
!!! error TS6133: 'function1' is declared but its value is never read.
}
}
@@ -1,10 +1,10 @@
tests/cases/compiler/unusedFunctionsinNamespaces2.ts(2,9): error TS6133: 'function1' is declared but never used.
tests/cases/compiler/unusedFunctionsinNamespaces2.ts(2,9): error TS6133: 'function1' is declared but its value is never read.
==== tests/cases/compiler/unusedFunctionsinNamespaces2.ts (1 errors) ====
namespace Validation {
var function1 = function() {
~~~~~~~~~
!!! error TS6133: 'function1' is declared but never used.
!!! error TS6133: 'function1' is declared but its value is never read.
}
}
@@ -1,13 +1,13 @@
tests/cases/compiler/unusedFunctionsinNamespaces3.ts(2,9): error TS6133: 'function1' is declared but never used.
tests/cases/compiler/unusedFunctionsinNamespaces3.ts(2,30): error TS6133: 'param1' is declared but never used.
tests/cases/compiler/unusedFunctionsinNamespaces3.ts(2,9): error TS6133: 'function1' is declared but its value is never read.
tests/cases/compiler/unusedFunctionsinNamespaces3.ts(2,30): error TS6133: 'param1' is declared but its value is never read.
==== tests/cases/compiler/unusedFunctionsinNamespaces3.ts (2 errors) ====
namespace Validation {
var function1 = function(param1:string) {
~~~~~~~~~
!!! error TS6133: 'function1' is declared but never used.
!!! error TS6133: 'function1' is declared but its value is never read.
~~~~~~
!!! error TS6133: 'param1' is declared but never used.
!!! error TS6133: 'param1' is declared but its value is never read.
}
}
@@ -1,11 +1,11 @@
tests/cases/compiler/unusedFunctionsinNamespaces4.ts(2,9): error TS6133: 'function1' is declared but never used.
tests/cases/compiler/unusedFunctionsinNamespaces4.ts(2,9): error TS6133: 'function1' is declared but its value is never read.
==== tests/cases/compiler/unusedFunctionsinNamespaces4.ts (1 errors) ====
namespace Validation {
var function1 = function() {
~~~~~~~~~
!!! error TS6133: 'function1' is declared but never used.
!!! error TS6133: 'function1' is declared but its value is never read.
}
export function function2() {
@@ -1,5 +1,5 @@
tests/cases/compiler/unusedFunctionsinNamespaces5.ts(9,14): error TS6133: 'function3' is declared but never used.
tests/cases/compiler/unusedFunctionsinNamespaces5.ts(13,14): error TS6133: 'function4' is declared but never used.
tests/cases/compiler/unusedFunctionsinNamespaces5.ts(9,14): error TS6133: 'function3' is declared but its value is never read.
tests/cases/compiler/unusedFunctionsinNamespaces5.ts(13,14): error TS6133: 'function4' is declared but its value is never read.
==== tests/cases/compiler/unusedFunctionsinNamespaces5.ts (2 errors) ====
@@ -13,13 +13,13 @@ tests/cases/compiler/unusedFunctionsinNamespaces5.ts(13,14): error TS6133: 'func
function function3() {
~~~~~~~~~
!!! error TS6133: 'function3' is declared but never used.
!!! error TS6133: 'function3' is declared but its value is never read.
function1();
}
function function4() {
~~~~~~~~~
!!! error TS6133: 'function4' is declared but never used.
!!! error TS6133: 'function4' is declared but its value is never read.
}
}
@@ -1,4 +1,4 @@
tests/cases/compiler/unusedFunctionsinNamespaces6.ts(13,14): error TS6133: 'function4' is declared but never used.
tests/cases/compiler/unusedFunctionsinNamespaces6.ts(13,14): error TS6133: 'function4' is declared but its value is never read.
==== tests/cases/compiler/unusedFunctionsinNamespaces6.ts (1 errors) ====
@@ -16,7 +16,7 @@ tests/cases/compiler/unusedFunctionsinNamespaces6.ts(13,14): error TS6133: 'func
function function4() {
~~~~~~~~~
!!! error TS6133: 'function4' is declared but never used.
!!! error TS6133: 'function4' is declared but its value is never read.
}
@@ -1,55 +1,58 @@
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(1,18): error TS6133: 'person' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(2,9): error TS6133: 'unused' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(5,32): error TS6133: 'unusedtypeparameter' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(6,13): error TS6133: 'unusedprivatevariable' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(11,17): error TS6133: 'message' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(12,13): error TS6133: 'unused2' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(16,20): error TS6133: 'person' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(17,13): error TS6133: 'unused' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(24,13): error TS6133: 'unUsedPrivateFunction' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(37,11): error TS6133: 'numberRegexp' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(44,17): error TS6133: 'unUsedPrivateFunction' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(57,15): error TS6133: 'usedLocallyInterface2' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(64,11): error TS6133: 'dummy' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(67,15): error TS6133: 'unusedInterface' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(79,11): error TS6133: 'class3' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'interface5' is declared but never used.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(1,18): error TS6133: 'person' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(2,9): error TS6133: 'unused' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(5,32): error TS6133: 'unusedtypeparameter' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(6,13): error TS6133: 'unusedprivatevariable' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(7,13): error TS6133: 'greeting' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(11,17): error TS6133: 'message' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(12,13): error TS6133: 'unused2' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(16,20): error TS6133: 'person' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(17,13): error TS6133: 'unused' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(24,13): error TS6133: 'unUsedPrivateFunction' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(37,11): error TS6133: 'numberRegexp' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(44,17): error TS6133: 'unUsedPrivateFunction' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(57,15): error TS6133: 'usedLocallyInterface2' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(64,11): error TS6133: 'dummy' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(67,15): error TS6133: 'unusedInterface' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(79,11): error TS6133: 'class3' is declared but its value is never read.
tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'interface5' is declared but its value is never read.
==== tests/cases/compiler/unusedIdentifiersConsolidated1.ts (16 errors) ====
==== tests/cases/compiler/unusedIdentifiersConsolidated1.ts (17 errors) ====
function greeter(person: string) {
~~~~~~
!!! error TS6133: 'person' is declared but never used.
!!! error TS6133: 'person' is declared but its value is never read.
var unused = 20;
~~~~~~
!!! error TS6133: 'unused' is declared but never used.
!!! error TS6133: 'unused' is declared but its value is never read.
}
class Dummy<usedtypeparameter, unusedtypeparameter> {
~~~~~~~~~~~~~~~~~~~
!!! error TS6133: 'unusedtypeparameter' is declared but never used.
!!! error TS6133: 'unusedtypeparameter' is declared but its value is never read.
private unusedprivatevariable: string;
~~~~~~~~~~~~~~~~~~~~~
!!! error TS6133: 'unusedprivatevariable' is declared but never used.
!!! error TS6133: 'unusedprivatevariable' is declared but its value is never read.
private greeting: string;
~~~~~~~~
!!! error TS6133: 'greeting' is declared but its value is never read.
public unusedpublicvariable: string;
public typedvariable: usedtypeparameter;
constructor(message: string) {
~~~~~~~
!!! error TS6133: 'message' is declared but never used.
!!! error TS6133: 'message' is declared but its value is never read.
var unused2 = 22;
~~~~~~~
!!! error TS6133: 'unused2' is declared but never used.
!!! error TS6133: 'unused2' is declared but its value is never read.
this.greeting = "Dummy Message";
}
public greeter(person: string) {
~~~~~~
!!! error TS6133: 'person' is declared but never used.
!!! error TS6133: 'person' is declared but its value is never read.
var unused = 20;
~~~~~~
!!! error TS6133: 'unused' is declared but never used.
!!! error TS6133: 'unused' is declared but its value is never read.
this.usedPrivateFunction();
}
@@ -58,7 +61,7 @@ tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'in
private unUsedPrivateFunction() {
~~~~~~~~~~~~~~~~~~~~~
!!! error TS6133: 'unUsedPrivateFunction' is declared but never used.
!!! error TS6133: 'unUsedPrivateFunction' is declared but its value is never read.
}
}
@@ -73,7 +76,7 @@ tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'in
const lettersRegexp = /^[A-Za-z]+$/;
const numberRegexp = /^[0-9]+$/;
~~~~~~~~~~~~
!!! error TS6133: 'numberRegexp' is declared but never used.
!!! error TS6133: 'numberRegexp' is declared but its value is never read.
export class LettersOnlyValidator implements StringValidator {
isAcceptable(s2: string) {
@@ -82,7 +85,7 @@ tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'in
private unUsedPrivateFunction() {
~~~~~~~~~~~~~~~~~~~~~
!!! error TS6133: 'unUsedPrivateFunction' is declared but never used.
!!! error TS6133: 'unUsedPrivateFunction' is declared but its value is never read.
}
}
@@ -97,7 +100,7 @@ tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'in
interface usedLocallyInterface2 {
~~~~~~~~~~~~~~~~~~~~~
!!! error TS6133: 'usedLocallyInterface2' is declared but never used.
!!! error TS6133: 'usedLocallyInterface2' is declared but its value is never read.
someFunction(s1: string): void;
}
@@ -106,12 +109,12 @@ tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'in
class dummy implements usedLocallyInterface {
~~~~~
!!! error TS6133: 'dummy' is declared but never used.
!!! error TS6133: 'dummy' is declared but its value is never read.
}
interface unusedInterface {
~~~~~~~~~~~~~~~
!!! error TS6133: 'unusedInterface' is declared but never used.
!!! error TS6133: 'unusedInterface' is declared but its value is never read.
}
}
@@ -125,7 +128,7 @@ tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'in
class class3 {
~~~~~~
!!! error TS6133: 'class3' is declared but never used.
!!! error TS6133: 'class3' is declared but its value is never read.
}
export class class4 {
@@ -147,6 +150,6 @@ tests/cases/compiler/unusedIdentifiersConsolidated1.ts(99,15): error TS6133: 'in
interface interface5 {
~~~~~~~~~~
!!! error TS6133: 'interface5' is declared but never used.
!!! error TS6133: 'interface5' is declared but its value is never read.
}
}
@@ -1,4 +1,4 @@
tests/cases/compiler/file2.ts(1,9): error TS6133: 'Calculator' is declared but never used.
tests/cases/compiler/file2.ts(1,9): error TS6133: 'Calculator' is declared but its value is never read.
==== tests/cases/compiler/file1.ts (0 errors) ====
@@ -9,4 +9,4 @@ tests/cases/compiler/file2.ts(1,9): error TS6133: 'Calculator' is declared but n
==== tests/cases/compiler/file2.ts (1 errors) ====
import {Calculator} from "./file1"
~~~~~~~~~~
!!! error TS6133: 'Calculator' is declared but never used.
!!! error TS6133: 'Calculator' is declared but its value is never read.
@@ -1,4 +1,4 @@
tests/cases/compiler/unusedImports10.ts(9,12): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedImports10.ts(9,12): error TS6133: 'a' is declared but its value is never read.
==== tests/cases/compiler/unusedImports10.ts (1 errors) ====
@@ -12,5 +12,5 @@ tests/cases/compiler/unusedImports10.ts(9,12): error TS6133: 'a' is declared but
module B {
import a = A;
~
!!! error TS6133: 'a' is declared but never used.
!!! error TS6133: 'a' is declared but its value is never read.
}
@@ -1,25 +1,25 @@
tests/cases/compiler/a.ts(1,10): error TS6133: 'Member' is declared but never used.
tests/cases/compiler/a.ts(2,8): error TS6133: 'd' is declared but never used.
tests/cases/compiler/a.ts(2,23): error TS6133: 'M' is declared but never used.
tests/cases/compiler/a.ts(3,13): error TS6133: 'ns' is declared but never used.
tests/cases/compiler/a.ts(4,8): error TS6133: 'r' is declared but never used.
tests/cases/compiler/a.ts(1,10): error TS6133: 'Member' is declared but its value is never read.
tests/cases/compiler/a.ts(2,8): error TS6133: 'd' is declared but its value is never read.
tests/cases/compiler/a.ts(2,23): error TS6133: 'M' is declared but its value is never read.
tests/cases/compiler/a.ts(3,13): error TS6133: 'ns' is declared but its value is never read.
tests/cases/compiler/a.ts(4,8): error TS6133: 'r' is declared but its value is never read.
==== tests/cases/compiler/a.ts (5 errors) ====
import { Member } from './b';
~~~~~~
!!! error TS6133: 'Member' is declared but never used.
!!! error TS6133: 'Member' is declared but its value is never read.
import d, { Member as M } from './b';
~
!!! error TS6133: 'd' is declared but never used.
!!! error TS6133: 'd' is declared but its value is never read.
~
!!! error TS6133: 'M' is declared but never used.
!!! error TS6133: 'M' is declared but its value is never read.
import * as ns from './b';
~~
!!! error TS6133: 'ns' is declared but never used.
!!! error TS6133: 'ns' is declared but its value is never read.
import r = require("./b");
~
!!! error TS6133: 'r' is declared but never used.
!!! error TS6133: 'r' is declared but its value is never read.
==== tests/cases/compiler/b.ts (0 errors) ====
export class Member {}
@@ -1,4 +1,4 @@
tests/cases/compiler/file2.ts(2,9): error TS6133: 'test' is declared but never used.
tests/cases/compiler/file2.ts(2,9): error TS6133: 'test' is declared but its value is never read.
==== tests/cases/compiler/file1.ts (0 errors) ====
@@ -14,7 +14,7 @@ tests/cases/compiler/file2.ts(2,9): error TS6133: 'test' is declared but never u
import {Calculator} from "./file1"
import {test} from "./file1"
~~~~
!!! error TS6133: 'test' is declared but never used.
!!! error TS6133: 'test' is declared but its value is never read.
var x = new Calculator();
x.handleChar();
@@ -1,4 +1,4 @@
tests/cases/compiler/file2.ts(1,9): error TS6133: 'Calculator' is declared but never used.
tests/cases/compiler/file2.ts(1,9): error TS6133: 'Calculator' is declared but its value is never read.
==== tests/cases/compiler/file1.ts (0 errors) ====
@@ -17,7 +17,7 @@ tests/cases/compiler/file2.ts(1,9): error TS6133: 'Calculator' is declared but n
==== tests/cases/compiler/file2.ts (1 errors) ====
import {Calculator, test, test2} from "./file1"
~~~~~~~~~~
!!! error TS6133: 'Calculator' is declared but never used.
!!! error TS6133: 'Calculator' is declared but its value is never read.
test();
test2();
@@ -1,4 +1,4 @@
tests/cases/compiler/file2.ts(1,21): error TS6133: 'test' is declared but never used.
tests/cases/compiler/file2.ts(1,21): error TS6133: 'test' is declared but its value is never read.
==== tests/cases/compiler/file1.ts (0 errors) ====
@@ -17,7 +17,7 @@ tests/cases/compiler/file2.ts(1,21): error TS6133: 'test' is declared but never
==== tests/cases/compiler/file2.ts (1 errors) ====
import {Calculator, test, test2} from "./file1"
~~~~
!!! error TS6133: 'test' is declared but never used.
!!! error TS6133: 'test' is declared but its value is never read.
var x = new Calculator();
x.handleChar();
@@ -1,4 +1,4 @@
tests/cases/compiler/file2.ts(1,27): error TS6133: 'test2' is declared but never used.
tests/cases/compiler/file2.ts(1,27): error TS6133: 'test2' is declared but its value is never read.
==== tests/cases/compiler/file1.ts (0 errors) ====
@@ -17,7 +17,7 @@ tests/cases/compiler/file2.ts(1,27): error TS6133: 'test2' is declared but never
==== tests/cases/compiler/file2.ts (1 errors) ====
import {Calculator, test, test2} from "./file1"
~~~~~
!!! error TS6133: 'test2' is declared but never used.
!!! error TS6133: 'test2' is declared but its value is never read.
var x = new Calculator();
x.handleChar();
@@ -1,4 +1,4 @@
tests/cases/compiler/file2.ts(1,8): error TS6133: 'd' is declared but never used.
tests/cases/compiler/file2.ts(1,8): error TS6133: 'd' is declared but its value is never read.
==== tests/cases/compiler/file1.ts (0 errors) ====
@@ -17,7 +17,7 @@ tests/cases/compiler/file2.ts(1,8): error TS6133: 'd' is declared but never used
==== tests/cases/compiler/file2.ts (1 errors) ====
import d from "./file1"
~
!!! error TS6133: 'd' is declared but never used.
!!! error TS6133: 'd' is declared but its value is never read.
@@ -1,4 +1,4 @@
tests/cases/compiler/file2.ts(1,13): error TS6133: 'n' is declared but never used.
tests/cases/compiler/file2.ts(1,13): error TS6133: 'n' is declared but its value is never read.
==== tests/cases/compiler/file1.ts (0 errors) ====
@@ -17,6 +17,6 @@ tests/cases/compiler/file2.ts(1,13): error TS6133: 'n' is declared but never use
==== tests/cases/compiler/file2.ts (1 errors) ====
import * as n from "./file1"
~
!!! error TS6133: 'n' is declared but never used.
!!! error TS6133: 'n' is declared but its value is never read.
@@ -1,4 +1,4 @@
tests/cases/compiler/file2.ts(1,50): error TS6133: 't2' is declared but never used.
tests/cases/compiler/file2.ts(1,50): error TS6133: 't2' is declared but its value is never read.
==== tests/cases/compiler/file1.ts (0 errors) ====
@@ -17,7 +17,7 @@ tests/cases/compiler/file2.ts(1,50): error TS6133: 't2' is declared but never us
==== tests/cases/compiler/file2.ts (1 errors) ====
import {Calculator as calc, test as t1, test2 as t2} from "./file1"
~~
!!! error TS6133: 't2' is declared but never used.
!!! error TS6133: 't2' is declared but its value is never read.
var x = new calc();
x.handleChar();
@@ -1,10 +1,10 @@
tests/cases/compiler/file2.ts(1,8): error TS6133: 'c' is declared but never used.
tests/cases/compiler/file2.ts(1,8): error TS6133: 'c' is declared but its value is never read.
==== tests/cases/compiler/file2.ts (1 errors) ====
import c = require('./file1')
~
!!! error TS6133: 'c' is declared but never used.
!!! error TS6133: 'c' is declared but its value is never read.
==== tests/cases/compiler/file1.ts (0 errors) ====
export class Calculator {
handleChar() {}
@@ -1,11 +1,11 @@
tests/cases/compiler/unusedInterfaceinNamespace1.ts(2,15): error TS6133: 'i1' is declared but never used.
tests/cases/compiler/unusedInterfaceinNamespace1.ts(2,15): error TS6133: 'i1' is declared but its value is never read.
==== tests/cases/compiler/unusedInterfaceinNamespace1.ts (1 errors) ====
namespace Validation {
interface i1 {
~~
!!! error TS6133: 'i1' is declared but never used.
!!! error TS6133: 'i1' is declared but its value is never read.
}
}
@@ -1,11 +1,11 @@
tests/cases/compiler/unusedInterfaceinNamespace2.ts(2,15): error TS6133: 'i1' is declared but never used.
tests/cases/compiler/unusedInterfaceinNamespace2.ts(2,15): error TS6133: 'i1' is declared but its value is never read.
==== tests/cases/compiler/unusedInterfaceinNamespace2.ts (1 errors) ====
namespace Validation {
interface i1 {
~~
!!! error TS6133: 'i1' is declared but never used.
!!! error TS6133: 'i1' is declared but its value is never read.
}
@@ -1,4 +1,4 @@
tests/cases/compiler/unusedInterfaceinNamespace3.ts(10,15): error TS6133: 'i3' is declared but never used.
tests/cases/compiler/unusedInterfaceinNamespace3.ts(10,15): error TS6133: 'i3' is declared but its value is never read.
==== tests/cases/compiler/unusedInterfaceinNamespace3.ts (1 errors) ====
@@ -13,7 +13,7 @@ tests/cases/compiler/unusedInterfaceinNamespace3.ts(10,15): error TS6133: 'i3' i
interface i3 extends i1 {
~~
!!! error TS6133: 'i3' is declared but never used.
!!! error TS6133: 'i3' is declared but its value is never read.
}
}
@@ -1,5 +1,5 @@
tests/cases/compiler/unusedLocalsAndObjectSpread.ts(20,18): error TS6133: 'bar' is declared but never used.
tests/cases/compiler/unusedLocalsAndObjectSpread.ts(27,21): error TS6133: 'bar' is declared but never used.
tests/cases/compiler/unusedLocalsAndObjectSpread.ts(20,18): error TS6133: 'bar' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndObjectSpread.ts(27,21): error TS6133: 'bar' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsAndObjectSpread.ts (2 errors) ====
@@ -24,7 +24,7 @@ tests/cases/compiler/unusedLocalsAndObjectSpread.ts(27,21): error TS6133: 'bar'
// 'a' is declared but never used
const {a, ...bar} = foo; // bar should be unused
~~~
!!! error TS6133: 'bar' is declared but never used.
!!! error TS6133: 'bar' is declared but its value is never read.
//console.log(bar);
}
@@ -33,7 +33,7 @@ tests/cases/compiler/unusedLocalsAndObjectSpread.ts(27,21): error TS6133: 'bar'
// '_' is declared but never used
const {a: _, ...bar} = foo; // bar should be unused
~~~
!!! error TS6133: 'bar' is declared but never used.
!!! error TS6133: 'bar' is declared but its value is never read.
//console.log(bar);
}
@@ -1,6 +1,6 @@
tests/cases/compiler/unusedLocalsAndObjectSpread2.ts(5,6): error TS6133: 'rest' is declared but never used.
tests/cases/compiler/unusedLocalsAndObjectSpread2.ts(8,10): error TS6133: 'foo' is declared but never used.
tests/cases/compiler/unusedLocalsAndObjectSpread2.ts(12,8): error TS6133: 'rest' is declared but never used.
tests/cases/compiler/unusedLocalsAndObjectSpread2.ts(5,6): error TS6133: 'rest' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndObjectSpread2.ts(8,10): error TS6133: 'foo' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndObjectSpread2.ts(12,8): error TS6133: 'rest' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsAndObjectSpread2.ts (3 errors) ====
@@ -10,18 +10,18 @@ tests/cases/compiler/unusedLocalsAndObjectSpread2.ts(12,8): error TS6133: 'rest'
active: _a, // here!
...rest,
~~~~
!!! error TS6133: 'rest' is declared but never used.
!!! error TS6133: 'rest' is declared but its value is never read.
} = props;
function foo() {
~~~
!!! error TS6133: 'foo' is declared but never used.
!!! error TS6133: 'foo' is declared but its value is never read.
const {
children,
active: _a,
...rest,
~~~~
!!! error TS6133: 'rest' is declared but never used.
!!! error TS6133: 'rest' is declared but its value is never read.
} = props;
}
@@ -1,27 +1,27 @@
tests/cases/compiler/unusedLocalsAndParameters.ts(4,12): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(9,22): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(15,5): error TS6133: 'farrow' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(15,15): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(18,7): error TS6133: 'C' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(20,12): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(4,12): error TS6133: 'a' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(9,22): error TS6133: 'a' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(15,5): error TS6133: 'farrow' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(15,15): error TS6133: 'a' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(18,7): error TS6133: 'C' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(20,12): error TS6133: 'a' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(23,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
tests/cases/compiler/unusedLocalsAndParameters.ts(23,11): error TS6133: 'v' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(27,5): error TS6133: 'E' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(29,12): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(23,11): error TS6133: 'v' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(27,5): error TS6133: 'E' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(29,12): error TS6133: 'a' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(32,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
tests/cases/compiler/unusedLocalsAndParameters.ts(32,11): error TS6133: 'v' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(38,12): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(32,11): error TS6133: 'v' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(38,12): error TS6133: 'a' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(41,9): error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
tests/cases/compiler/unusedLocalsAndParameters.ts(41,11): error TS6133: 'v' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(48,10): error TS6133: 'i' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(52,10): error TS6133: 'i' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(56,17): error TS6133: 'n' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(63,11): error TS6133: 'c' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(68,11): error TS6133: 'a' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(71,11): error TS6133: 'c' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(74,11): error TS6133: 'c' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(79,11): error TS6133: 'N' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(80,9): error TS6133: 'x' is declared but never used.
tests/cases/compiler/unusedLocalsAndParameters.ts(41,11): error TS6133: 'v' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(48,10): error TS6133: 'i' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(52,10): error TS6133: 'i' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(56,17): error TS6133: 'n' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(63,11): error TS6133: 'c' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(68,11): error TS6133: 'a' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(71,11): error TS6133: 'c' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(74,11): error TS6133: 'c' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(79,11): error TS6133: 'N' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParameters.ts(80,9): error TS6133: 'x' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsAndParameters.ts (24 errors) ====
@@ -30,14 +30,14 @@ tests/cases/compiler/unusedLocalsAndParameters.ts(80,9): error TS6133: 'x' is de
// function declaration paramter
function f(a) {
~
!!! error TS6133: 'a' is declared but never used.
!!! error TS6133: 'a' is declared but its value is never read.
}
f(0);
// function expression paramter
var fexp = function (a) {
~
!!! error TS6133: 'a' is declared but never used.
!!! error TS6133: 'a' is declared but its value is never read.
};
fexp(0);
@@ -45,42 +45,42 @@ tests/cases/compiler/unusedLocalsAndParameters.ts(80,9): error TS6133: 'x' is de
// arrow function paramter
var farrow = (a) => {
~~~~~~
!!! error TS6133: 'farrow' is declared but never used.
!!! error TS6133: 'farrow' is declared but its value is never read.
~
!!! error TS6133: 'a' is declared but never used.
!!! error TS6133: 'a' is declared but its value is never read.
};
class C {
~
!!! error TS6133: 'C' is declared but never used.
!!! error TS6133: 'C' is declared but its value is never read.
// Method declaration paramter
method(a) {
~
!!! error TS6133: 'a' is declared but never used.
!!! error TS6133: 'a' is declared but its value is never read.
}
// Accessor declaration paramter
set x(v: number) {
~
!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
~
!!! error TS6133: 'v' is declared but never used.
!!! error TS6133: 'v' is declared but its value is never read.
}
}
var E = class {
~
!!! error TS6133: 'E' is declared but never used.
!!! error TS6133: 'E' is declared but its value is never read.
// Method declaration paramter
method(a) {
~
!!! error TS6133: 'a' is declared but never used.
!!! error TS6133: 'a' is declared but its value is never read.
}
// Accessor declaration paramter
set x(v: number) {
~
!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
~
!!! error TS6133: 'v' is declared but never used.
!!! error TS6133: 'v' is declared but its value is never read.
}
}
@@ -88,14 +88,14 @@ tests/cases/compiler/unusedLocalsAndParameters.ts(80,9): error TS6133: 'x' is de
// Object literal method declaration paramter
method(a) {
~
!!! error TS6133: 'a' is declared but never used.
!!! error TS6133: 'a' is declared but its value is never read.
},
// Accessor declaration paramter
set x(v: number) {
~
!!! error TS1056: Accessors are only available when targeting ECMAScript 5 and higher.
~
!!! error TS6133: 'v' is declared but never used.
!!! error TS6133: 'v' is declared but its value is never read.
}
};
@@ -104,19 +104,19 @@ tests/cases/compiler/unusedLocalsAndParameters.ts(80,9): error TS6133: 'x' is de
// in a for..in statment
for (let i in o) {
~
!!! error TS6133: 'i' is declared but never used.
!!! error TS6133: 'i' is declared but its value is never read.
}
// in a for..of statment
for (let i of [1, 2, 3]) {
~
!!! error TS6133: 'i' is declared but never used.
!!! error TS6133: 'i' is declared but its value is never read.
}
// in a for. statment
for (let i = 0, n; i < 10; i++) {
~
!!! error TS6133: 'n' is declared but never used.
!!! error TS6133: 'n' is declared but its value is never read.
}
// in a block
@@ -125,34 +125,34 @@ tests/cases/compiler/unusedLocalsAndParameters.ts(80,9): error TS6133: 'x' is de
if (condition) {
const c = 0;
~
!!! error TS6133: 'c' is declared but never used.
!!! error TS6133: 'c' is declared but its value is never read.
}
// in try/catch/finally
try {
const a = 0;
~
!!! error TS6133: 'a' is declared but never used.
!!! error TS6133: 'a' is declared but its value is never read.
}
catch (e) {
const c = 1;
~
!!! error TS6133: 'c' is declared but never used.
!!! error TS6133: 'c' is declared but its value is never read.
}
finally {
const c = 0;
~
!!! error TS6133: 'c' is declared but never used.
!!! error TS6133: 'c' is declared but its value is never read.
}
// in a namespace
namespace N {
~
!!! error TS6133: 'N' is declared but never used.
!!! error TS6133: 'N' is declared but its value is never read.
var x;
~
!!! error TS6133: 'x' is declared but never used.
!!! error TS6133: 'x' is declared but its value is never read.
}
@@ -1,21 +1,21 @@
tests/cases/compiler/unusedLocalsAndParametersTypeAliases2.ts(2,6): error TS6133: 'handler1' is declared but never used.
tests/cases/compiler/unusedLocalsAndParametersTypeAliases2.ts(5,10): error TS6133: 'foo' is declared but never used.
tests/cases/compiler/unusedLocalsAndParametersTypeAliases2.ts(6,10): error TS6133: 'handler2' is declared but never used.
tests/cases/compiler/unusedLocalsAndParametersTypeAliases2.ts(2,6): error TS6133: 'handler1' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParametersTypeAliases2.ts(5,10): error TS6133: 'foo' is declared but its value is never read.
tests/cases/compiler/unusedLocalsAndParametersTypeAliases2.ts(6,10): error TS6133: 'handler2' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsAndParametersTypeAliases2.ts (3 errors) ====
// unused
type handler1 = () => void;
~~~~~~~~
!!! error TS6133: 'handler1' is declared but never used.
!!! error TS6133: 'handler1' is declared but its value is never read.
function foo() {
~~~
!!! error TS6133: 'foo' is declared but never used.
!!! error TS6133: 'foo' is declared but its value is never read.
type handler2 = () => void;
~~~~~~~~
!!! error TS6133: 'handler2' is declared but never used.
!!! error TS6133: 'handler2' is declared but its value is never read.
foo();
}
@@ -1,4 +1,4 @@
tests/cases/compiler/unusedLocalsInMethod1.ts(3,13): error TS6133: 'x' is declared but never used.
tests/cases/compiler/unusedLocalsInMethod1.ts(3,13): error TS6133: 'x' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsInMethod1.ts (1 errors) ====
@@ -6,6 +6,6 @@ tests/cases/compiler/unusedLocalsInMethod1.ts(3,13): error TS6133: 'x' is declar
public function1() {
var x = 10;
~
!!! error TS6133: 'x' is declared but never used.
!!! error TS6133: 'x' is declared but its value is never read.
}
}
@@ -1,12 +1,15 @@
tests/cases/compiler/unusedLocalsInMethod2.ts(3,13): error TS6133: 'x' is declared but never used.
tests/cases/compiler/unusedLocalsInMethod2.ts(3,13): error TS6133: 'x' is declared but its value is never read.
tests/cases/compiler/unusedLocalsInMethod2.ts(3,16): error TS6133: 'y' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsInMethod2.ts (1 errors) ====
==== tests/cases/compiler/unusedLocalsInMethod2.ts (2 errors) ====
class greeter {
public function1() {
var x, y = 10;
~
!!! error TS6133: 'x' is declared but never used.
!!! error TS6133: 'x' is declared but its value is never read.
~
!!! error TS6133: 'y' is declared but its value is never read.
y++;
}
}
@@ -1,12 +1,15 @@
tests/cases/compiler/unusedLocalsInMethod3.ts(3,13): error TS6133: 'x' is declared but never used.
tests/cases/compiler/unusedLocalsInMethod3.ts(3,13): error TS6133: 'x' is declared but its value is never read.
tests/cases/compiler/unusedLocalsInMethod3.ts(3,16): error TS6133: 'y' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsInMethod3.ts (1 errors) ====
==== tests/cases/compiler/unusedLocalsInMethod3.ts (2 errors) ====
class greeter {
public function1() {
var x, y;
~
!!! error TS6133: 'x' is declared but never used.
!!! error TS6133: 'x' is declared but its value is never read.
~
!!! error TS6133: 'y' is declared but its value is never read.
y = 1;
}
}
@@ -1,25 +1,28 @@
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(1,18): error TS6133: 'person' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(2,9): error TS6133: 'unused' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(3,14): error TS6133: 'maker' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(3,20): error TS6133: 'child' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(4,13): error TS6133: 'unused2' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(1,18): error TS6133: 'person' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(1,34): error TS6133: 'person2' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(2,9): error TS6133: 'unused' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(3,14): error TS6133: 'maker' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(3,20): error TS6133: 'child' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts(4,13): error TS6133: 'unused2' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts (5 errors) ====
==== tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration1.ts (6 errors) ====
function greeter(person: string, person2: string) {
~~~~~~
!!! error TS6133: 'person' is declared but never used.
!!! error TS6133: 'person' is declared but its value is never read.
~~~~~~~
!!! error TS6133: 'person2' is declared but its value is never read.
var unused = 20;
~~~~~~
!!! error TS6133: 'unused' is declared but never used.
!!! error TS6133: 'unused' is declared but its value is never read.
function maker(child: string): void {
~~~~~
!!! error TS6133: 'maker' is declared but never used.
!!! error TS6133: 'maker' is declared but its value is never read.
~~~~~
!!! error TS6133: 'child' is declared but never used.
!!! error TS6133: 'child' is declared but its value is never read.
var unused2 = 22;
~~~~~~~
!!! error TS6133: 'unused2' is declared but never used.
!!! error TS6133: 'unused2' is declared but its value is never read.
}
person2 = "dummy value";
}
@@ -1,34 +1,34 @@
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(1,18): error TS6133: 'person' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(2,9): error TS6133: 'unused' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(3,14): error TS6133: 'maker' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(3,20): error TS6133: 'child' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(4,13): error TS6133: 'unused2' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(6,21): error TS6133: 'child2' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(7,13): error TS6133: 'unused3' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(1,18): error TS6133: 'person' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(2,9): error TS6133: 'unused' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(3,14): error TS6133: 'maker' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(3,20): error TS6133: 'child' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(4,13): error TS6133: 'unused2' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(6,21): error TS6133: 'child2' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts(7,13): error TS6133: 'unused3' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionDeclaration2.ts (7 errors) ====
function greeter(person: string, person2: string) {
~~~~~~
!!! error TS6133: 'person' is declared but never used.
!!! error TS6133: 'person' is declared but its value is never read.
var unused = 20;
~~~~~~
!!! error TS6133: 'unused' is declared but never used.
!!! error TS6133: 'unused' is declared but its value is never read.
function maker(child: string): void {
~~~~~
!!! error TS6133: 'maker' is declared but never used.
!!! error TS6133: 'maker' is declared but its value is never read.
~~~~~
!!! error TS6133: 'child' is declared but never used.
!!! error TS6133: 'child' is declared but its value is never read.
var unused2 = 22;
~~~~~~~
!!! error TS6133: 'unused2' is declared but never used.
!!! error TS6133: 'unused2' is declared but its value is never read.
}
function maker2(child2: string): void {
~~~~~~
!!! error TS6133: 'child2' is declared but never used.
!!! error TS6133: 'child2' is declared but its value is never read.
var unused3 = 23;
~~~~~~~
!!! error TS6133: 'unused3' is declared but never used.
!!! error TS6133: 'unused3' is declared but its value is never read.
}
maker2(person2);
}
@@ -1,25 +1,28 @@
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(1,25): error TS6133: 'person' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(2,9): error TS6133: 'unused' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(3,14): error TS6133: 'maker' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(3,20): error TS6133: 'child' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(4,13): error TS6133: 'unused2' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(1,25): error TS6133: 'person' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(1,41): error TS6133: 'person2' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(2,9): error TS6133: 'unused' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(3,14): error TS6133: 'maker' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(3,20): error TS6133: 'child' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts(4,13): error TS6133: 'unused2' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts (5 errors) ====
==== tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression1.ts (6 errors) ====
var greeter = function (person: string, person2: string) {
~~~~~~
!!! error TS6133: 'person' is declared but never used.
!!! error TS6133: 'person' is declared but its value is never read.
~~~~~~~
!!! error TS6133: 'person2' is declared but its value is never read.
var unused = 20;
~~~~~~
!!! error TS6133: 'unused' is declared but never used.
!!! error TS6133: 'unused' is declared but its value is never read.
function maker(child: string): void {
~~~~~
!!! error TS6133: 'maker' is declared but never used.
!!! error TS6133: 'maker' is declared but its value is never read.
~~~~~
!!! error TS6133: 'child' is declared but never used.
!!! error TS6133: 'child' is declared but its value is never read.
var unused2 = 22;
~~~~~~~
!!! error TS6133: 'unused2' is declared but never used.
!!! error TS6133: 'unused2' is declared but its value is never read.
}
person2 = "dummy value";
}
@@ -1,34 +1,34 @@
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(1,25): error TS6133: 'person' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(2,9): error TS6133: 'unused' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(3,14): error TS6133: 'maker' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(3,20): error TS6133: 'child' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(4,13): error TS6133: 'unused2' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(6,21): error TS6133: 'child2' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(7,13): error TS6133: 'unused3' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(1,25): error TS6133: 'person' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(2,9): error TS6133: 'unused' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(3,14): error TS6133: 'maker' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(3,20): error TS6133: 'child' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(4,13): error TS6133: 'unused2' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(6,21): error TS6133: 'child2' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts(7,13): error TS6133: 'unused3' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsOnFunctionDeclarationWithinFunctionExpression2.ts (7 errors) ====
var greeter = function (person: string, person2: string) {
~~~~~~
!!! error TS6133: 'person' is declared but never used.
!!! error TS6133: 'person' is declared but its value is never read.
var unused = 20;
~~~~~~
!!! error TS6133: 'unused' is declared but never used.
!!! error TS6133: 'unused' is declared but its value is never read.
function maker(child: string): void {
~~~~~
!!! error TS6133: 'maker' is declared but never used.
!!! error TS6133: 'maker' is declared but its value is never read.
~~~~~
!!! error TS6133: 'child' is declared but never used.
!!! error TS6133: 'child' is declared but its value is never read.
var unused2 = 22;
~~~~~~~
!!! error TS6133: 'unused2' is declared but never used.
!!! error TS6133: 'unused2' is declared but its value is never read.
}
function maker2(child2: string): void {
~~~~~~
!!! error TS6133: 'child2' is declared but never used.
!!! error TS6133: 'child2' is declared but its value is never read.
var unused3 = 23;
~~~~~~~
!!! error TS6133: 'unused3' is declared but never used.
!!! error TS6133: 'unused3' is declared but its value is never read.
}
maker2(person2);
}
@@ -1,25 +1,28 @@
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(1,18): error TS6133: 'person' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(2,9): error TS6133: 'unused' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(3,9): error TS6133: 'maker' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(3,27): error TS6133: 'child' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(4,13): error TS6133: 'unused2' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(1,18): error TS6133: 'person' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(1,34): error TS6133: 'person2' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(2,9): error TS6133: 'unused' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(3,9): error TS6133: 'maker' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(3,27): error TS6133: 'child' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts(4,13): error TS6133: 'unused2' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts (5 errors) ====
==== tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration1.ts (6 errors) ====
function greeter(person: string, person2: string) {
~~~~~~
!!! error TS6133: 'person' is declared but never used.
!!! error TS6133: 'person' is declared but its value is never read.
~~~~~~~
!!! error TS6133: 'person2' is declared but its value is never read.
var unused = 20;
~~~~~~
!!! error TS6133: 'unused' is declared but never used.
!!! error TS6133: 'unused' is declared but its value is never read.
var maker = function (child: string): void {
~~~~~
!!! error TS6133: 'maker' is declared but never used.
!!! error TS6133: 'maker' is declared but its value is never read.
~~~~~
!!! error TS6133: 'child' is declared but never used.
!!! error TS6133: 'child' is declared but its value is never read.
var unused2 = 22;
~~~~~~~
!!! error TS6133: 'unused2' is declared but never used.
!!! error TS6133: 'unused2' is declared but its value is never read.
}
person2 = "dummy value";
}
@@ -1,34 +1,34 @@
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(1,18): error TS6133: 'person' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(2,9): error TS6133: 'unused' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(3,9): error TS6133: 'maker' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(3,26): error TS6133: 'child' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(4,13): error TS6133: 'unused2' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(6,27): error TS6133: 'child2' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(7,13): error TS6133: 'unused3' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(1,18): error TS6133: 'person' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(2,9): error TS6133: 'unused' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(3,9): error TS6133: 'maker' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(3,26): error TS6133: 'child' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(4,13): error TS6133: 'unused2' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(6,27): error TS6133: 'child2' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts(7,13): error TS6133: 'unused3' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionDeclaration2.ts (7 errors) ====
function greeter(person: string, person2: string) {
~~~~~~
!!! error TS6133: 'person' is declared but never used.
!!! error TS6133: 'person' is declared but its value is never read.
var unused = 20;
~~~~~~
!!! error TS6133: 'unused' is declared but never used.
!!! error TS6133: 'unused' is declared but its value is never read.
var maker = function(child: string): void {
~~~~~
!!! error TS6133: 'maker' is declared but never used.
!!! error TS6133: 'maker' is declared but its value is never read.
~~~~~
!!! error TS6133: 'child' is declared but never used.
!!! error TS6133: 'child' is declared but its value is never read.
var unused2 = 22;
~~~~~~~
!!! error TS6133: 'unused2' is declared but never used.
!!! error TS6133: 'unused2' is declared but its value is never read.
}
var maker2 = function(child2: string): void {
~~~~~~
!!! error TS6133: 'child2' is declared but never used.
!!! error TS6133: 'child2' is declared but its value is never read.
var unused3 = 23;
~~~~~~~
!!! error TS6133: 'unused3' is declared but never used.
!!! error TS6133: 'unused3' is declared but its value is never read.
}
maker2(person2);
}
@@ -1,25 +1,28 @@
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(1,25): error TS6133: 'person' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(2,9): error TS6133: 'unused' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(3,9): error TS6133: 'maker' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(3,27): error TS6133: 'child' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(4,13): error TS6133: 'unused2' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(1,25): error TS6133: 'person' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(1,41): error TS6133: 'person2' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(2,9): error TS6133: 'unused' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(3,9): error TS6133: 'maker' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(3,27): error TS6133: 'child' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts(4,13): error TS6133: 'unused2' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts (5 errors) ====
==== tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression1.ts (6 errors) ====
var greeter = function (person: string, person2: string) {
~~~~~~
!!! error TS6133: 'person' is declared but never used.
!!! error TS6133: 'person' is declared but its value is never read.
~~~~~~~
!!! error TS6133: 'person2' is declared but its value is never read.
var unused = 20;
~~~~~~
!!! error TS6133: 'unused' is declared but never used.
!!! error TS6133: 'unused' is declared but its value is never read.
var maker = function (child: string): void {
~~~~~
!!! error TS6133: 'maker' is declared but never used.
!!! error TS6133: 'maker' is declared but its value is never read.
~~~~~
!!! error TS6133: 'child' is declared but never used.
!!! error TS6133: 'child' is declared but its value is never read.
var unused2 = 22;
~~~~~~~
!!! error TS6133: 'unused2' is declared but never used.
!!! error TS6133: 'unused2' is declared but its value is never read.
}
person2 = "dummy value";
}
@@ -1,34 +1,34 @@
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(1,25): error TS6133: 'person' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(2,9): error TS6133: 'unused' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(3,9): error TS6133: 'maker' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(3,27): error TS6133: 'child' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(4,13): error TS6133: 'unused2' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(6,28): error TS6133: 'child2' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(7,13): error TS6133: 'unused3' is declared but never used.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(1,25): error TS6133: 'person' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(2,9): error TS6133: 'unused' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(3,9): error TS6133: 'maker' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(3,27): error TS6133: 'child' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(4,13): error TS6133: 'unused2' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(6,28): error TS6133: 'child2' is declared but its value is never read.
tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts(7,13): error TS6133: 'unused3' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsOnFunctionExpressionWithinFunctionExpression2.ts (7 errors) ====
var greeter = function (person: string, person2: string) {
~~~~~~
!!! error TS6133: 'person' is declared but never used.
!!! error TS6133: 'person' is declared but its value is never read.
var unused = 20;
~~~~~~
!!! error TS6133: 'unused' is declared but never used.
!!! error TS6133: 'unused' is declared but its value is never read.
var maker = function (child: string): void {
~~~~~
!!! error TS6133: 'maker' is declared but never used.
!!! error TS6133: 'maker' is declared but its value is never read.
~~~~~
!!! error TS6133: 'child' is declared but never used.
!!! error TS6133: 'child' is declared but its value is never read.
var unused2 = 22;
~~~~~~~
!!! error TS6133: 'unused2' is declared but never used.
!!! error TS6133: 'unused2' is declared but its value is never read.
}
var maker2 = function (child2: string): void {
~~~~~~
!!! error TS6133: 'child2' is declared but never used.
!!! error TS6133: 'child2' is declared but its value is never read.
var unused3 = 23;
~~~~~~~
!!! error TS6133: 'unused3' is declared but never used.
!!! error TS6133: 'unused3' is declared but its value is never read.
}
maker2(person2);
}
@@ -1,4 +1,4 @@
tests/cases/compiler/unusedLocalsStartingWithUnderscore.ts(6,9): error TS6133: '_' is declared but never used.
tests/cases/compiler/unusedLocalsStartingWithUnderscore.ts(6,9): error TS6133: '_' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsStartingWithUnderscore.ts (1 errors) ====
@@ -9,7 +9,7 @@ tests/cases/compiler/unusedLocalsStartingWithUnderscore.ts(6,9): error TS6133: '
namespace M {
let _;
~
!!! error TS6133: '_' is declared but never used.
!!! error TS6133: '_' is declared but its value is never read.
for (const _ of []) { }
for (const _ in []) { }
@@ -1,4 +1,4 @@
tests/cases/compiler/unusedLocalsinConstructor1.ts(3,13): error TS6133: 'unused' is declared but never used.
tests/cases/compiler/unusedLocalsinConstructor1.ts(3,13): error TS6133: 'unused' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsinConstructor1.ts (1 errors) ====
@@ -6,6 +6,6 @@ tests/cases/compiler/unusedLocalsinConstructor1.ts(3,13): error TS6133: 'unused'
constructor() {
var unused = 20;
~~~~~~
!!! error TS6133: 'unused' is declared but never used.
!!! error TS6133: 'unused' is declared but its value is never read.
}
}
@@ -1,4 +1,4 @@
tests/cases/compiler/unusedLocalsinConstructor2.ts(3,13): error TS6133: 'unused' is declared but never used.
tests/cases/compiler/unusedLocalsinConstructor2.ts(3,13): error TS6133: 'unused' is declared but its value is never read.
==== tests/cases/compiler/unusedLocalsinConstructor2.ts (1 errors) ====
@@ -6,7 +6,7 @@ tests/cases/compiler/unusedLocalsinConstructor2.ts(3,13): error TS6133: 'unused'
constructor() {
var unused = 20;
~~~~~~
!!! error TS6133: 'unused' is declared but never used.
!!! error TS6133: 'unused' is declared but its value is never read.
var used = "dummy";
used = used + "second part";
}
@@ -1,9 +1,9 @@
tests/cases/compiler/unusedModuleInModule.ts(2,12): error TS6133: 'B' is declared but never used.
tests/cases/compiler/unusedModuleInModule.ts(2,12): error TS6133: 'B' is declared but its value is never read.
==== tests/cases/compiler/unusedModuleInModule.ts (1 errors) ====
module A {
module B {}
~
!!! error TS6133: 'B' is declared but never used.
!!! error TS6133: 'B' is declared but its value is never read.
}
@@ -1,15 +1,18 @@
tests/cases/compiler/unusedMultipleParameter1InContructor.ts(2,17): error TS6133: 'person' is declared but never used.
tests/cases/compiler/unusedMultipleParameter1InContructor.ts(3,13): error TS6133: 'unused' is declared but never used.
tests/cases/compiler/unusedMultipleParameter1InContructor.ts(2,17): error TS6133: 'person' is declared but its value is never read.
tests/cases/compiler/unusedMultipleParameter1InContructor.ts(2,33): error TS6133: 'person2' is declared but its value is never read.
tests/cases/compiler/unusedMultipleParameter1InContructor.ts(3,13): error TS6133: 'unused' is declared but its value is never read.
==== tests/cases/compiler/unusedMultipleParameter1InContructor.ts (2 errors) ====
==== tests/cases/compiler/unusedMultipleParameter1InContructor.ts (3 errors) ====
class Dummy {
constructor(person: string, person2: string) {
~~~~~~
!!! error TS6133: 'person' is declared but never used.
!!! error TS6133: 'person' is declared but its value is never read.
~~~~~~~
!!! error TS6133: 'person2' is declared but its value is never read.
var unused = 20;
~~~~~~
!!! error TS6133: 'unused' is declared but never used.
!!! error TS6133: 'unused' is declared but its value is never read.
person2 = "Dummy value";
}
}

Some files were not shown because too many files have changed in this diff Show More