Merge branch 'transforms-visitor' into transforms-flags

This commit is contained in:
Ron Buckton
2016-02-04 16:52:52 -08:00
77 changed files with 3059 additions and 3146 deletions
+3 -1
View File
@@ -1734,7 +1734,9 @@ namespace ts {
case Reachability.Unreachable:
const reportError =
// report error on all statements except empty ones
(isStatement(node) && node.kind !== SyntaxKind.EmptyStatement) ||
(isStatementButNotDeclaration(node) && node.kind !== SyntaxKind.EmptyStatement) ||
// report error on ExportAssignment
node.kind === SyntaxKind.ExportAssignment ||
// report error on class declarations
node.kind === SyntaxKind.ClassDeclaration ||
// report error on instantiated modules or const-enums only modules if preserveConstEnums is set
+5 -5
View File
@@ -4934,7 +4934,7 @@ namespace ts {
case SyntaxKind.JSDocRecordType:
return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node);
// This function assumes that an identifier or qualified name is a type expression
// Callers should first ensure this by calling isTypeNode
// Callers should first ensure this by calling isPartOfTypeNode
case SyntaxKind.Identifier:
case SyntaxKind.QualifiedName:
const symbol = getSymbolAtLocation(node);
@@ -15385,7 +15385,7 @@ namespace ts {
(entityName.parent.kind === SyntaxKind.JsxClosingElement)) {
return getJsxElementTagSymbol(<JsxOpeningLikeElement>entityName.parent);
}
else if (isExpression(entityName)) {
else if (isPartOfExpression(entityName)) {
if (nodeIsMissing(entityName)) {
// Missing entity name.
return undefined;
@@ -15468,7 +15468,7 @@ namespace ts {
case SyntaxKind.ThisKeyword:
case SyntaxKind.SuperKeyword:
const type = isExpression(node) ? checkExpression(<Expression>node) : getTypeFromTypeNode(<TypeNode>node);
const type = isPartOfExpression(node) ? checkExpression(<Expression>node) : getTypeFromTypeNode(<TypeNode>node);
return type.symbol;
case SyntaxKind.ThisType:
@@ -15529,11 +15529,11 @@ namespace ts {
return unknownType;
}
if (isTypeNode(node)) {
if (isPartOfTypeNode(node)) {
return getTypeFromTypeNode(<TypeNode>node);
}
if (isExpression(node)) {
if (isPartOfExpression(node)) {
return getTypeOfExpression(<Expression>node);
}
+1
View File
@@ -868,6 +868,7 @@ namespace ts {
this.transformFlags = undefined;
this.excludeTransformFlags = undefined;
this.parent = undefined;
this.original = undefined;
}
export let objectAllocator: ObjectAllocator = {
+3 -3
View File
@@ -1020,7 +1020,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
return;
}
const emitOuterParens = isExpression(node.parent)
const emitOuterParens = isPartOfExpression(node.parent)
&& templateNeedsParens(node, <Expression>node.parent);
if (emitOuterParens) {
@@ -5788,7 +5788,7 @@ const _super = (function (geti, seti) {
/** Serializes a TypeReferenceNode to an appropriate JS constructor value. Used by the __metadata decorator. */
function emitSerializedTypeReferenceNode(node: TypeReferenceNode) {
let location: Node = node.parent;
while (isDeclaration(location) || isTypeNode(location)) {
while (isDeclaration(location) || isPartOfTypeNode(location)) {
location = location.parent;
}
@@ -7156,7 +7156,7 @@ const _super = (function (geti, seti) {
}
// text should be quoted string
// for deduplication purposes in key remove leading and trailing quotes so 'a' and "a" will be considered the same
// for deduplication purposes in key remove leading and trailing quotes so 'a' and "a" will be considered the same
const key = text.substr(1, text.length - 2);
if (hasProperty(groupIndices, key)) {
+99 -17
View File
@@ -1,56 +1,138 @@
/// <reference path="types.ts"/>
/// <reference path="core.ts"/>
/// <reference path="utilities.ts"/>
/* @internal */
namespace ts {
export function createNodeArray<T extends Node>(elements?: T[], location?: TextRange): NodeArray<T>;
export function createNodeArray<T extends Node, TArray extends NodeArray<T>>(elements: TArray, location?: TextRange): TArray;
export function createNodeArray<T extends Node, TArray extends NodeArray<T>>(elements?: T[], location?: TextRange): TArray {
const array = <TArray>(elements || []);
if (location) {
array.pos = location.pos;
array.end = location.end;
}
else if (array.pos === undefined || array.end === undefined) {
array.pos = -1;
array.end = -1;
}
let NodeConstructor: new (kind: SyntaxKind, pos: number, end: number) => Node;
let SourceFileConstructor: new (kind: SyntaxKind, pos: number, end: number) => Node;
export function createNode(kind: SyntaxKind, pos?: number, end?: number): Node {
if (kind === SyntaxKind.SourceFile) {
return new (SourceFileConstructor || (SourceFileConstructor = objectAllocator.getSourceFileConstructor()))(kind, pos, end);
}
else {
return new (NodeConstructor || (NodeConstructor = objectAllocator.getNodeConstructor()))(kind, pos, end);
}
}
/* @internal */
export function createNodeArray<T extends Node>(elements?: T[], pos?: number, end?: number): NodeArray<T> {
const array = <NodeArray<T>>(elements || []);
array.pos = pos;
array.end = end;
array.arrayKind = ArrayKind.NodeArray;
return array;
}
export function createNodeArrayNode<T extends Node>(elements?: (T | NodeArrayNode<T>)[]): NodeArrayNode<T> {
const array = <NodeArrayNode<T>>createNodeArray(elements);
array.kind = SyntaxKind.NodeArrayNode;
/* @internal */
export function createModifiersArray(elements?: Modifier[], pos?: number, end?: number): ModifiersArray {
const array = <ModifiersArray>(elements || []);
array.pos = pos;
array.end = end;
array.arrayKind = ArrayKind.ModifiersArray;
array.flags = 0;
return array;
}
/* @internal */
export function createSynthesizedNode(kind: SyntaxKind, startsOnNewLine?: boolean): Node {
const node = <SynthesizedNode>createNode(kind, /*pos*/ -1, /*end*/ -1);
node.startsOnNewLine = startsOnNewLine;
return node;
}
/* @internal */
export function createSynthesizedNodeArray<T extends Node>(elements?: T[]): NodeArray<T> {
return createNodeArray(elements, /*pos*/ -1, /*end*/ -1);
}
/* @internal */
export function createSynthesizedModifiersArray(elements?: Modifier[]): ModifiersArray {
return createModifiersArray(elements, /*pos*/ -1, /*end*/ -1);
}
/**
* Creates a shallow, memberwise clone of a node. The "kind", "pos", "end", "flags", and "parent"
* properties are excluded by default, and can be provided via the "location", "flags", and
* "parent" parameters.
*
* @param node The node to clone.
* @param location An optional TextRange to use to supply the new position.
* @param flags The NodeFlags to use for the cloned node.
* @param parent The parent for the new node.
* @param original An optional pointer to the original source tree node.
*/
/* @internal */
export function cloneNode<T extends Node>(node: T, location?: TextRange, flags?: NodeFlags, parent?: Node, original?: Node): T {
// We don't use "clone" from core.ts here, as we need to preserve the prototype chain of
// the original node. We also need to exclude specific properties and only include own-
// properties (to skip members already defined on the shared prototype).
const clone = location !== undefined
? <T>createNode(node.kind, location.pos, location.end)
: <T>createSynthesizedNode(node.kind);
for (const key in node) {
if (clone.hasOwnProperty(key) || !node.hasOwnProperty(key)) {
continue;
}
(<any>clone)[key] = (<any>node)[key];
}
if (flags !== undefined) {
clone.flags = flags;
}
if (parent !== undefined) {
clone.parent = parent;
}
if (original !== undefined) {
clone.original = original;
}
return clone;
}
/* @internal */
export function createNodeArrayNode<T extends Node>(elements: T[]): NodeArrayNode<T> {
const node = <NodeArrayNode<T>>createSynthesizedNode(SyntaxKind.NodeArrayNode);
node.nodes = createNodeArray(elements);
return node;
}
/* @internal */
export function createReturn(expression?: Expression): ReturnStatement {
const node = <ReturnStatement>createSynthesizedNode(SyntaxKind.ReturnStatement);
node.expression = expression;
return node;
}
/* @internal */
export function createStatement(expression: Expression): ExpressionStatement {
const node = <ExpressionStatement>createSynthesizedNode(SyntaxKind.ExpressionStatement);
node.expression = expression;
return node;
}
/* @internal */
export function createVariableStatement(declarationList: VariableDeclarationList): VariableStatement {
const node = <VariableStatement>createSynthesizedNode(SyntaxKind.VariableStatement);
node.declarationList = declarationList;
return node;
}
/* @internal */
export function createVariableDeclarationList(declarations: VariableDeclaration[]): VariableDeclarationList {
const node = <VariableDeclarationList>createSynthesizedNode(SyntaxKind.VariableDeclarationList);
node.declarations = createNodeArray(declarations);
return node;
}
/* @internal */
export function createBlock(statements: Statement[]): Block {
const block = <Block>createSynthesizedNode(SyntaxKind.Block);
block.statements = createNodeArray(statements);
return block;
}
}
+58 -60
View File
@@ -1,21 +1,10 @@
/// <reference path="utilities.ts"/>
/// <reference path="scanner.ts"/>
/// <reference path="factory.ts"/>
namespace ts {
/* @internal */ export let parseTime = 0;
let NodeConstructor: new (kind: SyntaxKind, pos: number, end: number) => Node;
let SourceFileConstructor: new (kind: SyntaxKind, pos: number, end: number) => Node;
export function createNode(kind: SyntaxKind, pos?: number, end?: number): Node {
if (kind === SyntaxKind.SourceFile) {
return new (SourceFileConstructor || (SourceFileConstructor = objectAllocator.getSourceFileConstructor()))(kind, pos, end);
}
else {
return new (NodeConstructor || (NodeConstructor = objectAllocator.getNodeConstructor()))(kind, pos, end);
}
}
function visitNode<T>(cbNode: (node: Node) => T, node: Node): T {
if (node) {
return cbNode(node);
@@ -875,7 +864,7 @@ namespace ts {
/** Invokes the provided callback then unconditionally restores the parser to the state it
* was in immediately prior to invoking the callback. The result of invoking the callback
* is returned from this function.
* is returned from this function.
*/
function lookAhead<T>(callback: () => T): T {
return speculationHelper(callback, /*isLookAhead*/ true);
@@ -989,6 +978,29 @@ namespace ts {
return new NodeConstructor(kind, pos, pos);
}
function createNodeArray<T extends Node>(elements?: T[], pos?: number): NodeArray<T> {
const array = <NodeArray<T>>(elements || []);
if (!(pos >= 0)) {
pos = getNodePos();
}
array.pos = pos;
array.end = pos;
array.arrayKind = ArrayKind.NodeArray;
return array;
}
function createModifiersArray(elements?: Modifier[], pos?: number): ModifiersArray {
const array = <ModifiersArray>(elements || []);
if (!(pos >= 0)) {
pos = getNodePos();
}
array.pos = pos;
array.end = pos;
array.arrayKind = ArrayKind.ModifiersArray;
array.flags = 0;
return array;
}
function finishNode<T extends Node>(node: T, end?: number): T {
node.end = end === undefined ? scanner.getStartPos() : end;
@@ -1374,8 +1386,7 @@ namespace ts {
function parseList<T extends Node>(kind: ParsingContext, parseElement: () => T): NodeArray<T> {
const saveParsingContext = parsingContext;
parsingContext |= 1 << kind;
const result = <NodeArray<T>>[];
result.pos = getNodePos();
const result = createNodeArray<T>();
while (!isListTerminator(kind)) {
if (isListElement(kind, /*inErrorRecovery*/ false)) {
@@ -1722,8 +1733,7 @@ namespace ts {
function parseDelimitedList<T extends Node>(kind: ParsingContext, parseElement: () => T, considerSemicolonAsDelimeter?: boolean): NodeArray<T> {
const saveParsingContext = parsingContext;
parsingContext |= 1 << kind;
const result = <NodeArray<T>>[];
result.pos = getNodePos();
const result = createNodeArray<T>();
let commaStart = -1; // Meaning the previous token was not a comma
while (true) {
@@ -1778,12 +1788,8 @@ namespace ts {
return result;
}
function createMissingList<T>(): NodeArray<T> {
const pos = getNodePos();
const result = <NodeArray<T>>[];
result.pos = pos;
result.end = pos;
return result;
function createMissingList<T extends Node>(): NodeArray<T> {
return createNodeArray<T>();
}
function parseBracketedList<T extends Node>(kind: ParsingContext, parseElement: () => T, open: SyntaxKind, close: SyntaxKind): NodeArray<T> {
@@ -1848,8 +1854,7 @@ namespace ts {
template.head = parseTemplateLiteralFragment();
Debug.assert(template.head.kind === SyntaxKind.TemplateHead, "Template head has wrong token kind");
const templateSpans = <NodeArray<TemplateSpan>>[];
templateSpans.pos = getNodePos();
const templateSpans = createNodeArray<TemplateSpan>();
do {
templateSpans.push(parseTemplateSpan());
@@ -2425,8 +2430,7 @@ namespace ts {
function parseUnionOrIntersectionType(kind: SyntaxKind, parseConstituentType: () => TypeNode, operator: SyntaxKind): TypeNode {
let type = parseConstituentType();
if (token === operator) {
const types = <NodeArray<TypeNode>>[type];
types.pos = type.pos;
const types = createNodeArray<TypeNode>([type], type.pos);
while (parseOptional(operator)) {
types.push(parseConstituentType());
}
@@ -2781,8 +2785,7 @@ namespace ts {
parameter.name = identifier;
finishNode(parameter);
node.parameters = <NodeArray<ParameterDeclaration>>[parameter];
node.parameters.pos = parameter.pos;
node.parameters = createNodeArray<ParameterDeclaration>([parameter], parameter.pos);
node.parameters.end = parameter.end;
node.equalsGreaterThanToken = parseExpectedToken(SyntaxKind.EqualsGreaterThanToken, /*reportAtCurrentPosition*/ false, Diagnostics._0_expected, "=>");
@@ -3557,8 +3560,7 @@ namespace ts {
}
function parseJsxChildren(openingTagName: EntityName): NodeArray<JsxChild> {
const result = <NodeArray<JsxChild>>[];
result.pos = scanner.getStartPos();
const result = createNodeArray<JsxChild>();
const saveParsingContext = parsingContext;
parsingContext |= 1 << ParsingContext.JsxChildren;
@@ -4922,14 +4924,15 @@ namespace ts {
break;
}
if (!decorators) {
decorators = <NodeArray<Decorator>>[];
decorators.pos = decoratorStart;
}
const decorator = <Decorator>createNode(SyntaxKind.Decorator, decoratorStart);
decorator.expression = doInDecoratorContext(parseLeftHandSideExpressionOrHigher);
decorators.push(finishNode(decorator));
finishNode(decorator);
if (!decorators) {
decorators = createNodeArray<Decorator>([decorator], decoratorStart);
}
else {
decorators.push(decorator);
}
}
if (decorators) {
decorators.end = getNodeEnd();
@@ -4953,7 +4956,7 @@ namespace ts {
if (token === SyntaxKind.ConstKeyword && permitInvalidConstAsModifier) {
// We need to ensure that any subsequent modifiers appear on the same line
// so that when 'const' is a standalone declaration, we don't issue an error.
// so that when 'const' is a standalone declaration, we don't issue an error.
if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) {
break;
}
@@ -4964,13 +4967,14 @@ namespace ts {
}
}
if (!modifiers) {
modifiers = <ModifiersArray>[];
modifiers.pos = modifierStart;
}
flags |= modifierToFlag(modifierKind);
modifiers.push(finishNode(createNode(modifierKind, modifierStart)));
const modifier = finishNode(createNode(modifierKind, modifierStart));
if (!modifiers) {
modifiers = createModifiersArray([modifier], modifierStart);
}
else {
modifiers.push(modifier);
}
}
if (modifiers) {
modifiers.flags = flags;
@@ -4980,17 +4984,14 @@ namespace ts {
}
function parseModifiersForArrowFunction(): ModifiersArray {
let flags = 0;
let modifiers: ModifiersArray;
if (token === SyntaxKind.AsyncKeyword) {
const modifierStart = scanner.getStartPos();
const modifierKind = token;
nextToken();
modifiers = <ModifiersArray>[];
modifiers.pos = modifierStart;
flags |= modifierToFlag(modifierKind);
modifiers.push(finishNode(createNode(modifierKind, modifierStart)));
modifiers.flags = flags;
const modifier = finishNode(createNode(modifierKind, modifierStart));
modifiers = createModifiersArray([modifier], modifierStart);
modifiers.flags = modifierToFlag(modifierKind);
modifiers.end = scanner.getStartPos();
}
@@ -5216,7 +5217,7 @@ namespace ts {
node.decorators = decorators;
setModifiers(node, modifiers);
if (token === SyntaxKind.GlobalKeyword) {
// parse 'global' as name of global scope augmentation
// parse 'global' as name of global scope augmentation
node.name = parseIdentifier();
node.flags |= NodeFlags.GlobalAugmentation;
}
@@ -5848,10 +5849,8 @@ namespace ts {
function parseJSDocTypeList(firstType: JSDocType) {
Debug.assert(!!firstType);
const types = <NodeArray<JSDocType>>[];
types.pos = firstType.pos;
const types = createNodeArray([firstType], firstType.pos);
types.push(firstType);
while (parseOptional(SyntaxKind.BarToken)) {
types.push(parseJSDocType());
}
@@ -6059,11 +6058,11 @@ namespace ts {
function addTag(tag: JSDocTag): void {
if (tag) {
if (!tags) {
tags = <NodeArray<JSDocTag>>[];
tags.pos = tag.pos;
tags = createNodeArray([tag], tag.pos);
}
else {
tags.push(tag);
}
tags.push(tag);
tags.end = tag.end;
}
}
@@ -6156,8 +6155,7 @@ namespace ts {
}
// Type parameter list looks like '@template T,U,V'
const typeParameters = <NodeArray<TypeParameterDeclaration>>[];
typeParameters.pos = scanner.getStartPos();
const typeParameters = createNodeArray<TypeParameterDeclaration>();
while (true) {
const name = parseJSDocIdentifier();
+1 -1
View File
@@ -1719,7 +1719,7 @@ namespace ts {
programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "emitDecoratorMetadata", "experimentalDecorators"));
}
if (options.reactNamespace && !isIdentifier(options.reactNamespace, languageVersion)) {
if (options.reactNamespace && !isIdentifierText(options.reactNamespace, languageVersion)) {
programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier, options.reactNamespace));
}
+1 -1
View File
@@ -696,7 +696,7 @@ namespace ts {
}
/* @internal */
export function isIdentifier(name: string, languageVersion: ScriptTarget): boolean {
export function isIdentifierText(name: string, languageVersion: ScriptTarget): boolean {
if (!isIdentifierStart(name.charCodeAt(0), languageVersion)) {
return false;
}
+39 -12
View File
@@ -456,12 +456,27 @@ namespace ts {
/* @internal */ localSymbol?: Symbol; // Local symbol declared by node (initialized by binding only for exported nodes)
}
export interface NodeArray<T> extends Array<T>, TextRange {
export const enum ArrayKind {
NodeArray = 1,
ModifiersArray = 2,
}
export interface NodeArray<T extends Node> extends Array<T>, TextRange {
arrayKind: ArrayKind;
hasTrailingComma?: boolean;
}
/**
* A NodeArrayNode is a transient node used during transformations to indicate that more than
* one node will substitute a single node in the source. When the source is a NodeArray (as
* part of a call to `visitNodes`), the nodes of a NodeArrayNode will be spread into the
* result array. When the source is a Node (as part of a call to `visitNode`), the NodeArrayNode
* must be converted into a compatible node via the `lift` callback.
*/
/* @internal */
// @kind(SyntaxKind.NodeArrayNode)
export interface NodeArrayNode<T> extends Node, NodeArray<T | NodeArrayNode<T>> {
export interface NodeArrayNode<T extends Node> extends Node {
nodes: NodeArray<T>;
}
export interface ModifiersArray extends NodeArray<Modifier> {
@@ -540,10 +555,12 @@ namespace ts {
// @kind(SyntaxKind.ConstructSignature)
export interface ConstructSignatureDeclaration extends SignatureDeclaration, TypeElement { }
export type BindingName = Identifier | ObjectBindingPattern | ArrayBindingPattern;
// @kind(SyntaxKind.VariableDeclaration)
export interface VariableDeclaration extends Declaration {
parent?: VariableDeclarationList;
name: Identifier | BindingPattern; // Declared variable name
name: BindingName; // Declared variable name
type?: TypeNode; // Optional type annotation
initializer?: Expression; // Optional initializer
}
@@ -556,7 +573,7 @@ namespace ts {
// @kind(SyntaxKind.Parameter)
export interface ParameterDeclaration extends Declaration {
dotDotDotToken?: Node; // Present on rest parameter
name: Identifier | BindingPattern; // Declared parameter name
name: BindingName; // Declared parameter name
questionToken?: Node; // Present on optional parameter
type?: TypeNode; // Optional type annotation
initializer?: Expression; // Optional initializer
@@ -566,7 +583,7 @@ namespace ts {
export interface BindingElement extends Declaration {
propertyName?: PropertyName; // Binding property name (in object binding pattern)
dotDotDotToken?: Node; // Present on rest binding element
name: Identifier | BindingPattern; // Declared binding element name
name: BindingName; // Declared binding element name
initializer?: Expression; // Optional initializer
}
@@ -933,6 +950,8 @@ namespace ts {
_templateLiteralFragmentBrand: any;
}
export type Template = TemplateExpression | LiteralExpression;
// @kind(SyntaxKind.TemplateExpression)
export interface TemplateExpression extends PrimaryExpression {
head: TemplateLiteralFragment;
@@ -1004,7 +1023,7 @@ namespace ts {
// @kind(SyntaxKind.TaggedTemplateExpression)
export interface TaggedTemplateExpression extends MemberExpression {
tag: LeftHandSideExpression;
template: LiteralExpression | TemplateExpression;
template: Template;
}
export type CallLikeExpression = CallExpression | NewExpression | TaggedTemplateExpression | Decorator;
@@ -1036,7 +1055,7 @@ namespace ts {
export interface JsxOpeningElement extends Expression {
_openingElementBrand?: any;
tagName: EntityName;
attributes: NodeArray<JsxAttribute | JsxSpreadAttribute>;
attributes: NodeArray<JsxAttributeLike>;
}
/// A JSX expression of the form <TagName attrs />
@@ -1048,6 +1067,8 @@ namespace ts {
/// Either the opening tag in a <Tag>...</Tag> pair, or the lone <Tag /> in a self-closing form
export type JsxOpeningLikeElement = JsxSelfClosingElement | JsxOpeningElement;
export type JsxAttributeLike = JsxAttribute | JsxSpreadAttribute;
// @kind(SyntaxKind.JsxAttribute)
export interface JsxAttribute extends Node {
name: Identifier;
@@ -1130,22 +1151,24 @@ namespace ts {
expression: Expression;
}
export type ForInitializer = VariableDeclarationList | Expression;
// @kind(SyntaxKind.ForStatement)
export interface ForStatement extends IterationStatement {
initializer?: VariableDeclarationList | Expression;
initializer?: ForInitializer;
condition?: Expression;
incrementor?: Expression;
}
// @kind(SyntaxKind.ForInStatement)
export interface ForInStatement extends IterationStatement {
initializer: VariableDeclarationList | Expression;
initializer: ForInitializer;
expression: Expression;
}
// @kind(SyntaxKind.ForOfStatement)
export interface ForOfStatement extends IterationStatement {
initializer: VariableDeclarationList | Expression;
initializer: ForInitializer;
expression: Expression;
}
@@ -1284,9 +1307,11 @@ namespace ts {
export type ModuleBody = ModuleBlock | ModuleDeclaration;
export type ModuleName = Identifier | StringLiteral;
// @kind(SyntaxKind.ModuleDeclaration)
export interface ModuleDeclaration extends DeclarationStatement {
name: Identifier | LiteralExpression;
name: ModuleName;
body: ModuleBlock | ModuleDeclaration;
}
@@ -1321,6 +1346,8 @@ namespace ts {
moduleSpecifier: Expression;
}
export type NamedImportBindings = NamespaceImport | NamedImports;
// In case of:
// import d from "mod" => name = d, namedBinding = undefined
// import * as ns from "mod" => name = undefined, namedBinding: NamespaceImport = { name: ns }
@@ -1330,7 +1357,7 @@ namespace ts {
// @kind(SyntaxKind.ImportClause)
export interface ImportClause extends Declaration {
name?: Identifier; // Default binding
namedBindings?: NamespaceImport | NamedImports;
namedBindings?: NamedImportBindings;
}
// @kind(SyntaxKind.NamespaceImport)
+466 -460
View File
File diff suppressed because it is too large Load Diff
+431 -438
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -29,7 +29,7 @@ class TypeWriterWalker {
}
private visitNode(node: ts.Node): void {
if (ts.isExpression(node) || node.kind === ts.SyntaxKind.Identifier) {
if (ts.isPartOfExpression(node) || node.kind === ts.SyntaxKind.Identifier) {
this.logTypeAndSymbol(node);
}
+19 -19
View File
@@ -1,4 +1,4 @@
// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0.
// Copyright (c) Microsoft. All rights reserved. Licensed under the Apache License, Version 2.0.
// See LICENSE.txt in the project root for complete license information.
/// <reference path='services.ts' />
@@ -19,8 +19,8 @@ namespace ts.BreakpointResolver {
if (sourceFile.getLineAndCharacterOfPosition(tokenAtLocation.getStart(sourceFile)).line > lineOfPosition) {
// Get previous token if the token is returned starts on new line
// eg: let x =10; |--- cursor is here
// let y = 10;
// token at position will return let keyword on second line as the token but we would like to use
// let y = 10;
// token at position will return let keyword on second line as the token but we would like to use
// token on same line if trailing trivia (comments or white spaces on same line) part of the last token on that line
tokenAtLocation = findPrecedingToken(tokenAtLocation.pos, sourceFile);
@@ -56,7 +56,7 @@ namespace ts.BreakpointResolver {
return spanInNode(otherwiseOnNode);
}
function spanInNodeArray<T>(nodeArray: NodeArray<T>) {
function spanInNodeArray<T extends Node>(nodeArray: NodeArray<T>) {
return createTextSpanFromBounds(skipTrivia(sourceFile.text, nodeArray.pos), nodeArray.end);
}
@@ -259,13 +259,13 @@ namespace ts.BreakpointResolver {
if (isArrayLiteralOrObjectLiteralDestructuringPattern(node)) {
return spanInArrayLiteralOrObjectLiteralDestructuringPattern(<DestructuringPattern>node);
}
// Set breakpoint on identifier element of destructuring pattern
// a or ...c or d: x from
// a or ...c or d: x from
// [a, b, ...c] or { a, b } or { d: x } from destructuring pattern
if ((node.kind === SyntaxKind.Identifier ||
node.kind == SyntaxKind.SpreadElementExpression ||
node.kind === SyntaxKind.PropertyAssignment ||
node.kind == SyntaxKind.SpreadElementExpression ||
node.kind === SyntaxKind.PropertyAssignment ||
node.kind === SyntaxKind.ShorthandPropertyAssignment) &&
isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) {
return textSpan(node);
@@ -275,7 +275,7 @@ namespace ts.BreakpointResolver {
const binaryExpression = <BinaryExpression>node;
// Set breakpoint in destructuring pattern if its destructuring assignment
// [a, b, c] or {a, b, c} of
// [a, b, c] = expression or
// [a, b, c] = expression or
// {a, b, c} = expression
if (isArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.left)) {
return spanInArrayLiteralOrObjectLiteralDestructuringPattern(
@@ -285,8 +285,8 @@ namespace ts.BreakpointResolver {
if (binaryExpression.operatorToken.kind === SyntaxKind.EqualsToken &&
isArrayLiteralOrObjectLiteralDestructuringPattern(binaryExpression.parent)) {
// Set breakpoint on assignment expression element of destructuring pattern
// a = expression of
// [a = expression, b, c] = someExpression or
// a = expression of
// [a = expression, b, c] = someExpression or
// { a = expression, b, c } = someExpression
return textSpan(node);
}
@@ -296,7 +296,7 @@ namespace ts.BreakpointResolver {
}
}
if (isExpression(node)) {
if (isPartOfExpression(node)) {
switch (node.parent.kind) {
case SyntaxKind.DoStatement:
// Set span as if on while keyword
@@ -325,14 +325,14 @@ namespace ts.BreakpointResolver {
break;
}
}
// If this is name of property assignment, set breakpoint in the initializer
if (node.parent.kind === SyntaxKind.PropertyAssignment &&
(<PropertyDeclaration>node.parent).name === node &&
(<PropertyDeclaration>node.parent).name === node &&
!isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.parent)) {
return spanInNode((<PropertyDeclaration>node.parent).initializer);
}
// Breakpoint in type assertion goes to its operand
if (node.parent.kind === SyntaxKind.TypeAssertionExpression && (<TypeAssertion>node.parent).type === node) {
return spanInNextNode((<TypeAssertion>node.parent).type);
@@ -386,7 +386,7 @@ namespace ts.BreakpointResolver {
if (variableDeclaration.parent.parent.kind === SyntaxKind.ForInStatement) {
return spanInNode(variableDeclaration.parent.parent);
}
// If this is a destructuring pattern set breakpoint in binding pattern
if (isBindingPattern(variableDeclaration.name)) {
return spanInBindingPattern(<BindingPattern>variableDeclaration.name);
@@ -403,7 +403,7 @@ namespace ts.BreakpointResolver {
let declarations = variableDeclaration.parent.declarations;
if (declarations && declarations[0] !== variableDeclaration) {
// If we cant set breakpoint on this declaration, set it on previous one
// Because the variable declaration may be binding pattern and
// Because the variable declaration may be binding pattern and
// we would like to set breakpoint in last binding element if thats the case,
// use preceding token instead
return spanInNode(findPrecedingToken(variableDeclaration.pos, sourceFile, variableDeclaration.parent));
@@ -549,7 +549,7 @@ namespace ts.BreakpointResolver {
return spanInNode(firstBindingElement);
}
// Could be ArrayLiteral from destructuring assignment or
// Could be ArrayLiteral from destructuring assignment or
// just nested element in another destructuring assignment
// set breakpoint on assignment when parent is destructuring assignment
// Otherwise set breakpoint for this element
@@ -686,7 +686,7 @@ namespace ts.BreakpointResolver {
function spanInColonToken(node: Node): TextSpan {
// Is this : specifying return annotation of the function declaration
if (isFunctionLike(node.parent) ||
node.parent.kind === SyntaxKind.PropertyAssignment ||
node.parent.kind === SyntaxKind.PropertyAssignment ||
node.parent.kind === SyntaxKind.Parameter) {
return spanInPreviousNode(node);
}
+5 -5
View File
@@ -313,7 +313,7 @@ namespace ts.formatting {
this.SpaceAfterVoidOperator = new Rule(RuleDescriptor.create3(SyntaxKind.VoidKeyword, Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsVoidOpContext), RuleAction.Space));
this.NoSpaceBetweenReturnAndSemicolon = new Rule(RuleDescriptor.create1(SyntaxKind.ReturnKeyword, SyntaxKind.SemicolonToken), RuleOperation.create2(new RuleOperationContext(Rules.IsSameLineTokenContext), RuleAction.Delete));
// Add a space between statements. All keywords except (do,else,case) has open/close parens after them.
// So, we have a rule to add a space for [),Any], [do,Any], [else,Any], and [case,Any]
this.SpaceBetweenStatements = new Rule(RuleDescriptor.create4(Shared.TokenRange.FromTokens([SyntaxKind.CloseParenToken, SyntaxKind.DoKeyword, SyntaxKind.ElseKeyword, SyntaxKind.CaseKeyword]), Shared.TokenRange.Any), RuleOperation.create2(new RuleOperationContext(Rules.IsSameLineTokenContext, Rules.IsNotForContext), RuleAction.Space));
@@ -554,17 +554,17 @@ namespace ts.formatting {
static IsSameLineTokenOrBeforeMultilineBlockContext(context: FormattingContext): boolean {
//// This check is mainly used inside SpaceBeforeOpenBraceInControl and SpaceBeforeOpenBraceInFunction.
////
//// Ex:
//// Ex:
//// if (1) { ....
//// * ) and { are on the same line so apply the rule. Here we don't care whether it's same or multi block context
////
//// Ex:
//// Ex:
//// if (1)
//// { ... }
//// * ) and { are on differnet lines. We only need to format if the block is multiline context. So in this case we don't format.
////
//// Ex:
//// if (1)
//// if (1)
//// { ...
//// }
//// * ) and { are on differnet lines. We only need to format if the block is multiline context. So in this case we format.
@@ -735,7 +735,7 @@ namespace ts.formatting {
}
static NodeIsInDecoratorContext(node: Node): boolean {
while (isExpression(node)) {
while (isPartOfExpression(node)) {
node = node.parent;
}
return node.kind === SyntaxKind.Decorator;
+2 -2
View File
@@ -467,7 +467,7 @@ namespace ts.formatting {
}
return false;
}
/* @internal */
export function nodeWillIndentChild(parent: TextRangeWithKind, child: TextRangeWithKind, indentByDefault: boolean) {
let childKind = child ? child.kind : SyntaxKind.Unknown;
@@ -497,7 +497,7 @@ namespace ts.formatting {
Function returns true when the parent node should indent the given child by an explicit rule
*/
export function shouldIndentChildNode(parent: TextRangeWithKind, child?: TextRangeWithKind): boolean {
return nodeContentIsAlwaysIndented(parent.kind) || nodeWillIndentChild(parent, child, false);
return nodeContentIsAlwaysIndented(parent.kind) || nodeWillIndentChild(parent, child, false);
}
}
}
+4 -2
View File
@@ -186,6 +186,7 @@ namespace ts {
public end: number;
public flags: NodeFlags;
public parent: Node;
public original: Node;
public transformFlags: TransformFlags;
public excludeTransformFlags: TransformFlags;
private _children: Node[];
@@ -198,6 +199,7 @@ namespace ts {
this.transformFlags = undefined;
this.excludeTransformFlags = undefined;
this.parent = undefined;
this.original = undefined;
}
public getSourceFile(): SourceFile {
@@ -2988,7 +2990,7 @@ namespace ts {
// e.g "b a" is valid quoted name but when we strip off the quotes, it is invalid.
// We, thus, need to check if whatever was inside the quotes is actually a valid identifier name.
if (performCharacterChecks) {
if (!isIdentifier(name, target)) {
if (!isIdentifierText(name, target)) {
return undefined;
}
}
@@ -6344,7 +6346,7 @@ namespace ts {
return node.parent.kind === SyntaxKind.TypeReference ||
(node.parent.kind === SyntaxKind.ExpressionWithTypeArguments && !isExpressionWithTypeArgumentsInClassExtendsClause(<ExpressionWithTypeArguments>node.parent)) ||
(node.kind === SyntaxKind.ThisKeyword && !isExpression(node)) ||
(node.kind === SyntaxKind.ThisKeyword && !isPartOfExpression(node)) ||
node.kind === SyntaxKind.ThisType;
}
@@ -0,0 +1,37 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 27,
"tags": {
"0": {
"kind": "JSDocTypeTag",
"pos": 8,
"end": 22,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 13,
"text": "type"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 14,
"end": 22,
"type": {
"kind": "NumberKeyword",
"pos": 15,
"end": 21
}
}
},
"length": 1,
"pos": 8,
"end": 22,
"arrayKind": 1
}
}
@@ -0,0 +1,37 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 27,
"tags": {
"0": {
"kind": "JSDocTypeTag",
"pos": 8,
"end": 22,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 13,
"text": "type"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 14,
"end": 22,
"type": {
"kind": "NumberKeyword",
"pos": 15,
"end": 21
}
}
},
"length": 1,
"pos": 8,
"end": 22,
"arrayKind": 1
}
}
@@ -0,0 +1,27 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 20,
"tags": {
"0": {
"kind": "JSDocReturnTag",
"pos": 8,
"end": 15,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 15,
"text": "return"
}
},
"length": 1,
"pos": 8,
"end": 15,
"arrayKind": 1
}
}
@@ -0,0 +1,27 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 18,
"tags": {
"0": {
"kind": "JSDocTypeTag",
"pos": 8,
"end": 13,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 13,
"text": "type"
}
},
"length": 1,
"pos": 8,
"end": 13,
"arrayKind": 1
}
}
@@ -0,0 +1,43 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 34,
"tags": {
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 29,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 14,
"text": "param"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 15,
"end": 23,
"type": {
"kind": "NumberKeyword",
"pos": 16,
"end": 22
}
},
"postParameterName": {
"kind": "Identifier",
"pos": 24,
"end": 29,
"text": "name1"
}
},
"length": 1,
"pos": 8,
"end": 29,
"arrayKind": 1
}
}
@@ -0,0 +1,43 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 59,
"tags": {
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 29,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 14,
"text": "param"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 15,
"end": 23,
"type": {
"kind": "NumberKeyword",
"pos": 16,
"end": 22
}
},
"postParameterName": {
"kind": "Identifier",
"pos": 24,
"end": 29,
"text": "name1"
}
},
"length": 1,
"pos": 8,
"end": 29,
"arrayKind": 1
}
}
@@ -0,0 +1,44 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 61,
"tags": {
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 31,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 14,
"text": "param"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 15,
"end": 23,
"type": {
"kind": "NumberKeyword",
"pos": 16,
"end": 22
}
},
"postParameterName": {
"kind": "Identifier",
"pos": 25,
"end": 30,
"text": "name1"
},
"isBracketed": true
},
"length": 1,
"pos": 8,
"end": 31,
"arrayKind": 1
}
}
@@ -0,0 +1,44 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 66,
"tags": {
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 36,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 14,
"text": "param"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 15,
"end": 23,
"type": {
"kind": "NumberKeyword",
"pos": 16,
"end": 22
}
},
"postParameterName": {
"kind": "Identifier",
"pos": 26,
"end": 31,
"text": "name1"
},
"isBracketed": true
},
"length": 1,
"pos": 8,
"end": 36,
"arrayKind": 1
}
}
@@ -0,0 +1,43 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 34,
"tags": {
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 29,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 14,
"text": "param"
},
"preParameterName": {
"kind": "Identifier",
"pos": 15,
"end": 20,
"text": "name1"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 21,
"end": 29,
"type": {
"kind": "NumberKeyword",
"pos": 22,
"end": 28
}
}
},
"length": 1,
"pos": 8,
"end": 29,
"arrayKind": 1
}
}
@@ -0,0 +1,43 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 46,
"tags": {
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 29,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 14,
"text": "param"
},
"preParameterName": {
"kind": "Identifier",
"pos": 15,
"end": 20,
"text": "name1"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 21,
"end": 29,
"type": {
"kind": "NumberKeyword",
"pos": 22,
"end": 28
}
}
},
"length": 1,
"pos": 8,
"end": 29,
"arrayKind": 1
}
}
@@ -0,0 +1,33 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 23,
"tags": {
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 18,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 14,
"text": "param"
},
"preParameterName": {
"kind": "Identifier",
"pos": 15,
"end": 18,
"text": "foo"
}
},
"length": 1,
"pos": 8,
"end": 18,
"arrayKind": 1
}
}
@@ -0,0 +1,37 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 29,
"tags": {
"0": {
"kind": "JSDocReturnTag",
"pos": 8,
"end": 24,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 15,
"text": "return"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 16,
"end": 24,
"type": {
"kind": "NumberKeyword",
"pos": 17,
"end": 23
}
}
},
"length": 1,
"pos": 8,
"end": 24,
"arrayKind": 1
}
}
@@ -0,0 +1,37 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 54,
"tags": {
"0": {
"kind": "JSDocReturnTag",
"pos": 8,
"end": 24,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 15,
"text": "return"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 16,
"end": 24,
"type": {
"kind": "NumberKeyword",
"pos": 17,
"end": 23
}
}
},
"length": 1,
"pos": 8,
"end": 24,
"arrayKind": 1
}
}
@@ -0,0 +1,37 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 30,
"tags": {
"0": {
"kind": "JSDocReturnTag",
"pos": 8,
"end": 25,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 16,
"text": "returns"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 17,
"end": 25,
"type": {
"kind": "NumberKeyword",
"pos": 18,
"end": 24
}
}
},
"length": 1,
"pos": 8,
"end": 25,
"arrayKind": 1
}
}
@@ -0,0 +1,44 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 24,
"tags": {
"0": {
"kind": "JSDocTemplateTag",
"pos": 8,
"end": 19,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 17,
"text": "template"
},
"typeParameters": {
"0": {
"kind": "TypeParameter",
"pos": 18,
"end": 19,
"name": {
"kind": "Identifier",
"pos": 18,
"end": 19,
"text": "T"
}
},
"length": 1,
"pos": 17,
"end": 19,
"arrayKind": 1
}
},
"length": 1,
"pos": 8,
"end": 19,
"arrayKind": 1
}
}
@@ -0,0 +1,55 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 26,
"tags": {
"0": {
"kind": "JSDocTemplateTag",
"pos": 8,
"end": 21,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 17,
"text": "template"
},
"typeParameters": {
"0": {
"kind": "TypeParameter",
"pos": 18,
"end": 19,
"name": {
"kind": "Identifier",
"pos": 18,
"end": 19,
"text": "K"
}
},
"1": {
"kind": "TypeParameter",
"pos": 20,
"end": 21,
"name": {
"kind": "Identifier",
"pos": 20,
"end": 21,
"text": "V"
}
},
"length": 2,
"pos": 17,
"end": 21,
"arrayKind": 1
}
},
"length": 1,
"pos": 8,
"end": 21,
"arrayKind": 1
}
}
@@ -0,0 +1,55 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 27,
"tags": {
"0": {
"kind": "JSDocTemplateTag",
"pos": 8,
"end": 22,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 17,
"text": "template"
},
"typeParameters": {
"0": {
"kind": "TypeParameter",
"pos": 18,
"end": 19,
"name": {
"kind": "Identifier",
"pos": 18,
"end": 19,
"text": "K"
}
},
"1": {
"kind": "TypeParameter",
"pos": 21,
"end": 22,
"name": {
"kind": "Identifier",
"pos": 21,
"end": 22,
"text": "V"
}
},
"length": 2,
"pos": 17,
"end": 22,
"arrayKind": 1
}
},
"length": 1,
"pos": 8,
"end": 22,
"arrayKind": 1
}
}
@@ -0,0 +1,55 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 27,
"tags": {
"0": {
"kind": "JSDocTemplateTag",
"pos": 8,
"end": 22,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 17,
"text": "template"
},
"typeParameters": {
"0": {
"kind": "TypeParameter",
"pos": 18,
"end": 19,
"name": {
"kind": "Identifier",
"pos": 18,
"end": 19,
"text": "K"
}
},
"1": {
"kind": "TypeParameter",
"pos": 21,
"end": 22,
"name": {
"kind": "Identifier",
"pos": 21,
"end": 22,
"text": "V"
}
},
"length": 2,
"pos": 17,
"end": 22,
"arrayKind": 1
}
},
"length": 1,
"pos": 8,
"end": 22,
"arrayKind": 1
}
}
@@ -0,0 +1,55 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 28,
"tags": {
"0": {
"kind": "JSDocTemplateTag",
"pos": 8,
"end": 23,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 17,
"text": "template"
},
"typeParameters": {
"0": {
"kind": "TypeParameter",
"pos": 18,
"end": 19,
"name": {
"kind": "Identifier",
"pos": 18,
"end": 19,
"text": "K"
}
},
"1": {
"kind": "TypeParameter",
"pos": 22,
"end": 23,
"name": {
"kind": "Identifier",
"pos": 22,
"end": 23,
"text": "V"
}
},
"length": 2,
"pos": 17,
"end": 23,
"arrayKind": 1
}
},
"length": 1,
"pos": 8,
"end": 23,
"arrayKind": 1
}
}
@@ -0,0 +1,55 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 60,
"tags": {
"0": {
"kind": "JSDocTemplateTag",
"pos": 8,
"end": 23,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 17,
"text": "template"
},
"typeParameters": {
"0": {
"kind": "TypeParameter",
"pos": 18,
"end": 19,
"name": {
"kind": "Identifier",
"pos": 18,
"end": 19,
"text": "K"
}
},
"1": {
"kind": "TypeParameter",
"pos": 22,
"end": 23,
"name": {
"kind": "Identifier",
"pos": 22,
"end": 23,
"text": "V"
}
},
"length": 2,
"pos": 17,
"end": 23,
"arrayKind": 1
}
},
"length": 1,
"pos": 8,
"end": 23,
"arrayKind": 1
}
}
@@ -0,0 +1,75 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 60,
"tags": {
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 29,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 14,
"text": "param"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 15,
"end": 23,
"type": {
"kind": "NumberKeyword",
"pos": 16,
"end": 22
}
},
"postParameterName": {
"kind": "Identifier",
"pos": 24,
"end": 29,
"text": "name1"
}
},
"1": {
"kind": "JSDocParameterTag",
"pos": 34,
"end": 55,
"atToken": {
"kind": "AtToken",
"pos": 34,
"end": 35
},
"tagName": {
"kind": "Identifier",
"pos": 35,
"end": 40,
"text": "param"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 41,
"end": 49,
"type": {
"kind": "NumberKeyword",
"pos": 42,
"end": 48
}
},
"postParameterName": {
"kind": "Identifier",
"pos": 50,
"end": 55,
"text": "name2"
}
},
"length": 2,
"pos": 8,
"end": 55,
"arrayKind": 1
}
}
@@ -0,0 +1,43 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 56,
"tags": {
"0": {
"kind": "JSDocParameterTag",
"pos": 8,
"end": 29,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 14,
"text": "param"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 15,
"end": 23,
"type": {
"kind": "NumberKeyword",
"pos": 16,
"end": 22
}
},
"postParameterName": {
"kind": "Identifier",
"pos": 24,
"end": 29,
"text": "name1"
}
},
"length": 1,
"pos": 8,
"end": 29,
"arrayKind": 1
}
}
@@ -0,0 +1,37 @@
{
"kind": "JSDocComment",
"pos": 0,
"end": 27,
"tags": {
"0": {
"kind": "JSDocTypeTag",
"pos": 8,
"end": 22,
"atToken": {
"kind": "AtToken",
"pos": 8,
"end": 9
},
"tagName": {
"kind": "Identifier",
"pos": 9,
"end": 13,
"text": "type"
},
"typeExpression": {
"kind": "JSDocTypeExpression",
"pos": 14,
"end": 22,
"type": {
"kind": "NumberKeyword",
"pos": 15,
"end": 21
}
}
},
"length": 1,
"pos": 8,
"end": 22,
"arrayKind": 1
}
}
@@ -0,0 +1,5 @@
{
"kind": "JSDocAllType",
"pos": 1,
"end": 2
}
@@ -0,0 +1,16 @@
{
"kind": "JSDocArrayType",
"pos": 1,
"end": 4,
"elementType": {
"kind": "JSDocTypeReference",
"pos": 1,
"end": 2,
"name": {
"kind": "Identifier",
"pos": 1,
"end": 2,
"text": "a"
}
}
}
@@ -0,0 +1,21 @@
{
"kind": "JSDocArrayType",
"pos": 1,
"end": 6,
"elementType": {
"kind": "JSDocArrayType",
"pos": 1,
"end": 4,
"elementType": {
"kind": "JSDocTypeReference",
"pos": 1,
"end": 2,
"name": {
"kind": "Identifier",
"pos": 1,
"end": 2,
"text": "a"
}
}
}
}
@@ -0,0 +1,26 @@
{
"kind": "JSDocOptionalType",
"pos": 1,
"end": 7,
"type": {
"kind": "JSDocArrayType",
"pos": 1,
"end": 6,
"elementType": {
"kind": "JSDocArrayType",
"pos": 1,
"end": 4,
"elementType": {
"kind": "JSDocTypeReference",
"pos": 1,
"end": 2,
"name": {
"kind": "Identifier",
"pos": 1,
"end": 2,
"text": "a"
}
}
}
}
}
@@ -0,0 +1,31 @@
{
"kind": "JSDocFunctionType",
"pos": 1,
"end": 26,
"parameters": {
"0": {
"kind": "Parameter",
"pos": 10,
"end": 16,
"type": {
"kind": "StringKeyword",
"pos": 10,
"end": 16
}
},
"1": {
"kind": "Parameter",
"pos": 17,
"end": 25,
"type": {
"kind": "BooleanKeyword",
"pos": 17,
"end": 25
}
},
"length": 2,
"pos": 10,
"end": 25,
"arrayKind": 1
}
}
@@ -0,0 +1,11 @@
{
"kind": "JSDocFunctionType",
"pos": 1,
"end": 11,
"parameters": {
"length": 0,
"pos": 10,
"end": 10,
"arrayKind": 1
}
}
@@ -0,0 +1,31 @@
{
"kind": "JSDocFunctionType",
"pos": 1,
"end": 26,
"parameters": {
"0": {
"kind": "Parameter",
"pos": 10,
"end": 16,
"type": {
"kind": "StringKeyword",
"pos": 10,
"end": 16
}
},
"1": {
"kind": "Parameter",
"pos": 17,
"end": 25,
"type": {
"kind": "BooleanKeyword",
"pos": 17,
"end": 25
}
},
"length": 2,
"pos": 10,
"end": 25,
"arrayKind": 1
}
}
@@ -0,0 +1,12 @@
{
"kind": "JSDocTypeReference",
"pos": 1,
"end": 4,
"name": {
"kind": "Identifier",
"pos": 1,
"end": 4,
"originalKeywordKind": "VarKeyword",
"text": "var"
}
}
@@ -0,0 +1,12 @@
{
"kind": "JSDocTypeReference",
"pos": 1,
"end": 5,
"name": {
"kind": "Identifier",
"pos": 1,
"end": 5,
"originalKeywordKind": "NullKeyword",
"text": "null"
}
}
@@ -0,0 +1,11 @@
{
"kind": "JSDocTypeReference",
"pos": 1,
"end": 10,
"name": {
"kind": "Identifier",
"pos": 1,
"end": 10,
"text": "undefined"
}
}
@@ -0,0 +1,27 @@
{
"kind": "JSDocConstructorType",
"pos": 1,
"end": 8,
"type": {
"kind": "JSDocTypeReference",
"pos": 5,
"end": 8,
"name": {
"kind": "FirstNode",
"pos": 5,
"end": 8,
"left": {
"kind": "Identifier",
"pos": 5,
"end": 6,
"text": "a"
},
"right": {
"kind": "Identifier",
"pos": 7,
"end": 8,
"text": "b"
}
}
}
}
@@ -0,0 +1,10 @@
{
"kind": "JSDocNonNullableType",
"pos": 1,
"end": 8,
"type": {
"kind": "NumberKeyword",
"pos": 2,
"end": 8
}
}
@@ -0,0 +1,10 @@
{
"kind": "JSDocNonNullableType",
"pos": 1,
"end": 8,
"type": {
"kind": "NumberKeyword",
"pos": 1,
"end": 7
}
}
@@ -0,0 +1,10 @@
{
"kind": "JSDocNullableType",
"pos": 1,
"end": 8,
"type": {
"kind": "NumberKeyword",
"pos": 2,
"end": 8
}
}
@@ -0,0 +1,10 @@
{
"kind": "JSDocNullableType",
"pos": 1,
"end": 8,
"type": {
"kind": "NumberKeyword",
"pos": 1,
"end": 7
}
}
@@ -0,0 +1,10 @@
{
"kind": "JSDocOptionalType",
"pos": 1,
"end": 3,
"type": {
"kind": "JSDocUnknownType",
"pos": 1,
"end": 2
}
}
@@ -0,0 +1,10 @@
{
"kind": "JSDocOptionalType",
"pos": 1,
"end": 8,
"type": {
"kind": "NumberKeyword",
"pos": 1,
"end": 7
}
}
@@ -0,0 +1,11 @@
{
"kind": "JSDocRecordType",
"pos": 1,
"end": 3,
"members": {
"length": 0,
"pos": 2,
"end": 2,
"arrayKind": 1
}
}
@@ -0,0 +1,22 @@
{
"kind": "JSDocRecordType",
"pos": 1,
"end": 6,
"members": {
"0": {
"kind": "JSDocRecordMember",
"pos": 2,
"end": 5,
"name": {
"kind": "Identifier",
"pos": 2,
"end": 5,
"text": "foo"
}
},
"length": 1,
"pos": 2,
"end": 5,
"arrayKind": 1
}
}
@@ -0,0 +1,27 @@
{
"kind": "JSDocRecordType",
"pos": 1,
"end": 14,
"members": {
"0": {
"kind": "JSDocRecordMember",
"pos": 2,
"end": 13,
"name": {
"kind": "Identifier",
"pos": 2,
"end": 5,
"text": "foo"
},
"type": {
"kind": "NumberKeyword",
"pos": 6,
"end": 13
}
},
"length": 1,
"pos": 2,
"end": 13,
"arrayKind": 1
}
}
@@ -0,0 +1,33 @@
{
"kind": "JSDocRecordType",
"pos": 1,
"end": 11,
"members": {
"0": {
"kind": "JSDocRecordMember",
"pos": 2,
"end": 5,
"name": {
"kind": "Identifier",
"pos": 2,
"end": 5,
"text": "foo"
}
},
"1": {
"kind": "JSDocRecordMember",
"pos": 6,
"end": 10,
"name": {
"kind": "Identifier",
"pos": 6,
"end": 10,
"text": "bar"
}
},
"length": 2,
"pos": 2,
"end": 10,
"arrayKind": 1
}
}
@@ -0,0 +1,38 @@
{
"kind": "JSDocRecordType",
"pos": 1,
"end": 19,
"members": {
"0": {
"kind": "JSDocRecordMember",
"pos": 2,
"end": 13,
"name": {
"kind": "Identifier",
"pos": 2,
"end": 5,
"text": "foo"
},
"type": {
"kind": "NumberKeyword",
"pos": 6,
"end": 13
}
},
"1": {
"kind": "JSDocRecordMember",
"pos": 14,
"end": 18,
"name": {
"kind": "Identifier",
"pos": 14,
"end": 18,
"text": "bar"
}
},
"length": 2,
"pos": 2,
"end": 18,
"arrayKind": 1
}
}
@@ -0,0 +1,38 @@
{
"kind": "JSDocRecordType",
"pos": 1,
"end": 19,
"members": {
"0": {
"kind": "JSDocRecordMember",
"pos": 2,
"end": 5,
"name": {
"kind": "Identifier",
"pos": 2,
"end": 5,
"text": "foo"
}
},
"1": {
"kind": "JSDocRecordMember",
"pos": 6,
"end": 18,
"name": {
"kind": "Identifier",
"pos": 6,
"end": 10,
"text": "bar"
},
"type": {
"kind": "NumberKeyword",
"pos": 11,
"end": 18
}
},
"length": 2,
"pos": 2,
"end": 18,
"arrayKind": 1
}
}
@@ -0,0 +1,43 @@
{
"kind": "JSDocRecordType",
"pos": 1,
"end": 27,
"members": {
"0": {
"kind": "JSDocRecordMember",
"pos": 2,
"end": 13,
"name": {
"kind": "Identifier",
"pos": 2,
"end": 5,
"text": "foo"
},
"type": {
"kind": "NumberKeyword",
"pos": 6,
"end": 13
}
},
"1": {
"kind": "JSDocRecordMember",
"pos": 14,
"end": 26,
"name": {
"kind": "Identifier",
"pos": 14,
"end": 18,
"text": "bar"
},
"type": {
"kind": "NumberKeyword",
"pos": 19,
"end": 26
}
},
"length": 2,
"pos": 2,
"end": 26,
"arrayKind": 1
}
}
@@ -0,0 +1,23 @@
{
"kind": "JSDocRecordType",
"pos": 1,
"end": 11,
"members": {
"0": {
"kind": "JSDocRecordMember",
"pos": 2,
"end": 10,
"name": {
"kind": "Identifier",
"pos": 2,
"end": 10,
"originalKeywordKind": "FunctionKeyword",
"text": "function"
}
},
"length": 1,
"pos": 2,
"end": 10,
"arrayKind": 1
}
}
@@ -0,0 +1,27 @@
{
"kind": "JSDocThisType",
"pos": 1,
"end": 9,
"type": {
"kind": "JSDocTypeReference",
"pos": 6,
"end": 9,
"name": {
"kind": "FirstNode",
"pos": 6,
"end": 9,
"left": {
"kind": "Identifier",
"pos": 6,
"end": 7,
"text": "a"
},
"right": {
"kind": "Identifier",
"pos": 8,
"end": 9,
"text": "b"
}
}
}
}
@@ -0,0 +1,21 @@
{
"kind": "JSDocUnionType",
"pos": 1,
"end": 14,
"types": {
"0": {
"kind": "NumberKeyword",
"pos": 1,
"end": 7
},
"1": {
"kind": "StringKeyword",
"pos": 8,
"end": 14
},
"length": 2,
"pos": 1,
"end": 14,
"arrayKind": 1
}
}
@@ -0,0 +1,11 @@
{
"kind": "JSDocTupleType",
"pos": 1,
"end": 3,
"types": {
"length": 0,
"pos": 2,
"end": 2,
"arrayKind": 1
}
}
@@ -0,0 +1,16 @@
{
"kind": "JSDocTupleType",
"pos": 1,
"end": 9,
"types": {
"0": {
"kind": "NumberKeyword",
"pos": 2,
"end": 8
},
"length": 1,
"pos": 2,
"end": 8,
"arrayKind": 1
}
}
@@ -0,0 +1,21 @@
{
"kind": "JSDocTupleType",
"pos": 1,
"end": 16,
"types": {
"0": {
"kind": "NumberKeyword",
"pos": 2,
"end": 8
},
"1": {
"kind": "StringKeyword",
"pos": 9,
"end": 15
},
"length": 2,
"pos": 2,
"end": 15,
"arrayKind": 1
}
}
@@ -0,0 +1,26 @@
{
"kind": "JSDocTupleType",
"pos": 1,
"end": 24,
"types": {
"0": {
"kind": "NumberKeyword",
"pos": 2,
"end": 8
},
"1": {
"kind": "StringKeyword",
"pos": 9,
"end": 15
},
"2": {
"kind": "BooleanKeyword",
"pos": 16,
"end": 23
},
"length": 3,
"pos": 2,
"end": 23,
"arrayKind": 1
}
}
@@ -0,0 +1,22 @@
{
"kind": "JSDocTypeReference",
"pos": 1,
"end": 11,
"name": {
"kind": "Identifier",
"pos": 1,
"end": 2,
"text": "a"
},
"typeArguments": {
"0": {
"kind": "NumberKeyword",
"pos": 4,
"end": 10
},
"length": 1,
"pos": 4,
"end": 10,
"arrayKind": 1
}
}
@@ -0,0 +1,27 @@
{
"kind": "JSDocTypeReference",
"pos": 1,
"end": 18,
"name": {
"kind": "Identifier",
"pos": 1,
"end": 2,
"text": "a"
},
"typeArguments": {
"0": {
"kind": "NumberKeyword",
"pos": 4,
"end": 10
},
"1": {
"kind": "StringKeyword",
"pos": 11,
"end": 17
},
"length": 2,
"pos": 4,
"end": 17,
"arrayKind": 1
}
}
@@ -0,0 +1,23 @@
{
"kind": "JSDocTypeReference",
"pos": 1,
"end": 11,
"name": {
"kind": "FirstNode",
"pos": 1,
"end": 11,
"left": {
"kind": "Identifier",
"pos": 1,
"end": 2,
"text": "a"
},
"right": {
"kind": "Identifier",
"pos": 3,
"end": 11,
"originalKeywordKind": "FunctionKeyword",
"text": "function"
}
}
}
@@ -0,0 +1,21 @@
{
"kind": "JSDocUnionType",
"pos": 1,
"end": 16,
"types": {
"0": {
"kind": "NumberKeyword",
"pos": 2,
"end": 8
},
"1": {
"kind": "StringKeyword",
"pos": 9,
"end": 15
},
"length": 2,
"pos": 2,
"end": 15,
"arrayKind": 1
}
}
@@ -0,0 +1,5 @@
{
"kind": "JSDocUnknownType",
"pos": 1,
"end": 2
}
@@ -0,0 +1,10 @@
{
"kind": "JSDocVariadicType",
"pos": 1,
"end": 10,
"type": {
"kind": "NumberKeyword",
"pos": 4,
"end": 10
}
}
File diff suppressed because it is too large Load Diff