2013-08-02 71 views
0

我想製作一些函數來讀取源.coffee文件,使用CoffeeScript分析器檢查AST(可能使用traverseChildren函數),更改一些節點,然後將更改後的AST寫回目標.coffee文件。如何使用CoffeeScript API來操縱AST並編寫.coffee輸出

一個簡單的(但是沒用的)這種操作的例子是,我想找到樹中的所有字符串並連接「Luis在這裏」。所以,如果我有

console.log 'Hello, world!' 

然後我的功能通過文件消失後,它會產生:

console.log 'Hello, world!Luis was here' 

仍然是CoffeeScript的,而不是「編譯」的JavaScript。閱讀.coffee和生成.js文件非常容易,但這不是我想要的。我找不到使用CoffeeScript API執行此類任務的方法。

在此先感謝您的幫助...

回答

2

由於CoffeeScript的編譯器是寫在你的CoffeeScript CoffeeScript的中使用它。另外寫的CoffeeScript程序讀取您的源,操縱AST,然後編寫JavaScript:

一個簡單的例子,說在mycustom.coffee文件:

fs = require 'fs' 
coffee = require 'coffee-script' 

generateCustom = (source, destination, callback) -> 
    nodes = coffee.nodes source 
    # You now have access to the AST through nodes 
    # Walk the AST, modify it... 
    # and then write the JavaScript via compile() 
    js = nodes.compile() 
    fs.writeFile destination, js, (err) -> 
    if err then throw err 
    callback 'Done' 

destination = process.argv[3] 
source = process.argv[2] 
generateCustom source, destination, (report) -> console.log report 

調用該程序,如:

> coffee mycustom.coffee source.coffee destination.js

也就是說,如果您的轉換非常簡單,那麼您可能更容易通過操作令牌流來創建自定義重寫器。

+0

非常感謝,我會嘗試一下。 –