cmd/gofmt/gofmt.go
cmd/gofmt/gofmt.go
processFile()
processFile()
ast.SortImports(fileSet, file)
if *simplifyAST {
simplify(file)
}
res, err := format(fileSet, file, sourceAdj, indentAdj, src, p
if err != nil {
return err
}
13
Slide 14
Slide 14 text
cmd/gofmt/internal.go
cmd/gofmt/internal.go
format
format
var buf bytes.Buffer
err := cfg.Fprint(&buf, fset, file)
if err != nil {
return nil, err
}
return buf.Bytes(), nil
14
Slide 15
Slide 15 text
go/printer/printer.go
go/printer/printer.go
Fprint() →
Fprint() → fprint()
fprint()
AST
ノードを整形・出力するパッケージ
var p printer
p.init(cfg, fset, nodeSizes)
if err = p.printNode(node); err != nil {
return
}
15
Slide 16
Slide 16 text
go/printer/printer.go
go/printer/printer.go
printNode()
printNode()
switch n := node.(type) {
case ast.Expr:
p.expr(n)
case ast.Stmt:
if _, ok := n.(*ast.LabeledStmt); ok {
p.indent = 1
}
p.stmt(n, false)
case ast.Decl:
p.decl(n)
case ast.Spec:
p.spec(n, 1, false)
case []ast.Stmt:
for _, s := range n {
if _, ok := s.(*ast.LabeledStmt); ok {
16
整形ルール
整形ルール
テキストの単語間のスペースは1つ
に
this is a text!
this is a text!
33
Slide 34
Slide 34 text
整形ルール
整形ルール
水平線 (hr)
の上下に空
行
horizontal
---
line
horizontal
---
line
34
Slide 35
Slide 35 text
demo
demo
35
Slide 36
Slide 36 text
これはデモ用のテキストです
これはデモ用のテキストです
this text is an example text for demonstration. current
version of markdownfmt accepts 80 charactors as the
max width. so, maybe this text will be splitted to some
lines.
36