映えるGoコード
CSSで柔軟にカスタマイズできるコードハイライトツールの紹介
Backend Engineer @ Finatext
package main
import "fmt"
func main() {
ch := make(chan float64)
ch <- 1.0e10 // magic number
x, ok := <-ch
defer fmt.Println(`exiting now`)
go println(len("hello world!"))
return
}
package main
import "fmt"
func main() {
ch := make(chan float64)
ch <- 1.0e10 // magic number
x, ok := <-ch
defer fmt.Println(`exiting now`)
go println(len("hello world!"))
return
}
- package main
- import "fmt"
- func main() {
- ch := make(chan float64)
- ch <- 1.0e10 // magic number
- x, ok := <-ch
- defer fmt.Println(`exiting now`)
- go println(len("hello world!"))
- return
- }
- package main
- import "fmt"
- func main() {
- ch := make(chan float64)
- ch <- 1.0e10 // magic number
- x, ok := <-ch
- defer fmt.Println(`exiting now`)
- go println(len("hello world!"))
- return
- }
<pre>
<code class="language-go">
package main
import "fmt"
func main() {
ch := make(chan float64)
ch <- 1.0e10 // magic number
x, ok := <-ch
defer fmt.Println(`exiting now`)
go println(len("hello world!"))
return
}
</code>
</pre>
- package main
- import "fmt"
- func main() {
- ch := make(chan float64)
- ch <- 1.0e10 // magic number
- x, ok := <-ch
- defer fmt.Println(`exiting now`)
- go println(len("hello world!"))
- return
- }
- package main
- import "fmt"
- func main() {
- ch := make(chan float64)
- ch <- 1.0e10 // magic number
- x, ok := <-ch
- defer fmt.Println(`exiting now`)
- go println(len("hello world!"))
- return
- }
- package main
- import "fmt"
- func main() {
- ch := make(chan float64)
- ch <- 1.0e10 // magic number
- x, ok := <-ch
- defer fmt.Println(`exiting now`)
- go println(len("hello world!"))
- return
- }
- package main
- import "fmt"
- func main() {
- ch := make(chan float64)
- ch <- 1.0e10 // magic number
- x, ok := <-ch
- defer fmt.Println(`exiting now`)
- go println(len("hello world!"))
- return
- }
- package main
- import "fmt"
- func main() {
- ch := make(chan float64)
- ch <- 1.0e10 // magic number
- x, ok := <-ch
- defer fmt.Println(`exiting now`)
- go println(len("hello world!"))
- return
- }
- package main
- import "fmt"
- func main() {
- ch := make(chan float64)
- ch <- 1.0e10 // magic number
- x, ok := <-ch
- defer fmt.Println(`exiting now`)
- go println(len("hello world!"))
- return
- }
- package main
- import "fmt"
- func main() {
- ch := make(chan float64)
- ch <- 1.0e10 // magic number
- x, ok := <-ch
- defer fmt.Println(`exiting now`)
- go println(len("hello world!"))
- return
- }
完成までの道のり
- package main
- import "fmt"
- func main() {
- fmt.Println("Hello, World!")
- }
- /*⇒7,keyword,[]*/package /*⇒4,namespace,[]*/main
- /*⇒6,keyword,[]*/import "fmt"/*⇐3,namespace,[]*/
- /*⇒4,keyword,[]*/func /*⇒4,function,[definition signature]*/main() {
- /*⇒3,namespace,[]*/fmt./*⇒7,function,[signature]*/Println(/*⇒15,string,[]*/"Hello, World!")
- }
go/parser/parser.go から
func (p *parser) parseFile() *ast.File { // 中略 // Don't bother parsing the rest if we // had errors scanning the first token. // Likely not a Go source file at all. if p.errors.Len() != 0 { return nil }
go/parser/parser.go から
// 中略 pos := p.expect(token.PACKAGE) // 中略 // Don't bother parsing the rest if we // had errors parsing the package clause. // Likely not a Go source file at all. if p.errors.Len() != 0 { return nil }
go/parser/parser.go から
func (p *parser) expect(/*中略*/) token.Pos { pos := p.pos if p.tok != tok { p.errorExpected(/*中略*/) } else { p.firstTokenFound = true } if p.firstTokenFound { p.next() // make progress } return pos }
go/parser/parser.go から
- func (p *parser) expect(/*中略*/) token.Pos {
- pos := p.pos
- if p.tok != tok {
- p.errorExpected(/*中略*/)
- } else {
- p.firstTokenFound = true
- }
- if p.firstTokenFound {
- p.next() // make progress
- }
- return pos
- }
- package main
- func init() {}
- func main() {
- a := 1
- }
🚨バグ発見🚨
- str := `
- test`
- str := `\r\n
- \r\n
- \r\n
- \r\n
- \r\n
- test`
- str := /*⇒1,string,[]*/`
- /*⇒0,string,[]*/
- /*⇒0,string,[]*/
- /*⇒0,string,[]*/
- /*⇒1,string,[]*/test`
以上、prettygo の仕組みでした!