compodoc
Version:
The missing documentation tool for your Angular application
170 lines (148 loc) • 4.04 kB
text/typescript
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;
}
}