xdoc-parser
Version:
An XDoc comment parser.
1,551 lines (1,484 loc) • 106 kB
text/typescript
import * as chai from 'chai';
import XDocASTVisitor from "../src/XDocASTVisitor";
import XDocASTGenerator from '../src/XDocASTGenerator';
import { createDocumentationNode, createTagNode, createTagNameNode, createIdentifierNode, createBodyNode, TagNode, DocumentationNode, createDescriptionNode, createTagIdentifierNode, createTypeNode, createPrimaryTypeNode, createUnionTypeNode, createIntersectTypeNode, createLambdaTypeNode, createParameterNode, createFormalParemeterSequenceNode, createTupleTypeNode, createParenthesizedTypeNode, createUnaryTypeNode, createPropertyIdentifierNode, createObjectTypeNode, createObjectPairTypeNode, createArrayTypeNode, createExpressionNode, createLiteralExpressionNode, createUnaryExpressionNode, createBinaryExpressionNode, createArrayExpressionNode, createObjectExpressionNode, createObjectPairExpressionNode, createLambdaExpressionNode, createParenthesizedExpressioneNode, createInlineTagNode, createTupleExtendedTypeNode } from '../src/XDocASTNode';
import * as FS from 'fs';
import { DocumentationContext } from '../src/XDocSyntaxParser';
import { type } from 'os';
/* Helpers */
const equal = chai.assert.deepEqual;
const generate = (source) => new XDocASTGenerator(source).generate();
const parse = (source: string) =>
new XDocASTVisitor(generate(source)).visit();
const documentation = (annotations: TagNode[]): Partial<DocumentationNode> => createDocumentationNode(
createBodyNode(
annotations
)
)
// console.log(JSON.stringify(parse(`@tag id: (type & type) | type - Description`), null, 2));
describe('XDoc Syntax Parser (Tom)', () => {
describe('parse simple annotations', () => {
it('should parse @tag', () => equal(
parse('@tag'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
null,
null,
null,
null
)])
));
it('should parse @tag - description', () => equal(
parse('@tag - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
null,
null,
null,
createDescriptionNode('description', [])
)])
));
it('should parse @tag id', () => equal(
parse('@tag id'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
null,
null,
null
)])
));
it('should parse @tag id - description', () => equal(
parse('@tag id - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
null,
null,
createDescriptionNode('description')
)])
));
});
describe('parse complex annotations (the ones JSDoc can\'t do)', () => {
describe('parse typed annotations', () => {
/*
* ====================
* Parse primary type
* ====================
*/
describe('parse primary type', () => {
it('should parse @tag id: type', () => equal(
parse('@tag id: type'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
null,
null
)])
));
it('should parse @tag id: type - description', () => equal(
parse('@tag id: type - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id?: type', () => equal(
parse('@tag id?: type'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id', true),
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
null,
null
)])
));
it('should parse @tag id?: type - description', () => equal(
parse('@tag id?: type - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id', true),
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: type.type.type', () => equal(
parse('@tag id: type.type.type'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createPrimaryTypeNode(
createPropertyIdentifierNode([
createIdentifierNode('type'),
createIdentifierNode('type'),
createIdentifierNode('type')
], 'type.type.type')
)
),
null,
null
)])
));
it('should parse @tag id: type.type.type - description', () => equal(
parse('@tag id: type.type.type - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createPrimaryTypeNode(
createPropertyIdentifierNode([
createIdentifierNode('type'),
createIdentifierNode('type'),
createIdentifierNode('type')
], 'type.type.type')
)
),
null,
createDescriptionNode('description')
)])
));
});
/*
* ====================
* Parse union type
* ====================
*/
describe('parse union type', () => {
it('should parse @tag id: type & type', () => equal(
parse('@tag id: type & type'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createUnionTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
null
)])
));
it('should parse @tag id: type & type - description', () => equal(
parse('@tag id: type & type - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createUnionTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
createDescriptionNode('description')
)])
));
})
/*
* ====================
* Parse intersection type
* ====================
*/
describe('parse intersection type', () => {
it('should parse @tag id: type | type', () => equal(
parse('@tag id: type | type'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createIntersectTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
null
)])
));
it('should parse @tag id: type | type - description', () => equal(
parse('@tag id: type | type - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createIntersectTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
createDescriptionNode('description')
)])
));
})
/*
* ====================
* Parse lambda type
* ====================
*/
describe('parse lambda type', () => {
it('should parse @tag id: () => type', () => equal(
parse('@tag id: () => type'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createLambdaTypeNode(
null,
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
null
)])
));
it('should parse @tag id: () => type - description', () => equal(
parse('@tag id: () => type - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createLambdaTypeNode(
null,
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: () => type[]', () => equal(
parse('@tag id: () => type[]'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createLambdaTypeNode(
null,
createTypeNode(
createArrayTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
null
)
)
)
),
null,
null
)])
));
it('should parse @tag id: () => type[] - description', () => equal(
parse('@tag id: () => type[] - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createLambdaTypeNode(
null,
createTypeNode(
createArrayTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
null
)
)
)
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: (id) => type', () => equal(
parse('@tag id: (id) => type'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createLambdaTypeNode(
createFormalParemeterSequenceNode([
createParameterNode(
createIdentifierNode('id'),
null
)
]),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
null
)])
));
it('should parse @tag id: (id) => type - description', () => equal(
parse('@tag id: (id) => type - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createLambdaTypeNode(
createFormalParemeterSequenceNode([
createParameterNode(
createIdentifierNode('id'),
null
)
]),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: (id, id) => type', () => equal(
parse('@tag id: (id, id) => type'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createLambdaTypeNode(
createFormalParemeterSequenceNode([
createParameterNode(
createIdentifierNode('id'),
null
),
createParameterNode(
createIdentifierNode('id'),
null
)
]),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
null
)])
));
it('should parse @tag id: (id, id) => type - description', () => equal(
parse('@tag id: (id, id) => type - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createLambdaTypeNode(
createFormalParemeterSequenceNode([
createParameterNode(
createIdentifierNode('id'),
null
),
createParameterNode(
createIdentifierNode('id'),
null
)
]),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: (id, id) => type', () => equal(
parse('@tag id: (id, id) => type'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createLambdaTypeNode(
createFormalParemeterSequenceNode([
createParameterNode(
createIdentifierNode('id'),
null
),
createParameterNode(
createIdentifierNode('id'),
null
)
]),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
null
)])
));
it('should parse @tag id: (id: type, id: type) => type - description', () => equal(
parse('@tag id: (id: type, id: type) => type - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createLambdaTypeNode(
createFormalParemeterSequenceNode([
createParameterNode(
createIdentifierNode('id'),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
),
createParameterNode(
createIdentifierNode('id'),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
]),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: (id: type, id: type) => type', () => equal(
parse('@tag id: (id: type, id: type) => type'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createLambdaTypeNode(
createFormalParemeterSequenceNode([
createParameterNode(
createIdentifierNode('id'),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
),
createParameterNode(
createIdentifierNode('id'),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
]),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
null
)])
));
it('should parse @tag id: (id, id) => type - description', () => equal(
parse('@tag id: (id, id) => type - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createLambdaTypeNode(
createFormalParemeterSequenceNode([
createParameterNode(
createIdentifierNode('id'),
null
),
createParameterNode(
createIdentifierNode('id'),
null
)
]),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
createDescriptionNode('description')
)])
));
}); // End parse lambda type
/*
* ====================
* Parse tuple type
* ====================
*/
describe('parse tuple type', () => {
it('should parse @tag id: type<type>', () => equal(
parse('@tag id: type<type>'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createTupleTypeNode(
createIdentifierNode('type'),
[
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
]
)
),
null,
null
)])
));
it('should parse @tag id: type<type> - description', () => equal(
parse('@tag id: type<type> - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createTupleTypeNode(
createIdentifierNode('type'),
[
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
]
)
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: type<type, type>', () => equal(
parse('@tag id: type<type, type>'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createTupleTypeNode(
createIdentifierNode('type'),
[
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
]
)
),
null,
null
)])
));
it('should parse @tag id: type<type, type> - description', () => equal(
parse('@tag id: type<type, type> - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createTupleTypeNode(
createIdentifierNode('type'),
[
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
]
)
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: <type, type>', () => equal(
parse('@tag id: <type, type>'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createTupleTypeNode(
null,
[
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
]
)
),
null,
null
)])
));
it('should parse @tag id: <type, type> - description', () => equal(
parse('@tag id: <type, type> - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createTupleTypeNode(
null,
[
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
]
)
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: <type extends type, type>', () => equal(
parse('@tag id: <type extends type, type>'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createTupleTypeNode(
null,
[
createTupleExtendedTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
),
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
]
)
),
null,
null
)])
));
it('should parse @tag id: <type extends type, type> - description', () => equal(
parse('@tag id: <type extends type, type> - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createTupleTypeNode(
null,
[
createTupleExtendedTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
),
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
]
)
),
null,
createDescriptionNode('description')
)])
));
}) // End tuple type
/*
* ====================
* Parse parenthesized type
* ====================
*/
describe('parse parenthesized type', () => {
it('should parse @tag id: (type)', () => equal(
parse('@tag id: (type)'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createParenthesizedTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
null
)])
));
it('should parse @tag id: (type) - description', () => equal(
parse('@tag id: (type) - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createParenthesizedTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
),
null,
createDescriptionNode('description')
)])
));
}); // End parenthesized type
/*
* ====================
* Parse unary type
* ====================
*/
describe('parse unary type', () => {
it('should parse @tag id: *type', () => equal(
parse('@tag id: *type'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createUnaryTypeNode(
'*',
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
),
null,
null
)])
));
it('should parse @tag id: *type - description', () => equal(
parse('@tag id: *type - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createUnaryTypeNode(
'*',
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: &type', () => equal(
parse('@tag id: &type'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createUnaryTypeNode(
'&',
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
),
null,
null
)])
));
it('should parse @tag id: &type - description', () => equal(
parse('@tag id: &type - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createUnaryTypeNode(
'&',
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
),
null,
createDescriptionNode('description')
)])
));
}); // End unary type
/*
* ====================
* Parse object type
* ====================
*/
describe('parse object type', () => {
it('should parse @tag id: {}', () => equal(
parse('@tag id: {}'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createObjectTypeNode()
),
null,
null
)])
));
it('should parse @tag id: {} - description', () => equal(
parse('@tag id: {} - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createObjectTypeNode()
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: { type : type }', () => equal(
parse('@tag id: { type : type }'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createObjectTypeNode([
createObjectPairTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
])
),
null,
null
)])
));
it('should parse @tag id: { type : type } - description', () => equal(
parse('@tag id: { type : type } - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createObjectTypeNode([
createObjectPairTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
])
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: { type: { type: type } }', () => equal(
parse('@tag id: { type: { type: type } }'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createObjectTypeNode([
createObjectPairTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createObjectTypeNode([
createObjectPairTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
])
)
)
])
),
null,
null
)])
));
it('should parse @tag id: { type: { type: type } } - description', () => equal(
parse('@tag id: { type : { type: type } } - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createObjectTypeNode([
createObjectPairTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createObjectTypeNode([
createObjectPairTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
])
)
)
])
),
null,
createDescriptionNode('description')
)])
));
}); // End object type
/*
* ====================
* Parse array type
* ====================
*/
describe('parse array type', () => {
it('should parse @tag id: type[]', () => equal(
parse('@tag id: type[]'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createArrayTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
null
)
),
null,
null
)])
));
it('should parse @tag id: type[] - description', () => equal(
parse('@tag id: type[] - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createArrayTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
null
)
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: (type & type)[]', () => equal(
parse('@tag id: (type & type)[]'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createArrayTypeNode(
createTypeNode(
createParenthesizedTypeNode(
createTypeNode(
createUnionTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
)
)
),
null
)
),
null,
null
)])
));
it('should parse @tag id: (type & type)[] - description', () => equal(
parse('@tag id: (type & type)[] - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createArrayTypeNode(
createTypeNode(
createParenthesizedTypeNode(
createTypeNode(
createUnionTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
)
)
),
null
)
),
null,
createDescriptionNode('description')
)])
));
it('should parse @tag id: (type | type)[]', () => equal(
parse('@tag id: (type | type)[]'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createArrayTypeNode(
createTypeNode(
createParenthesizedTypeNode(
createTypeNode(
createIntersectTypeNode(
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
),
createTypeNode(
createPrimaryTypeNode(
createIdentifierNode('type')
)
)
)
)
)
),
null
)
),
null,
null
)])
));
it('should parse @tag id: (type | type)[] - description', () => equal(
parse('@tag id: (type | type)[] - description'),
documentation([
createTagNode(
createTagNameNode(
createIdentifierNode('tag')
),
createTagIdentifierNode(
createIdentifierNode('id'),
),
createTypeNode(
createArrayTypeNode(
createTypeNode(
createParenthesizedTypeNode(
createTypeNode(
createIntersectTypeNode(
createTypeNode(
createPrimaryTypeNode(