2017-08-11 98 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