2017-08-11 6 views
0

書式設定でgofmtを使用すると、項目をまとめてグループ化できるように改行が維持されます。私はこれが実際どのように実装されているかに興味があります。 github repo golang/goのソースコードを見てみましたが、すぐに見つかりませんでした。あなたはhttps://github.com/golang/go/blob/master/src/go/printer/printer.go#L979を見れば:gofmt改行の保存

// intersperse extra newlines if present in the source 

はどのようにプリンタがそれらの余分改行がソースに存在している知っているのですか? 誰かが私を正しい方向に向けることができますか? internal.gopackage `ライン40-41で

答えて

2

ほとんどのレクサーとは異なり、ゴーレクサーには、コンパイラのレクサーによって削除または省略されることが多いトークンが含まれています。レクサーによって発行されるトークンのストリームには、とりわけ、コメント用のトークン、暗黙のセミコロン、改行、改行(FF)、およびその他の空白が含まれます。これにより、同じトークンストリームを使用してソースを再生成し、ASTなどのコンパイラが必要とする構造を作成することができます。

+0

お返事ありがとうございます! 改行の出所はどこで確認できますか? https://github.com/golang/go/blob/master/src/go/token/token.go 特定の改行トークンが含まれていないようです。 – Seneca

0

このあります:使用して

//挿入;、ない改行、pSrc内の//

行番号となるようにsrc内のものと一致します。

そして、この:

psrc := append([]byte("package p;"), src...) 
file, err = parser.ParseFile(fset, filename, psrc, parserMode) 

は、あなたが探しているものということでしょうか?もし私があなたの質問を正しければ。

+0

本当に、私はhttps://github.com/golang/go/blob/master/src/go/printer/printer.go#L979の後にいます '//ソースに追加の改行がある場合 プリンタには、追加の改行がソースにどのように存在していることが分かりますか? – Seneca

関連する問題