2017-08-11 192 views
0

當使用gofmt格式化源代碼時,它會保留換行符,以便將項目組合在一起。我對如何實際實施感興趣。我試着在github repo golang/go中查看源代碼,但無法立即找到它。如果你看看https://github.com/golang/go/blob/master/src/go/printer/printer.go#L979gofmt保留換行符

// intersperse extra newlines if present in the source 

打印機如何知道源代碼中存在額外的換行符? 有人能指引我進入正確的方向嗎?

回答

2

與大多數詞法分析器不同,詞法分析器包含通常由編譯器的詞法分析器刪除或刪除的標記。詞法分析器發出的令牌流包括用於評論的令牌,隱含的分號,換行符,換頁符(FF)和其他空格。這允許使用相同的標記流來重新生成源代碼並創建編譯器所需的結構,例如AST。

+0

感謝您的迴應! 我在哪裏可以找到換行符的發佈? https://github.com/golang/go/blob/master/src/go/token/token.go 似乎沒有包含特定的換行符。 – Seneca

0

internal.gopackage`線40-41有這樣的:使用

//插入;不換行,使該行的數字

//在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