compodoc/ngd

View on GitHub
src/modules/compiler/src/codegen.ts

Summary

Maintainability
B
4 hrs
Test Coverage
// NOT USED FOR NOW

import * as ts from 'typescript';

let code: string[] = [];

export let gen = (function () {
    let tmp: typeof code = [];

    return (token = null) => {
        if (!token) {
            return code;
        }
        else if (token === '\n') {
            code.push(tmp.join(''));
            tmp = [];
        }
        else {
            tmp.push(token);
        }
        return code;
    }
} ());

export 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(node.text);
            break;
        case ts.SyntaxKind.StringLiteral:
            gen('\'');
            gen(node.text);
            gen('\'');
            break;

        case ts.SyntaxKind.ArrayLiteralExpression:
            console.log('array', node);
            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;
    }
}