2017-06-13 2 views
1

Ich möchte TypeScript-Projekte in ASTs parsen.Wie man eine TypeScript-Codebasis in ASTs zerlegt

kann ich durch einzelne Datei analysieren:

import ts = require("typescript"); 
var fs   = require('fs'); 
var util  = require('util'); 


const ast = ts.createSourceFile('sample.ts', fs.readFileSync('sample.ts').toString(), ts.ScriptTarget.ES6, true); 

console.log("AST:"+util.inspect(ast)); 

Ich kann sogar eine Schleife durch die Dateien und Filtern von Dateien nach Erweiterung und über Code ausführen ASt erzeugen.

Allerdings möchte ich das gesamte Projekt so analysieren, dass die Beziehungen (wie Importe) in AST erhalten bleiben.

Zum Beispiel:

Wenn a.ts verweist var x von b.ts wie folgt:

a.ts:

var y = x; 

b.ts:

var x = 5; 

In diesem Fall sollte die Signatur von x in einem .ts wie folgt aufgelöst werden: b.ts.x oder gleichwertig.

Ich möchte nur solche Beziehungen in den ASts gelöst, wie ich die .ts-Dateien nacheinander analysieren.

Antwort

0

Sie können Ihr Projekt mit

ts.createProgram(rootNames: string[], options: CompilerOptions, host?: CompilerHost, oldProgram?: Program)

Stammnamen ist die Liste aller Typoskript Dateien in Ihrem Projekt laden. Soweit ich weiß, wird AST keinen Verweis darauf haben, es sei denn, Sie geben den Typ explizit an.

für zB. Wenn Sie

class MyClass { 
    // some code 
} 

let instance1 = new MyClass(); 
let instance2: MyClass = new MyClass(); 

In AST haben, Knoten für instance1 wird type-Eigenschaft als nicht definiert haben, für instance2 Typ Eigenschaft TypeReference

Für Typ ordnungsgemäße haben Überprüfung Sie Program.getTypeChecker() verwenden können. Dies gibt eine TypeChecker zurück, mit der Dateien im Programm analysiert werden können.

Verwandte Themen