UNPKG

compodoc

Version:

The missing documentation tool for your Angular application

170 lines (148 loc) 4.04 kB
import * as ts from 'typescript'; let code: string[] = []; export let gen = (function () { let tmp: typeof code = []; return (token = null) => { if (!token) { //console.log(' ! token'); return code; } else if (token === '\n') { //console.log(' \n'); code.push(tmp.join('')); tmp = []; } else { code.push(token); } return code; } } ()); export function generate(node: any) { code = []; visitAndRecognize(node); return code.join(''); } function visitAndRecognize(node: any, depth = 0) { recognize(node); depth++; node.getChildren().forEach(c => visitAndRecognize(c, depth)); } function recognize(node: any) { //console.log('recognizing...', ts.SyntaxKind[node.kind+'']); switch (node.kind) { case ts.SyntaxKind.FirstLiteralToken: case ts.SyntaxKind.Identifier: gen('\"'); gen(node.text); gen('\"'); break; case ts.SyntaxKind.StringLiteral: gen('\"'); gen(node.text); gen('\"'); break; case ts.SyntaxKind.ArrayLiteralExpression: break; case ts.SyntaxKind.ImportKeyword: gen('import'); gen(' '); break; case ts.SyntaxKind.FromKeyword: gen('from'); gen(' '); break; case ts.SyntaxKind.ExportKeyword: gen('\n'); gen('export'); gen(' '); break; case ts.SyntaxKind.ClassKeyword: gen('class'); gen(' '); break; case ts.SyntaxKind.ThisKeyword: gen('this'); break; case ts.SyntaxKind.ConstructorKeyword: gen('constructor'); break; case ts.SyntaxKind.FalseKeyword: gen('false'); break; case ts.SyntaxKind.TrueKeyword: gen('true'); break; case ts.SyntaxKind.NullKeyword: gen('null'); break; case ts.SyntaxKind.AtToken: break; case ts.SyntaxKind.PlusToken: gen('+'); break; case ts.SyntaxKind.EqualsGreaterThanToken: gen(' => '); break; case ts.SyntaxKind.OpenParenToken: gen('('); break; case ts.SyntaxKind.ImportClause: case ts.SyntaxKind.ObjectLiteralExpression: gen('{'); gen(' '); break; case ts.SyntaxKind.Block: gen('{'); gen('\n'); break; case ts.SyntaxKind.CloseBraceToken: gen('}'); break; case ts.SyntaxKind.CloseParenToken: gen(')'); break; case ts.SyntaxKind.OpenBracketToken: gen('['); break; case ts.SyntaxKind.CloseBracketToken: gen(']'); break; case ts.SyntaxKind.SemicolonToken: gen(';'); gen('\n'); break; case ts.SyntaxKind.CommaToken: gen(','); gen(' '); break; case ts.SyntaxKind.ColonToken: gen(' '); gen(':'); gen(' '); break; case ts.SyntaxKind.DotToken: gen('.'); break; case ts.SyntaxKind.DoStatement: break; case ts.SyntaxKind.Decorator: break; case ts.SyntaxKind.FirstAssignment: gen(' = '); break; case ts.SyntaxKind.FirstPunctuation: gen(' '); break; case ts.SyntaxKind.PrivateKeyword: gen('private'); gen(' '); break; case ts.SyntaxKind.PublicKeyword: gen('public'); gen(' '); break; default: break; } }