mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Fully deprecate the symbol display builder, reimplement in terms of node builder (#18860)
* Remove SymbolWriter, give methods to EmitTextWriter * Unification of writers is done-ish * Make node builder support more flags * Write out mixins like we used to * Accept prototype-free baselines * Use instantiated constraint when building mapped type nodes * Accept better mapped type baselines * Report inaccessible this in node builder * Turns out there was a bug in our codefix, too * Symbol display builder usage falling * Replace signatureToString with a nodeBuilder solution * Replace the last internal usages of the symbol writer * Accept semicolon additions * Accept updated symbol baseline output * Start using node builder for some LS operations * Remove those pesky trailing semicolons on signatures * Get signature printing much closer to old output * Parameter lists should not be indented by default, especially when single-line * Signatures up to snuff * Type quickinfo emit is up to snuff * Start of symbol writer replacement, needs a bit more for full compat * Slightly mor accurate to old behavior * Replicate qualified name type argument output correctly * Bring back the old symbol baselines * Mostly identical to old symbol emit now * Perfectly matches old behavior thus far * Replace another usage of the symbol builder * Another usage removed * Another usage removed * Remove final uses of symbol display builder * Remove implementation and types for unused symbol display builder * Cleanup in the checker * monomorphize new emitter code * Replace emitWithSuffix * Push space character to interface with writer * List emit * Fix lack of usage of emitExpression * writeList, not printList * Remove listy writes and replace with new printer calls * Move ListFormat into types.ts * Remove most new XToString functions in favor of node builder functions * Accept API breaks * Add getSymbolDisplayBuilder polyfill * Accept updated API baseline * Move definition to make diff easier to read * Reinternalize some things * Remove trailign whitespace * Reorder for zero diff * Remove newline * Make shim mor eperfectly imitate old behavior * Style feedback * Rename reset to clear to maintain backcompat with SymbolWriter * Fix quickfix * Keep EmitTextWriter internal * Remove EmitTextWriter from public API * Mimic default name declaration emit fix * Fix tests broken by merge * use isFunctionLike * Cleanup, sync TypeFormat and NodeBuilder flags * Reorder Node initialization so pos and end are first, so a TextRange hidden class is made first to reduce future polymorphism * Use variable instead of ternary * Write helper for emitNodeWithWriter * Emitter cleanup * Cleanup whitespace, comment * Reuse printer * Raise error if display parts writer uses rawWrite * Hide writer parameter through different function instead of overload, rename function in emitter * Make less printer * fix lint
This commit is contained in:
+432
-902
File diff suppressed because it is too large
Load Diff
@@ -2771,10 +2771,10 @@ namespace ts {
|
||||
function Signature() {} // tslint:disable-line no-empty
|
||||
|
||||
function Node(this: Node, kind: SyntaxKind, pos: number, end: number) {
|
||||
this.id = 0;
|
||||
this.kind = kind;
|
||||
this.pos = pos;
|
||||
this.end = end;
|
||||
this.kind = kind;
|
||||
this.id = 0;
|
||||
this.flags = NodeFlags.None;
|
||||
this.modifierFlagsCache = ModifierFlags.None;
|
||||
this.transformFlags = TransformFlags.None;
|
||||
@@ -3046,6 +3046,10 @@ namespace ts {
|
||||
return (arg: T) => f(arg) && g(arg);
|
||||
}
|
||||
|
||||
export function or<T>(f: (arg: T) => boolean, g: (arg: T) => boolean) {
|
||||
return (arg: T) => f(arg) || g(arg);
|
||||
}
|
||||
|
||||
export function assertTypeIsNever(_: never): void { } // tslint:disable-line no-empty
|
||||
|
||||
export interface FileAndDirectoryExistence {
|
||||
|
||||
@@ -20,14 +20,14 @@ namespace ts {
|
||||
|
||||
type GetSymbolAccessibilityDiagnostic = (symbolAccessibilityResult: SymbolAccessibilityResult) => SymbolAccessibilityDiagnostic;
|
||||
|
||||
interface EmitTextWriterWithSymbolWriter extends EmitTextWriter, SymbolWriter {
|
||||
interface EmitTextWriterWithSymbolWriter extends EmitTextWriter {
|
||||
getSymbolAccessibilityDiagnostic: GetSymbolAccessibilityDiagnostic;
|
||||
}
|
||||
|
||||
interface SymbolAccessibilityDiagnostic {
|
||||
errorNode: Node;
|
||||
diagnosticMessage: DiagnosticMessage;
|
||||
typeName?: DeclarationName;
|
||||
typeName?: DeclarationName | QualifiedName;
|
||||
}
|
||||
|
||||
export function getDeclarationDiagnostics(host: EmitHost, resolver: EmitResolver, targetSourceFile: SourceFile): Diagnostic[] {
|
||||
@@ -358,7 +358,7 @@ namespace ts {
|
||||
}
|
||||
else {
|
||||
errorNameNode = declaration.name;
|
||||
const format = TypeFormatFlags.UseTypeOfFunction |
|
||||
const format = TypeFormatFlags.UseTypeOfFunction | TypeFormatFlags.WriteDefaultSymbolWithoutName |
|
||||
TypeFormatFlags.WriteClassExpressionAsTypeLiteral |
|
||||
(shouldUseResolverType ? TypeFormatFlags.AddUndefined : 0);
|
||||
resolver.writeTypeOfDeclaration(declaration, enclosingDeclaration, format, writer);
|
||||
@@ -378,7 +378,7 @@ namespace ts {
|
||||
resolver.writeReturnTypeOfSignatureDeclaration(
|
||||
signature,
|
||||
enclosingDeclaration,
|
||||
TypeFormatFlags.UseTypeOfFunction | TypeFormatFlags.WriteClassExpressionAsTypeLiteral,
|
||||
TypeFormatFlags.UseTypeOfFunction | TypeFormatFlags.WriteClassExpressionAsTypeLiteral | TypeFormatFlags.WriteDefaultSymbolWithoutName,
|
||||
writer);
|
||||
errorNameNode = undefined;
|
||||
}
|
||||
@@ -643,7 +643,7 @@ namespace ts {
|
||||
resolver.writeTypeOfExpression(
|
||||
expr,
|
||||
enclosingDeclaration,
|
||||
TypeFormatFlags.UseTypeOfFunction | TypeFormatFlags.WriteClassExpressionAsTypeLiteral,
|
||||
TypeFormatFlags.UseTypeOfFunction | TypeFormatFlags.WriteClassExpressionAsTypeLiteral | TypeFormatFlags.WriteDefaultSymbolWithoutName,
|
||||
writer);
|
||||
write(";");
|
||||
writeLine();
|
||||
|
||||
+518
-373
File diff suppressed because it is too large
Load Diff
@@ -112,21 +112,23 @@ namespace ts {
|
||||
|
||||
export function createIdentifier(text: string): Identifier;
|
||||
/* @internal */
|
||||
// tslint:disable-next-line unified-signatures
|
||||
export function createIdentifier(text: string, typeArguments: ReadonlyArray<TypeNode>): Identifier;
|
||||
export function createIdentifier(text: string, typeArguments?: ReadonlyArray<TypeNode>): Identifier {
|
||||
export function createIdentifier(text: string, typeArguments: ReadonlyArray<TypeNode | TypeParameterDeclaration>): Identifier; // tslint:disable-line unified-signatures
|
||||
export function createIdentifier(text: string, typeArguments?: ReadonlyArray<TypeNode | TypeParameterDeclaration>): Identifier {
|
||||
const node = <Identifier>createSynthesizedNode(SyntaxKind.Identifier);
|
||||
node.escapedText = escapeLeadingUnderscores(text);
|
||||
node.originalKeywordKind = text ? stringToToken(text) : SyntaxKind.Unknown;
|
||||
node.autoGenerateKind = GeneratedIdentifierKind.None;
|
||||
node.autoGenerateId = 0;
|
||||
if (typeArguments) {
|
||||
node.typeArguments = createNodeArray(typeArguments);
|
||||
node.typeArguments = createNodeArray(typeArguments as ReadonlyArray<TypeNode>);
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
export function updateIdentifier(node: Identifier, typeArguments: NodeArray<TypeNode> | undefined): Identifier {
|
||||
export function updateIdentifier(node: Identifier): Identifier;
|
||||
/* @internal */
|
||||
export function updateIdentifier(node: Identifier, typeArguments: NodeArray<TypeNode | TypeParameterDeclaration> | undefined): Identifier; // tslint:disable-line unified-signatures
|
||||
export function updateIdentifier(node: Identifier, typeArguments?: NodeArray<TypeNode | TypeParameterDeclaration> | undefined): Identifier {
|
||||
return node.typeArguments !== typeArguments
|
||||
? updateNode(createIdentifier(idText(node), typeArguments), node)
|
||||
: node;
|
||||
@@ -578,11 +580,12 @@ namespace ts {
|
||||
}
|
||||
|
||||
/* @internal */
|
||||
export function createSignatureDeclaration(kind: SyntaxKind, typeParameters: ReadonlyArray<TypeParameterDeclaration> | undefined, parameters: ReadonlyArray<ParameterDeclaration>, type: TypeNode | undefined) {
|
||||
export function createSignatureDeclaration(kind: SyntaxKind, typeParameters: ReadonlyArray<TypeParameterDeclaration> | undefined, parameters: ReadonlyArray<ParameterDeclaration>, type: TypeNode | undefined, typeArguments?: TypeNode[] | undefined) {
|
||||
const node = createSynthesizedNode(kind) as SignatureDeclaration;
|
||||
node.typeParameters = asNodeArray(typeParameters);
|
||||
node.parameters = asNodeArray(parameters);
|
||||
node.type = type;
|
||||
node.typeArguments = asNodeArray(typeArguments);
|
||||
return node;
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ namespace ts {
|
||||
* @param tokenStartPos The start pos of the token.
|
||||
* @param emitCallback The callback used to emit the token.
|
||||
*/
|
||||
emitTokenWithSourceMap(node: Node, token: SyntaxKind, tokenStartPos: number, emitCallback: (token: SyntaxKind, tokenStartPos: number) => number): number;
|
||||
emitTokenWithSourceMap(node: Node, token: SyntaxKind, writer: (s: string) => void, tokenStartPos: number, emitCallback: (token: SyntaxKind, writer: (s: string) => void, tokenStartPos: number) => number): number;
|
||||
|
||||
/**
|
||||
* Gets the text for the source map.
|
||||
@@ -372,9 +372,9 @@ namespace ts {
|
||||
* @param tokenStartPos The start pos of the token.
|
||||
* @param emitCallback The callback used to emit the token.
|
||||
*/
|
||||
function emitTokenWithSourceMap(node: Node, token: SyntaxKind, tokenPos: number, emitCallback: (token: SyntaxKind, tokenStartPos: number) => number) {
|
||||
function emitTokenWithSourceMap(node: Node, token: SyntaxKind, writer: (s: string) => void, tokenPos: number, emitCallback: (token: SyntaxKind, writer: (s: string) => void, tokenStartPos: number) => number) {
|
||||
if (disabled) {
|
||||
return emitCallback(token, tokenPos);
|
||||
return emitCallback(token, writer, tokenPos);
|
||||
}
|
||||
|
||||
const emitNode = node && node.emitNode;
|
||||
@@ -386,7 +386,7 @@ namespace ts {
|
||||
emitPos(tokenPos);
|
||||
}
|
||||
|
||||
tokenPos = emitCallback(token, tokenPos);
|
||||
tokenPos = emitCallback(token, writer, tokenPos);
|
||||
|
||||
if (range) tokenPos = range.end;
|
||||
if ((emitFlags & EmitFlags.NoTokenTrailingSourceMaps) === 0 && tokenPos >= 0) {
|
||||
|
||||
+233
-76
@@ -695,7 +695,7 @@ namespace ts {
|
||||
/*@internal*/ autoGenerateKind?: GeneratedIdentifierKind; // Specifies whether to auto-generate the text for an identifier.
|
||||
/*@internal*/ autoGenerateId?: number; // Ensures unique generated identifiers get unique names, but clones get the same name.
|
||||
isInJSDocNamespace?: boolean; // if the node is a member in a JSDoc namespace
|
||||
/*@internal*/ typeArguments?: NodeArray<TypeNode>; // Only defined on synthesized nodes. Though not syntactically valid, used in emitting diagnostics.
|
||||
/*@internal*/ typeArguments?: NodeArray<TypeNode | TypeParameterDeclaration>; // Only defined on synthesized nodes. Though not syntactically valid, used in emitting diagnostics, quickinfo, and signature help.
|
||||
/*@internal*/ jsdocDotPos?: number; // Identifier occurs in JSDoc-style generic: Id.<T>
|
||||
/*@internal*/ skipNameGenerationScope?: boolean; // Should skip a name generation scope when generating the name for this identifier
|
||||
}
|
||||
@@ -783,6 +783,7 @@ namespace ts {
|
||||
typeParameters?: NodeArray<TypeParameterDeclaration>;
|
||||
parameters: NodeArray<ParameterDeclaration>;
|
||||
type: TypeNode | undefined;
|
||||
/* @internal */ typeArguments?: NodeArray<TypeNode>; // Used for quick info, replaces typeParameters for instantiated signatures
|
||||
}
|
||||
|
||||
export type SignatureDeclaration =
|
||||
@@ -966,7 +967,8 @@ namespace ts {
|
||||
| IndexSignatureDeclaration
|
||||
| MethodSignature
|
||||
| ConstructSignatureDeclaration
|
||||
| CallSignatureDeclaration;
|
||||
| CallSignatureDeclaration
|
||||
| JSDocFunctionType;
|
||||
|
||||
export interface FunctionDeclaration extends FunctionLikeDeclarationBase, DeclarationStatement {
|
||||
kind: SyntaxKind.FunctionDeclaration;
|
||||
@@ -2762,6 +2764,16 @@ namespace ts {
|
||||
signatureToSignatureDeclaration(signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): SignatureDeclaration;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
indexInfoToIndexSignatureDeclaration(indexInfo: IndexInfo, kind: IndexKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): IndexSignatureDeclaration;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
symbolToEntityName(symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): EntityName;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
symbolToExpression(symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): Expression;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
symbolToTypeParameterDeclarations(symbol: Symbol, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): NodeArray<TypeParameterDeclaration> | undefined;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
symbolToParameterDeclaration(symbol: Symbol, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): ParameterDeclaration;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
typeParameterToDeclaration(parameter: TypeParameter, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): TypeParameterDeclaration;
|
||||
|
||||
getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[];
|
||||
getSymbolAtLocation(node: Node): Symbol | undefined;
|
||||
@@ -2780,9 +2792,17 @@ namespace ts {
|
||||
getPropertySymbolOfDestructuringAssignment(location: Identifier): Symbol | undefined;
|
||||
getTypeAtLocation(node: Node): Type;
|
||||
getTypeFromTypeNode(node: TypeNode): Type;
|
||||
|
||||
signatureToString(signature: Signature, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind): string;
|
||||
typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string;
|
||||
symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string;
|
||||
symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags): string;
|
||||
typePredicateToString(predicate: TypePredicate, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string;
|
||||
|
||||
/* @internal */ writeSignature(signature: Signature, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind, writer?: EmitTextWriter): string;
|
||||
/* @internal */ writeType(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags, writer?: EmitTextWriter): string;
|
||||
/* @internal */ writeSymbol(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags, writer?: EmitTextWriter): string;
|
||||
/* @internal */ writeTypePredicate(predicate: TypePredicate, enclosingDeclaration?: Node, flags?: TypeFormatFlags, writer?: EmitTextWriter): string;
|
||||
|
||||
/**
|
||||
* @deprecated Use the createX factory functions or XToY typechecker methods and `createPrinter` or the `xToString` methods instead
|
||||
* This will be removed in a future version.
|
||||
@@ -2897,7 +2917,7 @@ namespace ts {
|
||||
* This should be called in a loop climbing parents of the symbol, so we'll get `N`.
|
||||
*/
|
||||
/* @internal */ getAccessibleSymbolChain(symbol: Symbol, enclosingDeclaration: Node | undefined, meaning: SymbolFlags, useOnlyExternalAliasing: boolean): Symbol[] | undefined;
|
||||
|
||||
/* @internal */ getTypePredicateOfSignature(signature: Signature): TypePredicate;
|
||||
/* @internal */ resolveExternalModuleSymbol(symbol: Symbol): Symbol;
|
||||
}
|
||||
|
||||
@@ -2908,30 +2928,98 @@ namespace ts {
|
||||
Subtype
|
||||
}
|
||||
|
||||
export enum NodeBuilderFlags {
|
||||
export const enum NodeBuilderFlags {
|
||||
None = 0,
|
||||
// Options
|
||||
NoTruncation = 1 << 0, // Don't truncate result
|
||||
WriteArrayAsGenericType = 1 << 1, // Write Array<T> instead T[]
|
||||
WriteDefaultSymbolWithoutName = 1 << 2, // Write `default`-named symbols as `default` instead of how they were written
|
||||
// empty space
|
||||
WriteTypeArgumentsOfSignature = 1 << 5, // Write the type arguments instead of type parameters of the signature
|
||||
UseFullyQualifiedType = 1 << 6, // Write out the fully qualified type name (eg. Module.Type, instead of Type)
|
||||
UseOnlyExternalAliasing = 1 << 7, // Only use external aliases for a symbol
|
||||
SuppressAnyReturnType = 1 << 8, // If the return type is any-like, don't offer a return type.
|
||||
WriteTypeParametersInQualifiedName = 1 << 9,
|
||||
MultilineObjectLiterals = 1 << 10, // Always write object literals across multiple lines
|
||||
WriteClassExpressionAsTypeLiteral = 1 << 11, // Write class {} as { new(): {} } - used for mixin declaration emit
|
||||
UseTypeOfFunction = 1 << 12, // Build using typeof instead of function type literal
|
||||
OmitParameterModifiers = 1 << 13, // Omit modifiers on parameters
|
||||
UseAliasDefinedOutsideCurrentScope = 1 << 14, // Allow non-visible aliases
|
||||
|
||||
// Error handling
|
||||
AllowThisInObjectLiteral = 1 << 10,
|
||||
AllowQualifedNameInPlaceOfIdentifier = 1 << 11,
|
||||
AllowAnonymousIdentifier = 1 << 13,
|
||||
AllowEmptyUnionOrIntersection = 1 << 14,
|
||||
AllowEmptyTuple = 1 << 15,
|
||||
AllowThisInObjectLiteral = 1 << 15,
|
||||
AllowQualifedNameInPlaceOfIdentifier = 1 << 16,
|
||||
AllowAnonymousIdentifier = 1 << 17,
|
||||
AllowEmptyUnionOrIntersection = 1 << 18,
|
||||
AllowEmptyTuple = 1 << 19,
|
||||
AllowUniqueESSymbolType = 1 << 20,
|
||||
AllowEmptyIndexInfoType = 1 << 21,
|
||||
|
||||
IgnoreErrors = AllowThisInObjectLiteral | AllowQualifedNameInPlaceOfIdentifier | AllowAnonymousIdentifier | AllowEmptyUnionOrIntersection | AllowEmptyTuple,
|
||||
IgnoreErrors = AllowThisInObjectLiteral | AllowQualifedNameInPlaceOfIdentifier | AllowAnonymousIdentifier | AllowEmptyUnionOrIntersection | AllowEmptyTuple | AllowEmptyIndexInfoType,
|
||||
|
||||
// State
|
||||
InObjectTypeLiteral = 1 << 20,
|
||||
InObjectTypeLiteral = 1 << 22,
|
||||
InTypeAlias = 1 << 23, // Writing type in type alias declaration
|
||||
}
|
||||
|
||||
// Ensure the shared flags between this and `NodeBuilderFlags` stay in alignment
|
||||
export const enum TypeFormatFlags {
|
||||
None = 0,
|
||||
NoTruncation = 1 << 0, // Don't truncate typeToString result
|
||||
WriteArrayAsGenericType = 1 << 1, // Write Array<T> instead T[]
|
||||
WriteDefaultSymbolWithoutName = 1 << 2, // Write all `defaut`-named symbols as `default` instead of their written name
|
||||
// hole because there's a hole in node builder flags
|
||||
WriteTypeArgumentsOfSignature = 1 << 5, // Write the type arguments instead of type parameters of the signature
|
||||
UseFullyQualifiedType = 1 << 6, // Write out the fully qualified type name (eg. Module.Type, instead of Type)
|
||||
// hole because `UseOnlyExternalAliasing` is here in node builder flags, but functions which take old flags use `SymbolFormatFlags` instead
|
||||
SuppressAnyReturnType = 1 << 8, // If the return type is any-like, don't offer a return type.
|
||||
// hole because `WriteTypeParametersInQualifiedName` is here in node builder flags, but functions which take old flags use `SymbolFormatFlags` for this instead
|
||||
MultilineObjectLiterals = 1 << 10, // Always print object literals across multiple lines (only used to map into node builder flags)
|
||||
WriteClassExpressionAsTypeLiteral = 1 << 11, // Write a type literal instead of (Anonymous class)
|
||||
UseTypeOfFunction = 1 << 12, // Write typeof instead of function type literal
|
||||
OmitParameterModifiers = 1 << 13, // Omit modifiers on parameters
|
||||
UseAliasDefinedOutsideCurrentScope = 1 << 14, // For a `type T = ... ` defined in a different file, write `T` instead of its value,
|
||||
// even though `T` can't be accessed in the current scope.
|
||||
|
||||
// Error Handling
|
||||
AllowUniqueESSymbolType = 1 << 20, // This is bit 20 to align with the same bit in `NodeBuilderFlags`
|
||||
|
||||
// TypeFormatFlags exclusive
|
||||
AddUndefined = 1 << 17, // Add undefined to types of initialized, non-optional parameters
|
||||
WriteArrowStyleSignature = 1 << 18, // Write arrow style signature
|
||||
|
||||
// State
|
||||
InArrayType = 1 << 19, // Writing an array element type
|
||||
InElementType = 1 << 21, // Writing an array or union element type
|
||||
InFirstTypeArgument = 1 << 22, // Writing first type argument of the instantiated type
|
||||
InTypeAlias = 1 << 23, // Writing type in type alias declaration
|
||||
|
||||
/** @deprecated */ WriteOwnNameForAnyLike = 0, // Does nothing
|
||||
|
||||
NodeBuilderFlagsMask =
|
||||
NoTruncation | WriteArrayAsGenericType | WriteDefaultSymbolWithoutName | WriteTypeArgumentsOfSignature |
|
||||
UseFullyQualifiedType | SuppressAnyReturnType | MultilineObjectLiterals | WriteClassExpressionAsTypeLiteral |
|
||||
UseTypeOfFunction | OmitParameterModifiers | UseAliasDefinedOutsideCurrentScope | AllowUniqueESSymbolType | InTypeAlias,
|
||||
}
|
||||
|
||||
export const enum SymbolFormatFlags {
|
||||
None = 0x00000000,
|
||||
|
||||
// Write symbols's type argument if it is instantiated symbol
|
||||
// eg. class C<T> { p: T } <-- Show p as C<T>.p here
|
||||
// var a: C<number>;
|
||||
// var p = a.p; <--- Here p is property of C<number> so show it as C<number>.p instead of just C.p
|
||||
WriteTypeParametersOrArguments = 0x00000001,
|
||||
|
||||
// Use only external alias information to get the symbol name in the given context
|
||||
// eg. module m { export class c { } } import x = m.c;
|
||||
// When this flag is specified m.c will be used to refer to the class instead of alias symbol x
|
||||
UseOnlyExternalAliasing = 0x00000002,
|
||||
|
||||
// Build symbol name using any nodes needed, instead of just components of an entity name
|
||||
AllowAnyNodeKind = 0x00000004,
|
||||
}
|
||||
|
||||
/* @internal */
|
||||
export interface SymbolWalker {
|
||||
/** Note: Return values are not ordered. */
|
||||
@@ -2940,21 +3028,27 @@ namespace ts {
|
||||
walkSymbol(root: Symbol): { visitedTypes: ReadonlyArray<Type>, visitedSymbols: ReadonlyArray<Symbol> };
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
export interface SymbolDisplayBuilder {
|
||||
buildTypeDisplay(type: Type, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildSymbolDisplay(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags): void;
|
||||
buildSignatureDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind): void;
|
||||
buildIndexSignatureDisplay(info: IndexInfo, writer: SymbolWriter, kind: IndexKind, enclosingDeclaration?: Node, globalFlags?: TypeFormatFlags, symbolStack?: Symbol[]): void;
|
||||
buildParameterDisplay(parameter: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildTypeParameterDisplay(tp: TypeParameter, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildTypePredicateDisplay(predicate: TypePredicate, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildTypeParameterDisplayFromSymbol(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildDisplayForParametersAndDelimiters(thisParameter: Symbol, parameters: Symbol[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildDisplayForTypeParametersAndDelimiters(typeParameters: TypeParameter[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildReturnTypeDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildTypeDisplay(type: Type, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildSymbolDisplay(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags): void;
|
||||
/** @deprecated */ buildSignatureDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind): void;
|
||||
/** @deprecated */ buildIndexSignatureDisplay(info: IndexInfo, writer: SymbolWriter, kind: IndexKind, enclosingDeclaration?: Node, globalFlags?: TypeFormatFlags, symbolStack?: Symbol[]): void;
|
||||
/** @deprecated */ buildParameterDisplay(parameter: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildTypeParameterDisplay(tp: TypeParameter, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildTypePredicateDisplay(predicate: TypePredicate, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildTypeParameterDisplayFromSymbol(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildDisplayForParametersAndDelimiters(thisParameter: Symbol, parameters: Symbol[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildDisplayForTypeParametersAndDelimiters(typeParameters: TypeParameter[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildReturnTypeDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
}
|
||||
|
||||
export interface SymbolWriter {
|
||||
/**
|
||||
* @deprecated Migrate to other methods of generating symbol names, ex symbolToEntityName + a printer or symbolToString
|
||||
*/
|
||||
export interface SymbolWriter extends SymbolTracker {
|
||||
writeKeyword(text: string): void;
|
||||
writeOperator(text: string): void;
|
||||
writePunctuation(text: string): void;
|
||||
@@ -2967,50 +3061,6 @@ namespace ts {
|
||||
increaseIndent(): void;
|
||||
decreaseIndent(): void;
|
||||
clear(): void;
|
||||
|
||||
// Called when the symbol writer encounters a symbol to write. Currently only used by the
|
||||
// declaration emitter to help determine if it should patch up the final declaration file
|
||||
// with import statements it previously saw (but chose not to emit).
|
||||
trackSymbol(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): void;
|
||||
reportInaccessibleThisError(): void;
|
||||
reportPrivateInBaseOfClassExpression(propertyName: string): void;
|
||||
reportInaccessibleUniqueSymbolError(): void;
|
||||
}
|
||||
|
||||
export const enum TypeFormatFlags {
|
||||
None = 0,
|
||||
WriteArrayAsGenericType = 1 << 0, // Write Array<T> instead T[]
|
||||
UseTypeOfFunction = 1 << 2, // Write typeof instead of function type literal
|
||||
NoTruncation = 1 << 3, // Don't truncate typeToString result
|
||||
WriteArrowStyleSignature = 1 << 4, // Write arrow style signature
|
||||
WriteOwnNameForAnyLike = 1 << 5, // Write symbol's own name instead of 'any' for any like types (eg. unknown, __resolving__ etc)
|
||||
WriteTypeArgumentsOfSignature = 1 << 6, // Write the type arguments instead of type parameters of the signature
|
||||
InElementType = 1 << 7, // Writing an array or union element type
|
||||
UseFullyQualifiedType = 1 << 8, // Write out the fully qualified type name (eg. Module.Type, instead of Type)
|
||||
InFirstTypeArgument = 1 << 9, // Writing first type argument of the instantiated type
|
||||
InTypeAlias = 1 << 10, // Writing type in type alias declaration
|
||||
SuppressAnyReturnType = 1 << 12, // If the return type is any-like, don't offer a return type.
|
||||
AddUndefined = 1 << 13, // Add undefined to types of initialized, non-optional parameters
|
||||
WriteClassExpressionAsTypeLiteral = 1 << 14, // Write a type literal instead of (Anonymous class)
|
||||
InArrayType = 1 << 15, // Writing an array element type
|
||||
UseAliasDefinedOutsideCurrentScope = 1 << 16, // For a `type T = ... ` defined in a different file, write `T` instead of its value,
|
||||
// even though `T` can't be accessed in the current scope.
|
||||
AllowUniqueESSymbolType = 1 << 17,
|
||||
}
|
||||
|
||||
export const enum SymbolFormatFlags {
|
||||
None = 0x00000000,
|
||||
|
||||
// Write symbols's type argument if it is instantiated symbol
|
||||
// eg. class C<T> { p: T } <-- Show p as C<T>.p here
|
||||
// var a: C<number>;
|
||||
// var p = a.p; <--- Here p is property of C<number> so show it as C<number>.p instead of just C.p
|
||||
WriteTypeParametersOrArguments = 0x00000001,
|
||||
|
||||
// Use only external alias information to get the symbol name in the given context
|
||||
// eg. module m { export class c { } } import x = m.c;
|
||||
// When this flag is specified m.c will be used to refer to the class instead of alias symbol x
|
||||
UseOnlyExternalAliasing = 0x00000002,
|
||||
}
|
||||
|
||||
/* @internal */
|
||||
@@ -3102,9 +3152,9 @@ namespace ts {
|
||||
isImplementationOfOverload(node: FunctionLikeDeclaration): boolean | undefined;
|
||||
isRequiredInitializedParameter(node: ParameterDeclaration): boolean;
|
||||
isOptionalUninitializedParameterProperty(node: ParameterDeclaration): boolean;
|
||||
writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void;
|
||||
writeReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void;
|
||||
writeTypeOfExpression(expr: Expression, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void;
|
||||
writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: EmitTextWriter): void;
|
||||
writeReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: EmitTextWriter): void;
|
||||
writeTypeOfExpression(expr: Expression, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: EmitTextWriter): void;
|
||||
isSymbolAccessible(symbol: Symbol, enclosingDeclaration: Node, meaning: SymbolFlags, shouldComputeAliasToMarkVisible: boolean): SymbolAccessibilityResult;
|
||||
isEntityNameVisible(entityName: EntityNameOrEntityNameExpression, enclosingDeclaration: Node): SymbolVisibilityResult;
|
||||
// Returns the constant value this property access resolves to, or 'undefined' for a non-constant
|
||||
@@ -3118,7 +3168,7 @@ namespace ts {
|
||||
getTypeReferenceDirectivesForEntityName(name: EntityNameOrEntityNameExpression): string[];
|
||||
getTypeReferenceDirectivesForSymbol(symbol: Symbol, meaning?: SymbolFlags): string[];
|
||||
isLiteralConstDeclaration(node: VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration): boolean;
|
||||
writeLiteralConstValue(node: VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration, writer: SymbolWriter): void;
|
||||
writeLiteralConstValue(node: VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration, writer: EmitTextWriter): void;
|
||||
getJsxFactoryEntity(): EntityName;
|
||||
}
|
||||
|
||||
@@ -4765,6 +4815,10 @@ namespace ts {
|
||||
* collisions.
|
||||
*/
|
||||
printNode(hint: EmitHint, node: Node, sourceFile: SourceFile): string;
|
||||
/**
|
||||
* Prints a list of nodes using the given format flags
|
||||
*/
|
||||
printList<T extends Node>(format: ListFormat, list: NodeArray<T>, sourceFile: SourceFile): string;
|
||||
/**
|
||||
* Prints a source file as-is, without any emit transformations.
|
||||
*/
|
||||
@@ -4774,6 +4828,7 @@ namespace ts {
|
||||
*/
|
||||
printBundle(bundle: Bundle): string;
|
||||
/*@internal*/ writeNode(hint: EmitHint, node: Node, sourceFile: SourceFile | undefined, writer: EmitTextWriter): void;
|
||||
/*@internal*/ writeList<T extends Node>(format: ListFormat, list: NodeArray<T>, sourceFile: SourceFile | undefined, writer: EmitTextWriter): void;
|
||||
/*@internal*/ writeFile(sourceFile: SourceFile, writer: EmitTextWriter): void;
|
||||
/*@internal*/ writeBundle(bundle: Bundle, writer: EmitTextWriter): void;
|
||||
}
|
||||
@@ -4821,7 +4876,7 @@ namespace ts {
|
||||
*/
|
||||
substituteNode?(hint: EmitHint, node: Node): Node;
|
||||
/*@internal*/ onEmitSourceMapOfNode?: (hint: EmitHint, node: Node, emitCallback: (hint: EmitHint, node: Node) => void) => void;
|
||||
/*@internal*/ onEmitSourceMapOfToken?: (node: Node, token: SyntaxKind, pos: number, emitCallback: (token: SyntaxKind, pos: number) => number) => number;
|
||||
/*@internal*/ onEmitSourceMapOfToken?: (node: Node, token: SyntaxKind, writer: (s: string) => void, pos: number, emitCallback: (token: SyntaxKind, writer: (s: string) => void, pos: number) => number) => number;
|
||||
/*@internal*/ onEmitSourceMapOfPosition?: (pos: number) => void;
|
||||
/*@internal*/ onEmitHelpers?: (node: Node, writeLines: (text: string) => void) => void;
|
||||
/*@internal*/ onSetSourceFile?: (node: SourceFile) => void;
|
||||
@@ -4834,13 +4889,14 @@ namespace ts {
|
||||
export interface PrinterOptions {
|
||||
removeComments?: boolean;
|
||||
newLine?: NewLineKind;
|
||||
omitTrailingSemicolon?: boolean;
|
||||
/*@internal*/ sourceMap?: boolean;
|
||||
/*@internal*/ inlineSourceMap?: boolean;
|
||||
/*@internal*/ extendedDiagnostics?: boolean;
|
||||
}
|
||||
|
||||
/*@internal*/
|
||||
export interface EmitTextWriter {
|
||||
/* @internal */
|
||||
export interface EmitTextWriter extends SymbolTracker, SymbolWriter {
|
||||
write(s: string): void;
|
||||
writeTextOfNode(text: string, node: Node): void;
|
||||
writeLine(): void;
|
||||
@@ -4854,7 +4910,26 @@ namespace ts {
|
||||
getColumn(): number;
|
||||
getIndent(): number;
|
||||
isAtStartOfLine(): boolean;
|
||||
reset(): void;
|
||||
clear(): void;
|
||||
|
||||
writeKeyword(text: string): void;
|
||||
writeOperator(text: string): void;
|
||||
writePunctuation(text: string): void;
|
||||
writeSpace(text: string): void;
|
||||
writeStringLiteral(text: string): void;
|
||||
writeParameter(text: string): void;
|
||||
writeProperty(text: string): void;
|
||||
writeSymbol(text: string, symbol: Symbol): void;
|
||||
}
|
||||
|
||||
export interface SymbolTracker {
|
||||
// Called when the symbol writer encounters a symbol to write. Currently only used by the
|
||||
// declaration emitter to help determine if it should patch up the final declaration file
|
||||
// with import statements it previously saw (but chose not to emit).
|
||||
trackSymbol?(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): void;
|
||||
reportInaccessibleThisError?(): void;
|
||||
reportPrivateInBaseOfClassExpression?(propertyName: string): void;
|
||||
reportInaccessibleUniqueSymbolError?(): void;
|
||||
}
|
||||
|
||||
export interface TextSpan {
|
||||
@@ -4893,4 +4968,86 @@ namespace ts {
|
||||
export interface SyntaxList extends Node {
|
||||
_children: Node[];
|
||||
}
|
||||
|
||||
export const enum ListFormat {
|
||||
None = 0,
|
||||
|
||||
// Line separators
|
||||
SingleLine = 0, // Prints the list on a single line (default).
|
||||
MultiLine = 1 << 0, // Prints the list on multiple lines.
|
||||
PreserveLines = 1 << 1, // Prints the list using line preservation if possible.
|
||||
LinesMask = SingleLine | MultiLine | PreserveLines,
|
||||
|
||||
// Delimiters
|
||||
NotDelimited = 0, // There is no delimiter between list items (default).
|
||||
BarDelimited = 1 << 2, // Each list item is space-and-bar (" |") delimited.
|
||||
AmpersandDelimited = 1 << 3, // Each list item is space-and-ampersand (" &") delimited.
|
||||
CommaDelimited = 1 << 4, // Each list item is comma (",") delimited.
|
||||
DelimitersMask = BarDelimited | AmpersandDelimited | CommaDelimited,
|
||||
|
||||
AllowTrailingComma = 1 << 5, // Write a trailing comma (",") if present.
|
||||
|
||||
// Whitespace
|
||||
Indented = 1 << 6, // The list should be indented.
|
||||
SpaceBetweenBraces = 1 << 7, // Inserts a space after the opening brace and before the closing brace.
|
||||
SpaceBetweenSiblings = 1 << 8, // Inserts a space between each sibling node.
|
||||
|
||||
// Brackets/Braces
|
||||
Braces = 1 << 9, // The list is surrounded by "{" and "}".
|
||||
Parenthesis = 1 << 10, // The list is surrounded by "(" and ")".
|
||||
AngleBrackets = 1 << 11, // The list is surrounded by "<" and ">".
|
||||
SquareBrackets = 1 << 12, // The list is surrounded by "[" and "]".
|
||||
BracketsMask = Braces | Parenthesis | AngleBrackets | SquareBrackets,
|
||||
|
||||
OptionalIfUndefined = 1 << 13, // Do not emit brackets if the list is undefined.
|
||||
OptionalIfEmpty = 1 << 14, // Do not emit brackets if the list is empty.
|
||||
Optional = OptionalIfUndefined | OptionalIfEmpty,
|
||||
|
||||
// Other
|
||||
PreferNewLine = 1 << 15, // Prefer adding a LineTerminator between synthesized nodes.
|
||||
NoTrailingNewLine = 1 << 16, // Do not emit a trailing NewLine for a MultiLine list.
|
||||
NoInterveningComments = 1 << 17, // Do not emit comments between each node
|
||||
|
||||
NoSpaceIfEmpty = 1 << 18, // If the literal is empty, do not add spaces between braces.
|
||||
SingleElement = 1 << 19,
|
||||
|
||||
// Precomputed Formats
|
||||
Modifiers = SingleLine | SpaceBetweenSiblings | NoInterveningComments,
|
||||
HeritageClauses = SingleLine | SpaceBetweenSiblings,
|
||||
SingleLineTypeLiteralMembers = SingleLine | SpaceBetweenBraces | SpaceBetweenSiblings | Indented,
|
||||
MultiLineTypeLiteralMembers = MultiLine | Indented,
|
||||
|
||||
TupleTypeElements = CommaDelimited | SpaceBetweenSiblings | SingleLine | Indented,
|
||||
UnionTypeConstituents = BarDelimited | SpaceBetweenSiblings | SingleLine,
|
||||
IntersectionTypeConstituents = AmpersandDelimited | SpaceBetweenSiblings | SingleLine,
|
||||
ObjectBindingPatternElements = SingleLine | AllowTrailingComma | SpaceBetweenBraces | CommaDelimited | SpaceBetweenSiblings | NoSpaceIfEmpty,
|
||||
ArrayBindingPatternElements = SingleLine | AllowTrailingComma | CommaDelimited | SpaceBetweenSiblings | NoSpaceIfEmpty,
|
||||
ObjectLiteralExpressionProperties = PreserveLines | CommaDelimited | SpaceBetweenSiblings | SpaceBetweenBraces | Indented | Braces | NoSpaceIfEmpty,
|
||||
ArrayLiteralExpressionElements = PreserveLines | CommaDelimited | SpaceBetweenSiblings | AllowTrailingComma | Indented | SquareBrackets,
|
||||
CommaListElements = CommaDelimited | SpaceBetweenSiblings | SingleLine,
|
||||
CallExpressionArguments = CommaDelimited | SpaceBetweenSiblings | SingleLine | Parenthesis,
|
||||
NewExpressionArguments = CommaDelimited | SpaceBetweenSiblings | SingleLine | Parenthesis | OptionalIfUndefined,
|
||||
TemplateExpressionSpans = SingleLine | NoInterveningComments,
|
||||
SingleLineBlockStatements = SpaceBetweenBraces | SpaceBetweenSiblings | SingleLine,
|
||||
MultiLineBlockStatements = Indented | MultiLine,
|
||||
VariableDeclarationList = CommaDelimited | SpaceBetweenSiblings | SingleLine,
|
||||
SingleLineFunctionBodyStatements = SingleLine | SpaceBetweenSiblings | SpaceBetweenBraces,
|
||||
MultiLineFunctionBodyStatements = MultiLine,
|
||||
ClassHeritageClauses = SingleLine | SpaceBetweenSiblings,
|
||||
ClassMembers = Indented | MultiLine,
|
||||
InterfaceMembers = Indented | MultiLine,
|
||||
EnumMembers = CommaDelimited | Indented | MultiLine,
|
||||
CaseBlockClauses = Indented | MultiLine,
|
||||
NamedImportsOrExportsElements = CommaDelimited | SpaceBetweenSiblings | AllowTrailingComma | SingleLine | SpaceBetweenBraces,
|
||||
JsxElementOrFragmentChildren = SingleLine | NoInterveningComments,
|
||||
JsxElementAttributes = SingleLine | SpaceBetweenSiblings | NoInterveningComments,
|
||||
CaseOrDefaultClauseStatements = Indented | MultiLine | NoTrailingNewLine | OptionalIfEmpty,
|
||||
HeritageClauseTypes = CommaDelimited | SpaceBetweenSiblings | SingleLine,
|
||||
SourceFileStatements = MultiLine | NoTrailingNewLine,
|
||||
Decorators = MultiLine | Optional,
|
||||
TypeArguments = CommaDelimited | SpaceBetweenSiblings | SingleLine | AngleBrackets | Optional,
|
||||
TypeParameters = CommaDelimited | SpaceBetweenSiblings | SingleLine | AngleBrackets | Optional,
|
||||
Parameters = CommaDelimited | SpaceBetweenSiblings | SingleLine | Parenthesis,
|
||||
IndexSignatureParameters = CommaDelimited | SpaceBetweenSiblings | SingleLine | Indented | SquareBrackets,
|
||||
}
|
||||
}
|
||||
|
||||
+27
-10
@@ -29,26 +29,31 @@ namespace ts {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
export interface StringSymbolWriter extends SymbolWriter {
|
||||
string(): string;
|
||||
}
|
||||
|
||||
const stringWriter = createSingleLineStringWriter();
|
||||
|
||||
function createSingleLineStringWriter(): StringSymbolWriter {
|
||||
function createSingleLineStringWriter(): EmitTextWriter {
|
||||
let str = "";
|
||||
|
||||
const writeText: (text: string) => void = text => str += text;
|
||||
return {
|
||||
string: () => str,
|
||||
getText: () => str,
|
||||
write: writeText,
|
||||
rawWrite: writeText,
|
||||
writeTextOfNode: writeText,
|
||||
writeKeyword: writeText,
|
||||
writeOperator: writeText,
|
||||
writePunctuation: writeText,
|
||||
writeSpace: writeText,
|
||||
writeStringLiteral: writeText,
|
||||
writeLiteral: writeText,
|
||||
writeParameter: writeText,
|
||||
writeProperty: writeText,
|
||||
writeSymbol: writeText,
|
||||
getTextPos: () => str.length,
|
||||
getLine: () => 0,
|
||||
getColumn: () => 0,
|
||||
getIndent: () => 0,
|
||||
isAtStartOfLine: () => false,
|
||||
|
||||
// Completely ignore indentation for string writers. And map newlines to
|
||||
// a single space.
|
||||
@@ -63,11 +68,11 @@ namespace ts {
|
||||
};
|
||||
}
|
||||
|
||||
export function usingSingleLineStringWriter(action: (writer: StringSymbolWriter) => void): string {
|
||||
const oldString = stringWriter.string();
|
||||
export function usingSingleLineStringWriter(action: (writer: EmitTextWriter) => void): string {
|
||||
const oldString = stringWriter.getText();
|
||||
try {
|
||||
action(stringWriter);
|
||||
return stringWriter.string();
|
||||
return stringWriter.getText();
|
||||
}
|
||||
finally {
|
||||
stringWriter.clear();
|
||||
@@ -2606,7 +2611,19 @@ namespace ts {
|
||||
getColumn: () => lineStart ? indent * getIndentSize() + 1 : output.length - linePos + 1,
|
||||
getText: () => output,
|
||||
isAtStartOfLine: () => lineStart,
|
||||
reset
|
||||
clear: reset,
|
||||
reportInaccessibleThisError: noop,
|
||||
reportPrivateInBaseOfClassExpression: noop,
|
||||
reportInaccessibleUniqueSymbolError: noop,
|
||||
trackSymbol: noop,
|
||||
writeKeyword: write,
|
||||
writeOperator: write,
|
||||
writeParameter: write,
|
||||
writeProperty: write,
|
||||
writePunctuation: write,
|
||||
writeSpace: write,
|
||||
writeStringLiteral: write,
|
||||
writeSymbol: write
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
/// <reference path="utilities.ts" />
|
||||
|
||||
namespace ts {
|
||||
const isTypeNodeOrTypeParameterDeclaration = or(isTypeNode, isTypeParameterDeclaration);
|
||||
|
||||
/**
|
||||
* Visits a Node using the supplied visitor, possibly returning a new Node in its place.
|
||||
*
|
||||
@@ -222,7 +224,7 @@ namespace ts {
|
||||
// Names
|
||||
|
||||
case SyntaxKind.Identifier:
|
||||
return updateIdentifier(<Identifier>node, nodesVisitor((<Identifier>node).typeArguments, visitor, isTypeNode));
|
||||
return updateIdentifier(<Identifier>node, nodesVisitor((<Identifier>node).typeArguments, visitor, isTypeNodeOrTypeParameterDeclaration));
|
||||
|
||||
case SyntaxKind.QualifiedName:
|
||||
return updateQualifiedName(<QualifiedName>node,
|
||||
|
||||
@@ -229,13 +229,13 @@ namespace ts.codefix {
|
||||
}
|
||||
}
|
||||
|
||||
function getTypeAccessiblityWriter(checker: TypeChecker): StringSymbolWriter {
|
||||
function getTypeAccessiblityWriter(checker: TypeChecker): EmitTextWriter {
|
||||
let str = "";
|
||||
let typeIsAccessible = true;
|
||||
|
||||
const writeText: (text: string) => void = text => str += text;
|
||||
return {
|
||||
string: () => typeIsAccessible ? str : undefined,
|
||||
getText: () => typeIsAccessible ? str : undefined,
|
||||
writeKeyword: writeText,
|
||||
writeOperator: writeText,
|
||||
writePunctuation: writeText,
|
||||
@@ -244,6 +244,15 @@ namespace ts.codefix {
|
||||
writeParameter: writeText,
|
||||
writeProperty: writeText,
|
||||
writeSymbol: writeText,
|
||||
write: writeText,
|
||||
writeTextOfNode: writeText,
|
||||
rawWrite: writeText,
|
||||
writeLiteral: writeText,
|
||||
getTextPos: () => 0,
|
||||
getLine: () => 0,
|
||||
getColumn: () => 0,
|
||||
getIndent: () => 0,
|
||||
isAtStartOfLine: () => false,
|
||||
writeLine: () => writeText(" "),
|
||||
increaseIndent: noop,
|
||||
decreaseIndent: noop,
|
||||
@@ -261,8 +270,8 @@ namespace ts.codefix {
|
||||
|
||||
function typeToString(type: Type, enclosingDeclaration: Declaration, checker: TypeChecker): string {
|
||||
const writer = getTypeAccessiblityWriter(checker);
|
||||
checker.getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration);
|
||||
return writer.string();
|
||||
checker.writeType(type, enclosingDeclaration, /*flags*/ undefined, writer);
|
||||
return writer.getText();
|
||||
}
|
||||
|
||||
namespace InferFromReference {
|
||||
|
||||
@@ -883,7 +883,8 @@ namespace ts {
|
||||
scriptKind: ScriptKind;
|
||||
}
|
||||
|
||||
export interface DisplayPartsSymbolWriter extends SymbolWriter {
|
||||
/* @internal */
|
||||
export interface DisplayPartsSymbolWriter extends EmitTextWriter {
|
||||
displayParts(): SymbolDisplayPart[];
|
||||
}
|
||||
|
||||
|
||||
@@ -360,6 +360,7 @@ namespace ts.SignatureHelp {
|
||||
const callTarget = getInvokedExpression(invocation);
|
||||
const callTargetSymbol = typeChecker.getSymbolAtLocation(callTarget);
|
||||
const callTargetDisplayParts = callTargetSymbol && symbolToDisplayParts(typeChecker, callTargetSymbol, /*enclosingDeclaration*/ undefined, /*meaning*/ undefined);
|
||||
const printer = createPrinter({ removeComments: true });
|
||||
const items: SignatureHelpItem[] = map(candidates, candidateSignature => {
|
||||
let signatureHelpParameters: SignatureHelpParameter[];
|
||||
const prefixDisplayParts: SymbolDisplayPart[] = [];
|
||||
@@ -376,14 +377,22 @@ namespace ts.SignatureHelp {
|
||||
const typeParameters = (candidateSignature.target || candidateSignature).typeParameters;
|
||||
signatureHelpParameters = typeParameters && typeParameters.length > 0 ? map(typeParameters, createSignatureHelpParameterForTypeParameter) : emptyArray;
|
||||
suffixDisplayParts.push(punctuationPart(SyntaxKind.GreaterThanToken));
|
||||
const parameterParts = mapToDisplayParts(writer =>
|
||||
typeChecker.getSymbolDisplayBuilder().buildDisplayForParametersAndDelimiters(candidateSignature.thisParameter, candidateSignature.parameters, writer, invocation));
|
||||
const parameterParts = mapToDisplayParts(writer => {
|
||||
const flags = NodeBuilderFlags.OmitParameterModifiers | NodeBuilderFlags.IgnoreErrors;
|
||||
const thisParameter = candidateSignature.thisParameter ? [typeChecker.symbolToParameterDeclaration(candidateSignature.thisParameter, invocation, flags)] : [];
|
||||
const params = createNodeArray([...thisParameter, ...map(candidateSignature.parameters, param => typeChecker.symbolToParameterDeclaration(param, invocation, flags))]);
|
||||
printer.writeList(ListFormat.CallExpressionArguments, params, getSourceFileOfNode(getParseTreeNode(invocation)), writer);
|
||||
});
|
||||
addRange(suffixDisplayParts, parameterParts);
|
||||
}
|
||||
else {
|
||||
isVariadic = candidateSignature.hasRestParameter;
|
||||
const typeParameterParts = mapToDisplayParts(writer =>
|
||||
typeChecker.getSymbolDisplayBuilder().buildDisplayForTypeParametersAndDelimiters(candidateSignature.typeParameters, writer, invocation));
|
||||
const typeParameterParts = mapToDisplayParts(writer => {
|
||||
if (candidateSignature.typeParameters && candidateSignature.typeParameters.length) {
|
||||
const args = createNodeArray(map(candidateSignature.typeParameters, p => typeChecker.typeParameterToDeclaration(p, invocation)));
|
||||
printer.writeList(ListFormat.TypeParameters, args, getSourceFileOfNode(getParseTreeNode(invocation)), writer);
|
||||
}
|
||||
});
|
||||
addRange(prefixDisplayParts, typeParameterParts);
|
||||
prefixDisplayParts.push(punctuationPart(SyntaxKind.OpenParenToken));
|
||||
|
||||
@@ -391,8 +400,17 @@ namespace ts.SignatureHelp {
|
||||
suffixDisplayParts.push(punctuationPart(SyntaxKind.CloseParenToken));
|
||||
}
|
||||
|
||||
const returnTypeParts = mapToDisplayParts(writer =>
|
||||
typeChecker.getSymbolDisplayBuilder().buildReturnTypeDisplay(candidateSignature, writer, invocation));
|
||||
const returnTypeParts = mapToDisplayParts(writer => {
|
||||
writer.writePunctuation(":");
|
||||
writer.writeSpace(" ");
|
||||
const predicate = typeChecker.getTypePredicateOfSignature(candidateSignature);
|
||||
if (predicate) {
|
||||
typeChecker.writeTypePredicate(predicate, invocation, /*flags*/ undefined, writer);
|
||||
}
|
||||
else {
|
||||
typeChecker.writeType(typeChecker.getReturnTypeOfSignature(candidateSignature), invocation, /*flags*/ undefined, writer);
|
||||
}
|
||||
});
|
||||
addRange(suffixDisplayParts, returnTypeParts);
|
||||
|
||||
return {
|
||||
@@ -416,8 +434,10 @@ namespace ts.SignatureHelp {
|
||||
return { items, applicableSpan, selectedItemIndex, argumentIndex, argumentCount };
|
||||
|
||||
function createSignatureHelpParameterForParameter(parameter: Symbol): SignatureHelpParameter {
|
||||
const displayParts = mapToDisplayParts(writer =>
|
||||
typeChecker.getSymbolDisplayBuilder().buildParameterDisplay(parameter, writer, invocation));
|
||||
const displayParts = mapToDisplayParts(writer => {
|
||||
const param = typeChecker.symbolToParameterDeclaration(parameter, invocation, NodeBuilderFlags.OmitParameterModifiers | NodeBuilderFlags.IgnoreErrors);
|
||||
printer.writeNode(EmitHint.Unspecified, param, getSourceFileOfNode(getParseTreeNode(invocation)), writer);
|
||||
});
|
||||
|
||||
return {
|
||||
name: parameter.name,
|
||||
@@ -428,8 +448,10 @@ namespace ts.SignatureHelp {
|
||||
}
|
||||
|
||||
function createSignatureHelpParameterForTypeParameter(typeParameter: TypeParameter): SignatureHelpParameter {
|
||||
const displayParts = mapToDisplayParts(writer =>
|
||||
typeChecker.getSymbolDisplayBuilder().buildTypeParameterDisplay(typeParameter, writer, invocation));
|
||||
const displayParts = mapToDisplayParts(writer => {
|
||||
const param = typeChecker.typeParameterToDeclaration(typeParameter, invocation);
|
||||
printer.writeNode(EmitHint.Unspecified, param, getSourceFileOfNode(getParseTreeNode(invocation)), writer);
|
||||
});
|
||||
|
||||
return {
|
||||
name: typeParameter.symbol.name,
|
||||
|
||||
@@ -120,6 +120,7 @@ namespace ts.SymbolDisplay {
|
||||
let hasAddedSymbolInfo: boolean;
|
||||
const isThisExpression = location.kind === SyntaxKind.ThisKeyword && isExpression(location);
|
||||
let type: Type;
|
||||
let printer: Printer;
|
||||
let documentationFromAlias: SymbolDisplayPart[];
|
||||
|
||||
// Class at constructor site need to be shown as constructor apart from property,method, vars
|
||||
@@ -198,7 +199,7 @@ namespace ts.SymbolDisplay {
|
||||
displayParts.push(punctuationPart(SyntaxKind.ColonToken));
|
||||
displayParts.push(spacePart());
|
||||
if (!(type.flags & TypeFlags.Object && (<ObjectType>type).objectFlags & ObjectFlags.Anonymous) && type.symbol) {
|
||||
addRange(displayParts, symbolToDisplayParts(typeChecker, type.symbol, enclosingDeclaration, /*meaning*/ undefined, SymbolFormatFlags.WriteTypeParametersOrArguments));
|
||||
addRange(displayParts, symbolToDisplayParts(typeChecker, type.symbol, enclosingDeclaration, /*meaning*/ undefined, SymbolFormatFlags.AllowAnyNodeKind | SymbolFormatFlags.WriteTypeParametersOrArguments));
|
||||
displayParts.push(lineBreakPart());
|
||||
}
|
||||
if (useConstructSignatures) {
|
||||
@@ -450,7 +451,8 @@ namespace ts.SymbolDisplay {
|
||||
// If the type is type parameter, format it specially
|
||||
if (type.symbol && type.symbol.flags & SymbolFlags.TypeParameter) {
|
||||
const typeParameterParts = mapToDisplayParts(writer => {
|
||||
typeChecker.getSymbolDisplayBuilder().buildTypeParameterDisplay(<TypeParameter>type, writer, enclosingDeclaration);
|
||||
const param = typeChecker.typeParameterToDeclaration(type as TypeParameter, enclosingDeclaration);
|
||||
getPrinter().writeNode(EmitHint.Unspecified, param, getSourceFileOfNode(getParseTreeNode(enclosingDeclaration)), writer);
|
||||
});
|
||||
addRange(displayParts, typeParameterParts);
|
||||
}
|
||||
@@ -510,6 +512,13 @@ namespace ts.SymbolDisplay {
|
||||
|
||||
return { displayParts, documentation, symbolKind, tags };
|
||||
|
||||
function getPrinter() {
|
||||
if (!printer) {
|
||||
printer = createPrinter({ removeComments: true });
|
||||
}
|
||||
return printer;
|
||||
}
|
||||
|
||||
function prefixNextMeaning() {
|
||||
if (displayParts.length) {
|
||||
displayParts.push(lineBreakPart());
|
||||
@@ -535,7 +544,7 @@ namespace ts.SymbolDisplay {
|
||||
symbolToDisplay = alias;
|
||||
}
|
||||
const fullSymbolDisplayParts = symbolToDisplayParts(typeChecker, symbolToDisplay, enclosingDeclaration || sourceFile, /*meaning*/ undefined,
|
||||
SymbolFormatFlags.WriteTypeParametersOrArguments | SymbolFormatFlags.UseOnlyExternalAliasing);
|
||||
SymbolFormatFlags.WriteTypeParametersOrArguments | SymbolFormatFlags.UseOnlyExternalAliasing | SymbolFormatFlags.AllowAnyNodeKind);
|
||||
addRange(displayParts, fullSymbolDisplayParts);
|
||||
}
|
||||
|
||||
@@ -584,7 +593,8 @@ namespace ts.SymbolDisplay {
|
||||
|
||||
function writeTypeParametersOfSymbol(symbol: Symbol, enclosingDeclaration: Node) {
|
||||
const typeParameterParts = mapToDisplayParts(writer => {
|
||||
typeChecker.getSymbolDisplayBuilder().buildTypeParameterDisplayFromSymbol(symbol, writer, enclosingDeclaration);
|
||||
const params = typeChecker.symbolToTypeParameterDeclarations(symbol, enclosingDeclaration);
|
||||
getPrinter().writeList(ListFormat.TypeParameters, params, getSourceFileOfNode(getParseTreeNode(enclosingDeclaration)), writer);
|
||||
});
|
||||
addRange(displayParts, typeParameterParts);
|
||||
}
|
||||
|
||||
@@ -810,6 +810,38 @@ namespace ts.textChanges {
|
||||
this.writer.write(s);
|
||||
this.setLastNonTriviaPosition(s, /*force*/ false);
|
||||
}
|
||||
writeKeyword(s: string): void {
|
||||
this.writer.writeKeyword(s);
|
||||
this.setLastNonTriviaPosition(s, /*force*/ false);
|
||||
}
|
||||
writeOperator(s: string): void {
|
||||
this.writer.writeOperator(s);
|
||||
this.setLastNonTriviaPosition(s, /*force*/ false);
|
||||
}
|
||||
writePunctuation(s: string): void {
|
||||
this.writer.writePunctuation(s);
|
||||
this.setLastNonTriviaPosition(s, /*force*/ false);
|
||||
}
|
||||
writeParameter(s: string): void {
|
||||
this.writer.writeParameter(s);
|
||||
this.setLastNonTriviaPosition(s, /*force*/ false);
|
||||
}
|
||||
writeProperty(s: string): void {
|
||||
this.writer.writeProperty(s);
|
||||
this.setLastNonTriviaPosition(s, /*force*/ false);
|
||||
}
|
||||
writeSpace(s: string): void {
|
||||
this.writer.writeSpace(s);
|
||||
this.setLastNonTriviaPosition(s, /*force*/ false);
|
||||
}
|
||||
writeStringLiteral(s: string): void {
|
||||
this.writer.writeStringLiteral(s);
|
||||
this.setLastNonTriviaPosition(s, /*force*/ false);
|
||||
}
|
||||
writeSymbol(s: string, sym: Symbol): void {
|
||||
this.writer.writeSymbol(s, sym);
|
||||
this.setLastNonTriviaPosition(s, /*force*/ false);
|
||||
}
|
||||
writeTextOfNode(text: string, node: Node): void {
|
||||
this.writer.writeTextOfNode(text, node);
|
||||
}
|
||||
@@ -848,8 +880,8 @@ namespace ts.textChanges {
|
||||
isAtStartOfLine(): boolean {
|
||||
return this.writer.isAtStartOfLine();
|
||||
}
|
||||
reset(): void {
|
||||
this.writer.reset();
|
||||
clear(): void {
|
||||
this.writer.clear();
|
||||
this.lastNonTriviaPosition = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1127,6 +1127,7 @@ namespace ts {
|
||||
let indent: number;
|
||||
|
||||
resetWriter();
|
||||
const unknownWrite = (text: string) => writeKind(text, SymbolDisplayPartKind.text);
|
||||
return {
|
||||
displayParts: () => displayParts,
|
||||
writeKeyword: text => writeKind(text, SymbolDisplayPartKind.keyword),
|
||||
@@ -1136,8 +1137,18 @@ namespace ts {
|
||||
writeStringLiteral: text => writeKind(text, SymbolDisplayPartKind.stringLiteral),
|
||||
writeParameter: text => writeKind(text, SymbolDisplayPartKind.parameterName),
|
||||
writeProperty: text => writeKind(text, SymbolDisplayPartKind.propertyName),
|
||||
writeLiteral: text => writeKind(text, SymbolDisplayPartKind.stringLiteral),
|
||||
writeSymbol,
|
||||
writeLine,
|
||||
write: unknownWrite,
|
||||
writeTextOfNode: unknownWrite,
|
||||
getText: () => "",
|
||||
getTextPos: () => 0,
|
||||
getColumn: () => 0,
|
||||
getLine: () => 0,
|
||||
isAtStartOfLine: () => false,
|
||||
rawWrite: notImplemented,
|
||||
getIndent: () => indent,
|
||||
increaseIndent: () => { indent++; },
|
||||
decreaseIndent: () => { indent--; },
|
||||
clear: resetWriter,
|
||||
@@ -1249,6 +1260,7 @@ namespace ts {
|
||||
return displayPart("\n", SymbolDisplayPartKind.lineBreak);
|
||||
}
|
||||
|
||||
/* @internal */
|
||||
export function mapToDisplayParts(writeDisplayParts: (writer: DisplayPartsSymbolWriter) => void): SymbolDisplayPart[] {
|
||||
try {
|
||||
writeDisplayParts(displayPartWriter);
|
||||
@@ -1261,20 +1273,20 @@ namespace ts {
|
||||
|
||||
export function typeToDisplayParts(typechecker: TypeChecker, type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): SymbolDisplayPart[] {
|
||||
return mapToDisplayParts(writer => {
|
||||
typechecker.getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
|
||||
typechecker.writeType(type, enclosingDeclaration, flags | TypeFormatFlags.MultilineObjectLiterals, writer);
|
||||
});
|
||||
}
|
||||
|
||||
export function symbolToDisplayParts(typeChecker: TypeChecker, symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags): SymbolDisplayPart[] {
|
||||
return mapToDisplayParts(writer => {
|
||||
typeChecker.getSymbolDisplayBuilder().buildSymbolDisplay(symbol, writer, enclosingDeclaration, meaning, flags);
|
||||
typeChecker.writeSymbol(symbol, enclosingDeclaration, meaning, flags, writer);
|
||||
});
|
||||
}
|
||||
|
||||
export function signatureToDisplayParts(typechecker: TypeChecker, signature: Signature, enclosingDeclaration?: Node, flags?: TypeFormatFlags): SymbolDisplayPart[] {
|
||||
flags |= TypeFormatFlags.UseAliasDefinedOutsideCurrentScope;
|
||||
flags |= TypeFormatFlags.UseAliasDefinedOutsideCurrentScope | TypeFormatFlags.MultilineObjectLiterals | TypeFormatFlags.WriteTypeArgumentsOfSignature | TypeFormatFlags.OmitParameterModifiers;
|
||||
return mapToDisplayParts(writer => {
|
||||
typechecker.getSymbolDisplayBuilder().buildSignatureDisplay(signature, writer, enclosingDeclaration, flags);
|
||||
typechecker.writeSignature(signature, enclosingDeclaration, flags, /*signatureKind*/ undefined, writer);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
+154
-54
@@ -639,7 +639,7 @@ declare namespace ts {
|
||||
body?: Block | Expression;
|
||||
}
|
||||
type FunctionLikeDeclaration = FunctionDeclaration | MethodDeclaration | ConstructorDeclaration | GetAccessorDeclaration | SetAccessorDeclaration | FunctionExpression | ArrowFunction;
|
||||
type FunctionLike = FunctionLikeDeclaration | FunctionTypeNode | ConstructorTypeNode | IndexSignatureDeclaration | MethodSignature | ConstructSignatureDeclaration | CallSignatureDeclaration;
|
||||
type FunctionLike = FunctionLikeDeclaration | FunctionTypeNode | ConstructorTypeNode | IndexSignatureDeclaration | MethodSignature | ConstructSignatureDeclaration | CallSignatureDeclaration | JSDocFunctionType;
|
||||
interface FunctionDeclaration extends FunctionLikeDeclarationBase, DeclarationStatement {
|
||||
kind: SyntaxKind.FunctionDeclaration;
|
||||
name?: Identifier;
|
||||
@@ -1729,6 +1729,16 @@ declare namespace ts {
|
||||
signatureToSignatureDeclaration(signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): SignatureDeclaration;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
indexInfoToIndexSignatureDeclaration(indexInfo: IndexInfo, kind: IndexKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): IndexSignatureDeclaration;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
symbolToEntityName(symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): EntityName;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
symbolToExpression(symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): Expression;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
symbolToTypeParameterDeclarations(symbol: Symbol, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): NodeArray<TypeParameterDeclaration> | undefined;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
symbolToParameterDeclaration(symbol: Symbol, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): ParameterDeclaration;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
typeParameterToDeclaration(parameter: TypeParameter, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): TypeParameterDeclaration;
|
||||
getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[];
|
||||
getSymbolAtLocation(node: Node): Symbol | undefined;
|
||||
getSymbolsOfParameterPropertyDeclaration(parameter: ParameterDeclaration, parameterName: string): Symbol[];
|
||||
@@ -1748,7 +1758,8 @@ declare namespace ts {
|
||||
getTypeFromTypeNode(node: TypeNode): Type;
|
||||
signatureToString(signature: Signature, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind): string;
|
||||
typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string;
|
||||
symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string;
|
||||
symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags): string;
|
||||
typePredicateToString(predicate: TypePredicate, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string;
|
||||
/**
|
||||
* @deprecated Use the createX factory functions or XToY typechecker methods and `createPrinter` or the `xToString` methods instead
|
||||
* This will be removed in a future version.
|
||||
@@ -1788,33 +1799,77 @@ declare namespace ts {
|
||||
None = 0,
|
||||
NoTruncation = 1,
|
||||
WriteArrayAsGenericType = 2,
|
||||
WriteDefaultSymbolWithoutName = 4,
|
||||
WriteTypeArgumentsOfSignature = 32,
|
||||
UseFullyQualifiedType = 64,
|
||||
UseOnlyExternalAliasing = 128,
|
||||
SuppressAnyReturnType = 256,
|
||||
WriteTypeParametersInQualifiedName = 512,
|
||||
MultilineObjectLiterals = 1024,
|
||||
WriteClassExpressionAsTypeLiteral = 2048,
|
||||
UseTypeOfFunction = 4096,
|
||||
OmitParameterModifiers = 8192,
|
||||
UseAliasDefinedOutsideCurrentScope = 16384,
|
||||
AllowThisInObjectLiteral = 32768,
|
||||
AllowQualifedNameInPlaceOfIdentifier = 65536,
|
||||
AllowAnonymousIdentifier = 131072,
|
||||
AllowEmptyUnionOrIntersection = 262144,
|
||||
AllowEmptyTuple = 524288,
|
||||
AllowUniqueESSymbolType = 1048576,
|
||||
AllowEmptyIndexInfoType = 2097152,
|
||||
IgnoreErrors = 3112960,
|
||||
InObjectTypeLiteral = 4194304,
|
||||
InTypeAlias = 8388608,
|
||||
}
|
||||
enum TypeFormatFlags {
|
||||
None = 0,
|
||||
NoTruncation = 1,
|
||||
WriteArrayAsGenericType = 2,
|
||||
WriteDefaultSymbolWithoutName = 4,
|
||||
WriteTypeArgumentsOfSignature = 32,
|
||||
UseFullyQualifiedType = 64,
|
||||
SuppressAnyReturnType = 256,
|
||||
WriteTypeParametersInQualifiedName = 512,
|
||||
AllowThisInObjectLiteral = 1024,
|
||||
AllowQualifedNameInPlaceOfIdentifier = 2048,
|
||||
AllowAnonymousIdentifier = 8192,
|
||||
AllowEmptyUnionOrIntersection = 16384,
|
||||
AllowEmptyTuple = 32768,
|
||||
IgnoreErrors = 60416,
|
||||
InObjectTypeLiteral = 1048576,
|
||||
MultilineObjectLiterals = 1024,
|
||||
WriteClassExpressionAsTypeLiteral = 2048,
|
||||
UseTypeOfFunction = 4096,
|
||||
OmitParameterModifiers = 8192,
|
||||
UseAliasDefinedOutsideCurrentScope = 16384,
|
||||
AllowUniqueESSymbolType = 1048576,
|
||||
AddUndefined = 131072,
|
||||
WriteArrowStyleSignature = 262144,
|
||||
InArrayType = 524288,
|
||||
InElementType = 2097152,
|
||||
InFirstTypeArgument = 4194304,
|
||||
InTypeAlias = 8388608,
|
||||
/** @deprecated */ WriteOwnNameForAnyLike = 0,
|
||||
NodeBuilderFlagsMask = 9469287,
|
||||
}
|
||||
enum SymbolFormatFlags {
|
||||
None = 0,
|
||||
WriteTypeParametersOrArguments = 1,
|
||||
UseOnlyExternalAliasing = 2,
|
||||
AllowAnyNodeKind = 4,
|
||||
}
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
interface SymbolDisplayBuilder {
|
||||
buildTypeDisplay(type: Type, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildSymbolDisplay(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags): void;
|
||||
buildSignatureDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind): void;
|
||||
buildIndexSignatureDisplay(info: IndexInfo, writer: SymbolWriter, kind: IndexKind, enclosingDeclaration?: Node, globalFlags?: TypeFormatFlags, symbolStack?: Symbol[]): void;
|
||||
buildParameterDisplay(parameter: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildTypeParameterDisplay(tp: TypeParameter, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildTypePredicateDisplay(predicate: TypePredicate, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildTypeParameterDisplayFromSymbol(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildDisplayForParametersAndDelimiters(thisParameter: Symbol, parameters: Symbol[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildDisplayForTypeParametersAndDelimiters(typeParameters: TypeParameter[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildReturnTypeDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildTypeDisplay(type: Type, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildSymbolDisplay(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags): void;
|
||||
/** @deprecated */ buildSignatureDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind): void;
|
||||
/** @deprecated */ buildIndexSignatureDisplay(info: IndexInfo, writer: SymbolWriter, kind: IndexKind, enclosingDeclaration?: Node, globalFlags?: TypeFormatFlags, symbolStack?: Symbol[]): void;
|
||||
/** @deprecated */ buildParameterDisplay(parameter: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildTypeParameterDisplay(tp: TypeParameter, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildTypePredicateDisplay(predicate: TypePredicate, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildTypeParameterDisplayFromSymbol(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildDisplayForParametersAndDelimiters(thisParameter: Symbol, parameters: Symbol[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildDisplayForTypeParametersAndDelimiters(typeParameters: TypeParameter[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildReturnTypeDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
}
|
||||
interface SymbolWriter {
|
||||
/**
|
||||
* @deprecated Migrate to other methods of generating symbol names, ex symbolToEntityName + a printer or symbolToString
|
||||
*/
|
||||
interface SymbolWriter extends SymbolTracker {
|
||||
writeKeyword(text: string): void;
|
||||
writeOperator(text: string): void;
|
||||
writePunctuation(text: string): void;
|
||||
@@ -1827,34 +1882,6 @@ declare namespace ts {
|
||||
increaseIndent(): void;
|
||||
decreaseIndent(): void;
|
||||
clear(): void;
|
||||
trackSymbol(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): void;
|
||||
reportInaccessibleThisError(): void;
|
||||
reportPrivateInBaseOfClassExpression(propertyName: string): void;
|
||||
reportInaccessibleUniqueSymbolError(): void;
|
||||
}
|
||||
enum TypeFormatFlags {
|
||||
None = 0,
|
||||
WriteArrayAsGenericType = 1,
|
||||
UseTypeOfFunction = 4,
|
||||
NoTruncation = 8,
|
||||
WriteArrowStyleSignature = 16,
|
||||
WriteOwnNameForAnyLike = 32,
|
||||
WriteTypeArgumentsOfSignature = 64,
|
||||
InElementType = 128,
|
||||
UseFullyQualifiedType = 256,
|
||||
InFirstTypeArgument = 512,
|
||||
InTypeAlias = 1024,
|
||||
SuppressAnyReturnType = 4096,
|
||||
AddUndefined = 8192,
|
||||
WriteClassExpressionAsTypeLiteral = 16384,
|
||||
InArrayType = 32768,
|
||||
UseAliasDefinedOutsideCurrentScope = 65536,
|
||||
AllowUniqueESSymbolType = 131072,
|
||||
}
|
||||
enum SymbolFormatFlags {
|
||||
None = 0,
|
||||
WriteTypeParametersOrArguments = 1,
|
||||
UseOnlyExternalAliasing = 2,
|
||||
}
|
||||
enum TypePredicateKind {
|
||||
This = 0,
|
||||
@@ -2634,6 +2661,10 @@ declare namespace ts {
|
||||
* collisions.
|
||||
*/
|
||||
printNode(hint: EmitHint, node: Node, sourceFile: SourceFile): string;
|
||||
/**
|
||||
* Prints a list of nodes using the given format flags
|
||||
*/
|
||||
printList<T extends Node>(format: ListFormat, list: NodeArray<T>, sourceFile: SourceFile): string;
|
||||
/**
|
||||
* Prints a source file as-is, without any emit transformations.
|
||||
*/
|
||||
@@ -2689,6 +2720,13 @@ declare namespace ts {
|
||||
interface PrinterOptions {
|
||||
removeComments?: boolean;
|
||||
newLine?: NewLineKind;
|
||||
omitTrailingSemicolon?: boolean;
|
||||
}
|
||||
interface SymbolTracker {
|
||||
trackSymbol?(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): void;
|
||||
reportInaccessibleThisError?(): void;
|
||||
reportPrivateInBaseOfClassExpression?(propertyName: string): void;
|
||||
reportInaccessibleUniqueSymbolError?(): void;
|
||||
}
|
||||
interface TextSpan {
|
||||
start: number;
|
||||
@@ -2701,6 +2739,71 @@ declare namespace ts {
|
||||
interface SyntaxList extends Node {
|
||||
_children: Node[];
|
||||
}
|
||||
enum ListFormat {
|
||||
None = 0,
|
||||
SingleLine = 0,
|
||||
MultiLine = 1,
|
||||
PreserveLines = 2,
|
||||
LinesMask = 3,
|
||||
NotDelimited = 0,
|
||||
BarDelimited = 4,
|
||||
AmpersandDelimited = 8,
|
||||
CommaDelimited = 16,
|
||||
DelimitersMask = 28,
|
||||
AllowTrailingComma = 32,
|
||||
Indented = 64,
|
||||
SpaceBetweenBraces = 128,
|
||||
SpaceBetweenSiblings = 256,
|
||||
Braces = 512,
|
||||
Parenthesis = 1024,
|
||||
AngleBrackets = 2048,
|
||||
SquareBrackets = 4096,
|
||||
BracketsMask = 7680,
|
||||
OptionalIfUndefined = 8192,
|
||||
OptionalIfEmpty = 16384,
|
||||
Optional = 24576,
|
||||
PreferNewLine = 32768,
|
||||
NoTrailingNewLine = 65536,
|
||||
NoInterveningComments = 131072,
|
||||
NoSpaceIfEmpty = 262144,
|
||||
SingleElement = 524288,
|
||||
Modifiers = 131328,
|
||||
HeritageClauses = 256,
|
||||
SingleLineTypeLiteralMembers = 448,
|
||||
MultiLineTypeLiteralMembers = 65,
|
||||
TupleTypeElements = 336,
|
||||
UnionTypeConstituents = 260,
|
||||
IntersectionTypeConstituents = 264,
|
||||
ObjectBindingPatternElements = 262576,
|
||||
ArrayBindingPatternElements = 262448,
|
||||
ObjectLiteralExpressionProperties = 263122,
|
||||
ArrayLiteralExpressionElements = 4466,
|
||||
CommaListElements = 272,
|
||||
CallExpressionArguments = 1296,
|
||||
NewExpressionArguments = 9488,
|
||||
TemplateExpressionSpans = 131072,
|
||||
SingleLineBlockStatements = 384,
|
||||
MultiLineBlockStatements = 65,
|
||||
VariableDeclarationList = 272,
|
||||
SingleLineFunctionBodyStatements = 384,
|
||||
MultiLineFunctionBodyStatements = 1,
|
||||
ClassHeritageClauses = 256,
|
||||
ClassMembers = 65,
|
||||
InterfaceMembers = 65,
|
||||
EnumMembers = 81,
|
||||
CaseBlockClauses = 65,
|
||||
NamedImportsOrExportsElements = 432,
|
||||
JsxElementOrFragmentChildren = 131072,
|
||||
JsxElementAttributes = 131328,
|
||||
CaseOrDefaultClauseStatements = 81985,
|
||||
HeritageClauseTypes = 272,
|
||||
SourceFileStatements = 65537,
|
||||
Decorators = 24577,
|
||||
TypeArguments = 26896,
|
||||
TypeParameters = 26896,
|
||||
Parameters = 1296,
|
||||
IndexSignatureParameters = 4432,
|
||||
}
|
||||
}
|
||||
declare namespace ts {
|
||||
const versionMajorMinor = "2.7";
|
||||
@@ -3296,7 +3399,7 @@ declare namespace ts {
|
||||
function createLiteral(value: string | number | boolean): PrimaryExpression;
|
||||
function createNumericLiteral(value: string): NumericLiteral;
|
||||
function createIdentifier(text: string): Identifier;
|
||||
function updateIdentifier(node: Identifier, typeArguments: NodeArray<TypeNode> | undefined): Identifier;
|
||||
function updateIdentifier(node: Identifier): Identifier;
|
||||
/** Create a unique temporary variable. */
|
||||
function createTempVariable(recordTempVariable: ((node: Identifier) => void) | undefined): Identifier;
|
||||
/** Create a unique temporary variable for use in a loop. */
|
||||
@@ -4661,9 +4764,6 @@ declare namespace ts {
|
||||
declare namespace ts {
|
||||
/** The version of the language service API */
|
||||
const servicesVersion = "0.7";
|
||||
interface DisplayPartsSymbolWriter extends SymbolWriter {
|
||||
displayParts(): SymbolDisplayPart[];
|
||||
}
|
||||
function toEditorSettings(options: EditorOptions | EditorSettings): EditorSettings;
|
||||
function displayPartsToString(displayParts: SymbolDisplayPart[]): string;
|
||||
function getDefaultCompilerOptions(): CompilerOptions;
|
||||
|
||||
+154
-54
@@ -639,7 +639,7 @@ declare namespace ts {
|
||||
body?: Block | Expression;
|
||||
}
|
||||
type FunctionLikeDeclaration = FunctionDeclaration | MethodDeclaration | ConstructorDeclaration | GetAccessorDeclaration | SetAccessorDeclaration | FunctionExpression | ArrowFunction;
|
||||
type FunctionLike = FunctionLikeDeclaration | FunctionTypeNode | ConstructorTypeNode | IndexSignatureDeclaration | MethodSignature | ConstructSignatureDeclaration | CallSignatureDeclaration;
|
||||
type FunctionLike = FunctionLikeDeclaration | FunctionTypeNode | ConstructorTypeNode | IndexSignatureDeclaration | MethodSignature | ConstructSignatureDeclaration | CallSignatureDeclaration | JSDocFunctionType;
|
||||
interface FunctionDeclaration extends FunctionLikeDeclarationBase, DeclarationStatement {
|
||||
kind: SyntaxKind.FunctionDeclaration;
|
||||
name?: Identifier;
|
||||
@@ -1729,6 +1729,16 @@ declare namespace ts {
|
||||
signatureToSignatureDeclaration(signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): SignatureDeclaration;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
indexInfoToIndexSignatureDeclaration(indexInfo: IndexInfo, kind: IndexKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): IndexSignatureDeclaration;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
symbolToEntityName(symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): EntityName;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
symbolToExpression(symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): Expression;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
symbolToTypeParameterDeclarations(symbol: Symbol, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): NodeArray<TypeParameterDeclaration> | undefined;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
symbolToParameterDeclaration(symbol: Symbol, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): ParameterDeclaration;
|
||||
/** Note that the resulting nodes cannot be checked. */
|
||||
typeParameterToDeclaration(parameter: TypeParameter, enclosingDeclaration?: Node, flags?: NodeBuilderFlags): TypeParameterDeclaration;
|
||||
getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[];
|
||||
getSymbolAtLocation(node: Node): Symbol | undefined;
|
||||
getSymbolsOfParameterPropertyDeclaration(parameter: ParameterDeclaration, parameterName: string): Symbol[];
|
||||
@@ -1748,7 +1758,8 @@ declare namespace ts {
|
||||
getTypeFromTypeNode(node: TypeNode): Type;
|
||||
signatureToString(signature: Signature, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind): string;
|
||||
typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string;
|
||||
symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string;
|
||||
symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags): string;
|
||||
typePredicateToString(predicate: TypePredicate, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string;
|
||||
/**
|
||||
* @deprecated Use the createX factory functions or XToY typechecker methods and `createPrinter` or the `xToString` methods instead
|
||||
* This will be removed in a future version.
|
||||
@@ -1788,33 +1799,77 @@ declare namespace ts {
|
||||
None = 0,
|
||||
NoTruncation = 1,
|
||||
WriteArrayAsGenericType = 2,
|
||||
WriteDefaultSymbolWithoutName = 4,
|
||||
WriteTypeArgumentsOfSignature = 32,
|
||||
UseFullyQualifiedType = 64,
|
||||
UseOnlyExternalAliasing = 128,
|
||||
SuppressAnyReturnType = 256,
|
||||
WriteTypeParametersInQualifiedName = 512,
|
||||
MultilineObjectLiterals = 1024,
|
||||
WriteClassExpressionAsTypeLiteral = 2048,
|
||||
UseTypeOfFunction = 4096,
|
||||
OmitParameterModifiers = 8192,
|
||||
UseAliasDefinedOutsideCurrentScope = 16384,
|
||||
AllowThisInObjectLiteral = 32768,
|
||||
AllowQualifedNameInPlaceOfIdentifier = 65536,
|
||||
AllowAnonymousIdentifier = 131072,
|
||||
AllowEmptyUnionOrIntersection = 262144,
|
||||
AllowEmptyTuple = 524288,
|
||||
AllowUniqueESSymbolType = 1048576,
|
||||
AllowEmptyIndexInfoType = 2097152,
|
||||
IgnoreErrors = 3112960,
|
||||
InObjectTypeLiteral = 4194304,
|
||||
InTypeAlias = 8388608,
|
||||
}
|
||||
enum TypeFormatFlags {
|
||||
None = 0,
|
||||
NoTruncation = 1,
|
||||
WriteArrayAsGenericType = 2,
|
||||
WriteDefaultSymbolWithoutName = 4,
|
||||
WriteTypeArgumentsOfSignature = 32,
|
||||
UseFullyQualifiedType = 64,
|
||||
SuppressAnyReturnType = 256,
|
||||
WriteTypeParametersInQualifiedName = 512,
|
||||
AllowThisInObjectLiteral = 1024,
|
||||
AllowQualifedNameInPlaceOfIdentifier = 2048,
|
||||
AllowAnonymousIdentifier = 8192,
|
||||
AllowEmptyUnionOrIntersection = 16384,
|
||||
AllowEmptyTuple = 32768,
|
||||
IgnoreErrors = 60416,
|
||||
InObjectTypeLiteral = 1048576,
|
||||
MultilineObjectLiterals = 1024,
|
||||
WriteClassExpressionAsTypeLiteral = 2048,
|
||||
UseTypeOfFunction = 4096,
|
||||
OmitParameterModifiers = 8192,
|
||||
UseAliasDefinedOutsideCurrentScope = 16384,
|
||||
AllowUniqueESSymbolType = 1048576,
|
||||
AddUndefined = 131072,
|
||||
WriteArrowStyleSignature = 262144,
|
||||
InArrayType = 524288,
|
||||
InElementType = 2097152,
|
||||
InFirstTypeArgument = 4194304,
|
||||
InTypeAlias = 8388608,
|
||||
/** @deprecated */ WriteOwnNameForAnyLike = 0,
|
||||
NodeBuilderFlagsMask = 9469287,
|
||||
}
|
||||
enum SymbolFormatFlags {
|
||||
None = 0,
|
||||
WriteTypeParametersOrArguments = 1,
|
||||
UseOnlyExternalAliasing = 2,
|
||||
AllowAnyNodeKind = 4,
|
||||
}
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
interface SymbolDisplayBuilder {
|
||||
buildTypeDisplay(type: Type, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildSymbolDisplay(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags): void;
|
||||
buildSignatureDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind): void;
|
||||
buildIndexSignatureDisplay(info: IndexInfo, writer: SymbolWriter, kind: IndexKind, enclosingDeclaration?: Node, globalFlags?: TypeFormatFlags, symbolStack?: Symbol[]): void;
|
||||
buildParameterDisplay(parameter: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildTypeParameterDisplay(tp: TypeParameter, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildTypePredicateDisplay(predicate: TypePredicate, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildTypeParameterDisplayFromSymbol(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildDisplayForParametersAndDelimiters(thisParameter: Symbol, parameters: Symbol[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildDisplayForTypeParametersAndDelimiters(typeParameters: TypeParameter[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
buildReturnTypeDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildTypeDisplay(type: Type, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildSymbolDisplay(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags?: SymbolFormatFlags): void;
|
||||
/** @deprecated */ buildSignatureDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags, kind?: SignatureKind): void;
|
||||
/** @deprecated */ buildIndexSignatureDisplay(info: IndexInfo, writer: SymbolWriter, kind: IndexKind, enclosingDeclaration?: Node, globalFlags?: TypeFormatFlags, symbolStack?: Symbol[]): void;
|
||||
/** @deprecated */ buildParameterDisplay(parameter: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildTypeParameterDisplay(tp: TypeParameter, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildTypePredicateDisplay(predicate: TypePredicate, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildTypeParameterDisplayFromSymbol(symbol: Symbol, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildDisplayForParametersAndDelimiters(thisParameter: Symbol, parameters: Symbol[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildDisplayForTypeParametersAndDelimiters(typeParameters: TypeParameter[], writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
/** @deprecated */ buildReturnTypeDisplay(signature: Signature, writer: SymbolWriter, enclosingDeclaration?: Node, flags?: TypeFormatFlags): void;
|
||||
}
|
||||
interface SymbolWriter {
|
||||
/**
|
||||
* @deprecated Migrate to other methods of generating symbol names, ex symbolToEntityName + a printer or symbolToString
|
||||
*/
|
||||
interface SymbolWriter extends SymbolTracker {
|
||||
writeKeyword(text: string): void;
|
||||
writeOperator(text: string): void;
|
||||
writePunctuation(text: string): void;
|
||||
@@ -1827,34 +1882,6 @@ declare namespace ts {
|
||||
increaseIndent(): void;
|
||||
decreaseIndent(): void;
|
||||
clear(): void;
|
||||
trackSymbol(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): void;
|
||||
reportInaccessibleThisError(): void;
|
||||
reportPrivateInBaseOfClassExpression(propertyName: string): void;
|
||||
reportInaccessibleUniqueSymbolError(): void;
|
||||
}
|
||||
enum TypeFormatFlags {
|
||||
None = 0,
|
||||
WriteArrayAsGenericType = 1,
|
||||
UseTypeOfFunction = 4,
|
||||
NoTruncation = 8,
|
||||
WriteArrowStyleSignature = 16,
|
||||
WriteOwnNameForAnyLike = 32,
|
||||
WriteTypeArgumentsOfSignature = 64,
|
||||
InElementType = 128,
|
||||
UseFullyQualifiedType = 256,
|
||||
InFirstTypeArgument = 512,
|
||||
InTypeAlias = 1024,
|
||||
SuppressAnyReturnType = 4096,
|
||||
AddUndefined = 8192,
|
||||
WriteClassExpressionAsTypeLiteral = 16384,
|
||||
InArrayType = 32768,
|
||||
UseAliasDefinedOutsideCurrentScope = 65536,
|
||||
AllowUniqueESSymbolType = 131072,
|
||||
}
|
||||
enum SymbolFormatFlags {
|
||||
None = 0,
|
||||
WriteTypeParametersOrArguments = 1,
|
||||
UseOnlyExternalAliasing = 2,
|
||||
}
|
||||
enum TypePredicateKind {
|
||||
This = 0,
|
||||
@@ -2634,6 +2661,10 @@ declare namespace ts {
|
||||
* collisions.
|
||||
*/
|
||||
printNode(hint: EmitHint, node: Node, sourceFile: SourceFile): string;
|
||||
/**
|
||||
* Prints a list of nodes using the given format flags
|
||||
*/
|
||||
printList<T extends Node>(format: ListFormat, list: NodeArray<T>, sourceFile: SourceFile): string;
|
||||
/**
|
||||
* Prints a source file as-is, without any emit transformations.
|
||||
*/
|
||||
@@ -2689,6 +2720,13 @@ declare namespace ts {
|
||||
interface PrinterOptions {
|
||||
removeComments?: boolean;
|
||||
newLine?: NewLineKind;
|
||||
omitTrailingSemicolon?: boolean;
|
||||
}
|
||||
interface SymbolTracker {
|
||||
trackSymbol?(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): void;
|
||||
reportInaccessibleThisError?(): void;
|
||||
reportPrivateInBaseOfClassExpression?(propertyName: string): void;
|
||||
reportInaccessibleUniqueSymbolError?(): void;
|
||||
}
|
||||
interface TextSpan {
|
||||
start: number;
|
||||
@@ -2701,6 +2739,71 @@ declare namespace ts {
|
||||
interface SyntaxList extends Node {
|
||||
_children: Node[];
|
||||
}
|
||||
enum ListFormat {
|
||||
None = 0,
|
||||
SingleLine = 0,
|
||||
MultiLine = 1,
|
||||
PreserveLines = 2,
|
||||
LinesMask = 3,
|
||||
NotDelimited = 0,
|
||||
BarDelimited = 4,
|
||||
AmpersandDelimited = 8,
|
||||
CommaDelimited = 16,
|
||||
DelimitersMask = 28,
|
||||
AllowTrailingComma = 32,
|
||||
Indented = 64,
|
||||
SpaceBetweenBraces = 128,
|
||||
SpaceBetweenSiblings = 256,
|
||||
Braces = 512,
|
||||
Parenthesis = 1024,
|
||||
AngleBrackets = 2048,
|
||||
SquareBrackets = 4096,
|
||||
BracketsMask = 7680,
|
||||
OptionalIfUndefined = 8192,
|
||||
OptionalIfEmpty = 16384,
|
||||
Optional = 24576,
|
||||
PreferNewLine = 32768,
|
||||
NoTrailingNewLine = 65536,
|
||||
NoInterveningComments = 131072,
|
||||
NoSpaceIfEmpty = 262144,
|
||||
SingleElement = 524288,
|
||||
Modifiers = 131328,
|
||||
HeritageClauses = 256,
|
||||
SingleLineTypeLiteralMembers = 448,
|
||||
MultiLineTypeLiteralMembers = 65,
|
||||
TupleTypeElements = 336,
|
||||
UnionTypeConstituents = 260,
|
||||
IntersectionTypeConstituents = 264,
|
||||
ObjectBindingPatternElements = 262576,
|
||||
ArrayBindingPatternElements = 262448,
|
||||
ObjectLiteralExpressionProperties = 263122,
|
||||
ArrayLiteralExpressionElements = 4466,
|
||||
CommaListElements = 272,
|
||||
CallExpressionArguments = 1296,
|
||||
NewExpressionArguments = 9488,
|
||||
TemplateExpressionSpans = 131072,
|
||||
SingleLineBlockStatements = 384,
|
||||
MultiLineBlockStatements = 65,
|
||||
VariableDeclarationList = 272,
|
||||
SingleLineFunctionBodyStatements = 384,
|
||||
MultiLineFunctionBodyStatements = 1,
|
||||
ClassHeritageClauses = 256,
|
||||
ClassMembers = 65,
|
||||
InterfaceMembers = 65,
|
||||
EnumMembers = 81,
|
||||
CaseBlockClauses = 65,
|
||||
NamedImportsOrExportsElements = 432,
|
||||
JsxElementOrFragmentChildren = 131072,
|
||||
JsxElementAttributes = 131328,
|
||||
CaseOrDefaultClauseStatements = 81985,
|
||||
HeritageClauseTypes = 272,
|
||||
SourceFileStatements = 65537,
|
||||
Decorators = 24577,
|
||||
TypeArguments = 26896,
|
||||
TypeParameters = 26896,
|
||||
Parameters = 1296,
|
||||
IndexSignatureParameters = 4432,
|
||||
}
|
||||
}
|
||||
declare namespace ts {
|
||||
const versionMajorMinor = "2.7";
|
||||
@@ -3243,7 +3346,7 @@ declare namespace ts {
|
||||
function createLiteral(value: string | number | boolean): PrimaryExpression;
|
||||
function createNumericLiteral(value: string): NumericLiteral;
|
||||
function createIdentifier(text: string): Identifier;
|
||||
function updateIdentifier(node: Identifier, typeArguments: NodeArray<TypeNode> | undefined): Identifier;
|
||||
function updateIdentifier(node: Identifier): Identifier;
|
||||
/** Create a unique temporary variable. */
|
||||
function createTempVariable(recordTempVariable: ((node: Identifier) => void) | undefined): Identifier;
|
||||
/** Create a unique temporary variable for use in a loop. */
|
||||
@@ -4661,9 +4764,6 @@ declare namespace ts {
|
||||
declare namespace ts {
|
||||
/** The version of the language service API */
|
||||
const servicesVersion = "0.7";
|
||||
interface DisplayPartsSymbolWriter extends SymbolWriter {
|
||||
displayParts(): SymbolDisplayPart[];
|
||||
}
|
||||
function toEditorSettings(options: EditorOptions | EditorSettings): EditorSettings;
|
||||
function displayPartsToString(displayParts: SymbolDisplayPart[]): string;
|
||||
function getDefaultCompilerOptions(): CompilerOptions;
|
||||
|
||||
@@ -11,10 +11,10 @@ b
|
||||
|
||||
//// [commentOnParameter1.js]
|
||||
function commentedParameters(
|
||||
/* Parameter a */
|
||||
a
|
||||
/* End of parameter a */
|
||||
/* Parameter b */
|
||||
, b
|
||||
/* End of parameter b */
|
||||
/* Parameter a */
|
||||
a
|
||||
/* End of parameter a */
|
||||
/* Parameter b */
|
||||
, b
|
||||
/* End of parameter b */
|
||||
) { }
|
||||
|
||||
@@ -10,9 +10,9 @@ b
|
||||
|
||||
//// [commentOnParameter2.js]
|
||||
function commentedParameters(
|
||||
/* Parameter a */
|
||||
a /* End of parameter a */
|
||||
/* Parameter b */
|
||||
, b
|
||||
/* End of parameter b */
|
||||
/* Parameter a */
|
||||
a /* End of parameter a */
|
||||
/* Parameter b */
|
||||
, b
|
||||
/* End of parameter b */
|
||||
) { }
|
||||
|
||||
@@ -61,8 +61,8 @@ function foo() {
|
||||
foo();
|
||||
/** This is comment for function signature*/
|
||||
function fooWithParameters(/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
} // trailing comment of function
|
||||
fooWithParameters("a", 10);
|
||||
@@ -78,7 +78,7 @@ var lambddaNoVarComment = function (/**param a*/ a, /**param b*/ b) { return a *
|
||||
lambdaFoo(10, 20);
|
||||
lambddaNoVarComment(10, 20);
|
||||
function blah(a /* multiline trailing comment
|
||||
multiline */) {
|
||||
multiline */) {
|
||||
}
|
||||
function blah2(a /* single line multiple trailing comments */ /* second */) {
|
||||
}
|
||||
|
||||
@@ -109,8 +109,8 @@ exports.SimpleConstructor = SimpleConstructor;
|
||||
var ConstructorWithParameters = /** @class */ (function () {
|
||||
/** This is comment for function signature*/
|
||||
function ConstructorWithParameters(/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
}
|
||||
return ConstructorWithParameters;
|
||||
@@ -172,8 +172,8 @@ var GlobalSimpleConstructor = /** @class */ (function () {
|
||||
var GlobalConstructorWithParameters = /** @class */ (function () {
|
||||
/** This is comment for function signature*/
|
||||
function GlobalConstructorWithParameters(/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
}
|
||||
return GlobalConstructorWithParameters;
|
||||
|
||||
@@ -85,8 +85,8 @@ function foo() {
|
||||
exports.foo = foo;
|
||||
/** This is comment for function signature*/
|
||||
function fooWithParameters(/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
}
|
||||
exports.fooWithParameters = fooWithParameters;
|
||||
@@ -131,8 +131,8 @@ function nonExportedFoo() {
|
||||
}
|
||||
/** This is comment for function signature*/
|
||||
function nonExportedFooWithParameters(/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
}
|
||||
function nonExportedFooWithRestParameters(a) {
|
||||
@@ -151,8 +151,8 @@ function globalfoo() {
|
||||
}
|
||||
/** This is comment for function signature*/
|
||||
function globalfooWithParameters(/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
}
|
||||
function globalfooWithRestParameters(a) {
|
||||
|
||||
@@ -200,8 +200,8 @@ var c1 = /** @class */ (function () {
|
||||
};
|
||||
/** This is comment for function signature*/
|
||||
c1.prototype.fooWithParameters = function (/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
};
|
||||
c1.prototype.fooWithRestParameters = function (a) {
|
||||
@@ -219,8 +219,8 @@ var c1 = /** @class */ (function () {
|
||||
};
|
||||
/** This is comment for function signature*/
|
||||
c1.prototype.privateFooWithParameters = function (/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
};
|
||||
c1.prototype.privateFooWithRestParameters = function (a) {
|
||||
@@ -238,8 +238,8 @@ var c1 = /** @class */ (function () {
|
||||
};
|
||||
/** This is comment for function signature*/
|
||||
c1.staticFooWithParameters = function (/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
};
|
||||
c1.staticFooWithRestParameters = function (a) {
|
||||
@@ -257,8 +257,8 @@ var c1 = /** @class */ (function () {
|
||||
};
|
||||
/** This is comment for function signature*/
|
||||
c1.privateStaticFooWithParameters = function (/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
};
|
||||
c1.privateStaticFooWithRestParameters = function (a) {
|
||||
@@ -283,8 +283,8 @@ var c2 = /** @class */ (function () {
|
||||
};
|
||||
/** This is comment for function signature*/
|
||||
c2.prototype.fooWithParameters = function (/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
};
|
||||
c2.prototype.fooWithRestParameters = function (a) {
|
||||
@@ -302,8 +302,8 @@ var c2 = /** @class */ (function () {
|
||||
};
|
||||
/** This is comment for function signature*/
|
||||
c2.prototype.privateFooWithParameters = function (/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
};
|
||||
c2.prototype.privateFooWithRestParameters = function (a) {
|
||||
@@ -321,8 +321,8 @@ var c2 = /** @class */ (function () {
|
||||
};
|
||||
/** This is comment for function signature*/
|
||||
c2.staticFooWithParameters = function (/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
};
|
||||
c2.staticFooWithRestParameters = function (a) {
|
||||
@@ -340,8 +340,8 @@ var c2 = /** @class */ (function () {
|
||||
};
|
||||
/** This is comment for function signature*/
|
||||
c2.privateStaticFooWithParameters = function (/** this is comment about a*/ a,
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
/** this is comment for b*/
|
||||
b) {
|
||||
var d = a;
|
||||
};
|
||||
c2.privateStaticFooWithRestParameters = function (a) {
|
||||
|
||||
@@ -18,7 +18,7 @@ function f(_a, _b, _c) {
|
||||
|
||||
|
||||
//// [declarationEmitBindingPatterns.d.ts]
|
||||
declare const k: ({x: z}: {
|
||||
declare const k: ({ x: z }: {
|
||||
x?: string;
|
||||
}) => void;
|
||||
declare var a: any;
|
||||
|
||||
@@ -26,18 +26,18 @@ declare function f({x, y: [a, b, c, d]}?: {
|
||||
}): void;
|
||||
declare function g([a, b, c, d]?: [number, number, number, number]): void;
|
||||
declare function h([a, [b], [[c]], {x, y: [a, b, c], z: {a1, b1}}]: [any, [any], [[any]], {
|
||||
x?: number;
|
||||
y: [any, any, any];
|
||||
z: {
|
||||
a1: any;
|
||||
b1: any;
|
||||
};
|
||||
}]): void;
|
||||
x?: number;
|
||||
y: [any, any, any];
|
||||
z: {
|
||||
a1: any;
|
||||
b1: any;
|
||||
};
|
||||
}]): void;
|
||||
declare function h1([a, [b], [[c]], {x, y, z: {a1, b1}}]: [any, [any], [[any]], {
|
||||
x?: number;
|
||||
y?: number[];
|
||||
z: {
|
||||
a1: any;
|
||||
b1: any;
|
||||
};
|
||||
}]): void;
|
||||
x?: number;
|
||||
y?: number[];
|
||||
z: {
|
||||
a1: any;
|
||||
b1: any;
|
||||
};
|
||||
}]): void;
|
||||
|
||||
@@ -21,5 +21,5 @@ var utilityFunctions = {
|
||||
//// [declarationEmitIndexTypeArray.d.ts]
|
||||
declare function doSomethingWithKeys<T>(...keys: (keyof T)[]): void;
|
||||
declare const utilityFunctions: {
|
||||
doSomethingWithKeys: <T>(...keys: (keyof T)[]) => void;
|
||||
doSomethingWithKeys: typeof doSomethingWithKeys;
|
||||
};
|
||||
|
||||
@@ -7,7 +7,7 @@ import * as a from "./a";
|
||||
>a : Symbol(a, Decl(b.ts, 0, 6))
|
||||
|
||||
export default a.default;
|
||||
>a.default : Symbol(a.default, Decl(a.ts, 0, 0))
|
||||
>a.default : Symbol(a.C, Decl(a.ts, 0, 0))
|
||||
>a : Symbol(a, Decl(b.ts, 0, 6))
|
||||
>default : Symbol(a.default, Decl(a.ts, 0, 0))
|
||||
>default : Symbol(a.C, Decl(a.ts, 0, 0))
|
||||
|
||||
|
||||
@@ -54,9 +54,7 @@ declare type T2 = ObjectHasKey<{
|
||||
declare function f1<A extends string, B extends string>(a: A, b: B): {
|
||||
[P in A | B]: any;
|
||||
};
|
||||
declare function f2<A extends string>(a: A): {
|
||||
[P in A | "x"]: any;
|
||||
};
|
||||
declare function f2<A extends string>(a: A): { [P in A | "x"]: any; };
|
||||
declare function f3(x: 'a' | 'b'): {
|
||||
a: any;
|
||||
b: any;
|
||||
|
||||
@@ -17,7 +17,7 @@ type StringContains<S extends string, L extends string> = (
|
||||
>L : L
|
||||
|
||||
type ObjectHasKey<O, L extends string> = StringContains<keyof O, L>
|
||||
>ObjectHasKey : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>O : O
|
||||
>L : L
|
||||
>StringContains : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L]
|
||||
@@ -25,19 +25,19 @@ type ObjectHasKey<O, L extends string> = StringContains<keyof O, L>
|
||||
>L : L
|
||||
|
||||
type First<T> = ObjectHasKey<T, '0'>; // Should be deferred
|
||||
>First : ({ [K in S]: "true"; } & { [key: string]: "false"; })["0"]
|
||||
>First : ({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["0"]
|
||||
>T : T
|
||||
>ObjectHasKey : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>T : T
|
||||
|
||||
type T1 = ObjectHasKey<{ a: string }, 'a'>; // 'true'
|
||||
>T1 : "true"
|
||||
>ObjectHasKey : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>a : string
|
||||
|
||||
type T2 = ObjectHasKey<{ a: string }, 'b'>; // 'false'
|
||||
>T2 : "false"
|
||||
>ObjectHasKey : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>a : string
|
||||
|
||||
// Verify that mapped type isn't eagerly resolved in type-to-string operation
|
||||
@@ -55,13 +55,13 @@ declare function f1<A extends string, B extends string>(a: A, b: B): { [P in A |
|
||||
>B : B
|
||||
|
||||
function f2<A extends string>(a: A) {
|
||||
>f2 : <A extends string>(a: A) => { [P in A | B]: any; }
|
||||
>f2 : <A extends string>(a: A) => { [P in A | "x"]: any; }
|
||||
>A : A
|
||||
>a : A
|
||||
>A : A
|
||||
|
||||
return f1(a, 'x');
|
||||
>f1(a, 'x') : { [P in A | B]: any; }
|
||||
>f1(a, 'x') : { [P in A | "x"]: any; }
|
||||
>f1 : <A extends string, B extends string>(a: A, b: B) => { [P in A | B]: any; }
|
||||
>a : A
|
||||
>'x' : "x"
|
||||
@@ -73,7 +73,7 @@ function f3(x: 'a' | 'b') {
|
||||
|
||||
return f2(x);
|
||||
>f2(x) : { a: any; b: any; x: any; }
|
||||
>f2 : <A extends string>(a: A) => { [P in A | B]: any; }
|
||||
>f2 : <A extends string>(a: A) => { [P in A | "x"]: any; }
|
||||
>x : "a" | "b"
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
tests/cases/compiler/deferredLookupTypeResolution2.ts(14,13): error TS2536: Type '({ [K in S]: "true"; } & { [key: string]: "false"; })["1"]' cannot be used to index type '{ true: "true"; }'.
|
||||
tests/cases/compiler/deferredLookupTypeResolution2.ts(19,21): error TS2536: Type '({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in S]: "true"; } & { [key: string]: "false"; })["1"]]' cannot be used to index type '{ true: "true"; }'.
|
||||
tests/cases/compiler/deferredLookupTypeResolution2.ts(14,13): error TS2536: Type '({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]' cannot be used to index type '{ true: "true"; }'.
|
||||
tests/cases/compiler/deferredLookupTypeResolution2.ts(19,21): error TS2536: Type '({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]]' cannot be used to index type '{ true: "true"; }'.
|
||||
|
||||
|
||||
==== tests/cases/compiler/deferredLookupTypeResolution2.ts (2 errors) ====
|
||||
@@ -18,14 +18,14 @@ tests/cases/compiler/deferredLookupTypeResolution2.ts(19,21): error TS2536: Type
|
||||
// Error, "false" not handled
|
||||
type E<T> = { true: 'true' }[ObjectHasKey<T, '1'>];
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2536: Type '({ [K in S]: "true"; } & { [key: string]: "false"; })["1"]' cannot be used to index type '{ true: "true"; }'.
|
||||
!!! error TS2536: Type '({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]' cannot be used to index type '{ true: "true"; }'.
|
||||
|
||||
type Juxtapose<T> = ({ true: 'otherwise' } & { [k: string]: 'true' })[ObjectHasKey<T, '1'>];
|
||||
|
||||
// Error, "otherwise" is missing
|
||||
type DeepError<T> = { true: 'true' }[Juxtapose<T>];
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2536: Type '({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in S]: "true"; } & { [key: string]: "false"; })["1"]]' cannot be used to index type '{ true: "true"; }'.
|
||||
!!! error TS2536: Type '({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]]' cannot be used to index type '{ true: "true"; }'.
|
||||
|
||||
type DeepOK<T> = { true: 'true', otherwise: 'false' }[Juxtapose<T>];
|
||||
|
||||
@@ -11,7 +11,7 @@ type StringContains<S extends string, L extends string> = ({ [K in S]: 'true' }
|
||||
>L : L
|
||||
|
||||
type ObjectHasKey<O, L extends string> = StringContains<keyof O, L>;
|
||||
>ObjectHasKey : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>O : O
|
||||
>L : L
|
||||
>StringContains : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L]
|
||||
@@ -19,52 +19,52 @@ type ObjectHasKey<O, L extends string> = StringContains<keyof O, L>;
|
||||
>L : L
|
||||
|
||||
type A<T> = ObjectHasKey<T, '0'>;
|
||||
>A : ({ [K in S]: "true"; } & { [key: string]: "false"; })["0"]
|
||||
>A : ({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["0"]
|
||||
>T : T
|
||||
>ObjectHasKey : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>T : T
|
||||
|
||||
type B = ObjectHasKey<[string, number], '1'>; // "true"
|
||||
>B : "true"
|
||||
>ObjectHasKey : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L]
|
||||
|
||||
type C = ObjectHasKey<[string, number], '2'>; // "false"
|
||||
>C : "false"
|
||||
>ObjectHasKey : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L]
|
||||
|
||||
type D = A<[string]>; // "true"
|
||||
>D : "true"
|
||||
>A : ({ [K in S]: "true"; } & { [key: string]: "false"; })["0"]
|
||||
>A : ({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["0"]
|
||||
|
||||
// Error, "false" not handled
|
||||
type E<T> = { true: 'true' }[ObjectHasKey<T, '1'>];
|
||||
>E : { true: "true"; }[({ [K in S]: "true"; } & { [key: string]: "false"; })["1"]]
|
||||
>E : { true: "true"; }[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]]
|
||||
>T : T
|
||||
>true : "true"
|
||||
>ObjectHasKey : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>T : T
|
||||
|
||||
type Juxtapose<T> = ({ true: 'otherwise' } & { [k: string]: 'true' })[ObjectHasKey<T, '1'>];
|
||||
>Juxtapose : ({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in S]: "true"; } & { [key: string]: "false"; })["1"]]
|
||||
>Juxtapose : ({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]]
|
||||
>T : T
|
||||
>true : "otherwise"
|
||||
>k : string
|
||||
>ObjectHasKey : ({ [K in S]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>ObjectHasKey : ({ [K in keyof O]: "true"; } & { [key: string]: "false"; })[L]
|
||||
>T : T
|
||||
|
||||
// Error, "otherwise" is missing
|
||||
type DeepError<T> = { true: 'true' }[Juxtapose<T>];
|
||||
>DeepError : { true: "true"; }[({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in S]: "true"; } & { [key: string]: "false"; })["1"]]]
|
||||
>DeepError : { true: "true"; }[({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]]]
|
||||
>T : T
|
||||
>true : "true"
|
||||
>Juxtapose : ({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in S]: "true"; } & { [key: string]: "false"; })["1"]]
|
||||
>Juxtapose : ({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]]
|
||||
>T : T
|
||||
|
||||
type DeepOK<T> = { true: 'true', otherwise: 'false' }[Juxtapose<T>];
|
||||
>DeepOK : { true: "true"; otherwise: "false"; }[({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in S]: "true"; } & { [key: string]: "false"; })["1"]]]
|
||||
>DeepOK : { true: "true"; otherwise: "false"; }[({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]]]
|
||||
>T : T
|
||||
>true : "true"
|
||||
>otherwise : "false"
|
||||
>Juxtapose : ({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in S]: "true"; } & { [key: string]: "false"; })["1"]]
|
||||
>Juxtapose : ({ true: "otherwise"; } & { [k: string]: "true"; })[({ [K in keyof T]: "true"; } & { [key: string]: "false"; })["1"]]
|
||||
>T : T
|
||||
|
||||
|
||||
@@ -275,9 +275,7 @@ declare function f3(): void;
|
||||
declare function f4(): void;
|
||||
declare function makeRecord<T, K extends string>(obj: {
|
||||
[P in K]: T;
|
||||
}): {
|
||||
[P in K]: T;
|
||||
};
|
||||
}): { [P in K]: T; };
|
||||
declare function f5(s: string): void;
|
||||
declare function makeDictionary<T>(obj: {
|
||||
[x: string]: T;
|
||||
|
||||
+2
-2
@@ -31,7 +31,7 @@ var r3 = c["a b"];
|
||||
var r4 = c["~!@#$%^&*()_+{}|:'<>?\/.,`"];
|
||||
>r4 : Symbol(r4, Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 13, 3), Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 26, 3), Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 39, 3), Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 51, 3))
|
||||
>c : Symbol(c, Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 8, 3))
|
||||
>"~!@#$%^&*()_+{}|:'<>?\/.,`" : Symbol(C["~!@#$%^&*()_+{}|:'<>?\/.,`"], Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 2, 20))
|
||||
>"~!@#$%^&*()_+{}|:'<>?\/.,`" : Symbol(C["~!@#$%^&*()_+{}|:'<>?/.,`"], Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 2, 20))
|
||||
|
||||
interface I {
|
||||
>I : Symbol(I, Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 13, 41))
|
||||
@@ -63,7 +63,7 @@ var r3 = i["a b"];
|
||||
var r4 = i["~!@#$%^&*()_+{}|:'<>?\/.,`"];
|
||||
>r4 : Symbol(r4, Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 13, 3), Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 26, 3), Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 39, 3), Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 51, 3))
|
||||
>i : Symbol(i, Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 21, 3))
|
||||
>"~!@#$%^&*()_+{}|:'<>?\/.,`" : Symbol(I["~!@#$%^&*()_+{}|:'<>?\/.,`"], Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 17, 20))
|
||||
>"~!@#$%^&*()_+{}|:'<>?\/.,`" : Symbol(I["~!@#$%^&*()_+{}|:'<>?/.,`"], Decl(objectTypeWithStringNamedPropertyOfIllegalCharacters.ts, 17, 20))
|
||||
|
||||
|
||||
var a: {
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
},
|
||||
{
|
||||
"text": "1",
|
||||
"kind": "methodName"
|
||||
"kind": "stringLiteral"
|
||||
},
|
||||
{
|
||||
"text": "]",
|
||||
@@ -310,7 +310,7 @@
|
||||
},
|
||||
{
|
||||
"text": "1",
|
||||
"kind": "methodName"
|
||||
"kind": "stringLiteral"
|
||||
},
|
||||
{
|
||||
"text": "]",
|
||||
@@ -380,7 +380,7 @@
|
||||
},
|
||||
{
|
||||
"text": "1",
|
||||
"kind": "methodName"
|
||||
"kind": "stringLiteral"
|
||||
},
|
||||
{
|
||||
"text": "]",
|
||||
|
||||
@@ -17,7 +17,7 @@ class Query<A extends Attributes<keyof A>> {
|
||||
>A : A
|
||||
|
||||
multiply<B extends Attributes<keyof B>>(x: B): Query<A & B>;
|
||||
>multiply : <B extends { [Key in Keys]: string; }>(x: B) => Query<A & B>
|
||||
>multiply : <B extends { [Key in keyof B]: string; }>(x: B) => Query<A & B>
|
||||
>B : B
|
||||
>Attributes : { [Key in Keys]: string; }
|
||||
>B : B
|
||||
|
||||
@@ -152,6 +152,6 @@ declare let b: GuardInterface;
|
||||
declare function invalidGuard(c: any): this is number;
|
||||
declare let c: number | number[];
|
||||
declare let holder: {
|
||||
invalidGuard: (c: any) => this is number;
|
||||
invalidGuard: typeof invalidGuard;
|
||||
};
|
||||
declare let detached: () => this is FollowerGuard;
|
||||
|
||||
@@ -13,6 +13,6 @@ verify.codeFix({
|
||||
x: { readonly [K in keyof X]: X[K] };
|
||||
}
|
||||
class C<Y> implements I<Y> {\r
|
||||
x: { readonly [K in keyof X]: Y[K]; };\r
|
||||
x: { readonly [K in keyof Y]: Y[K]; };\r
|
||||
}`,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user