Tuesday, May 4, 2010

Test for the Go syntax highlighter

I got some feedback from the Go Nuts mailing list, particularly from Russ Cox who pointed out that predefined identifiers like true, nil, int, and float are not reserved keywords.  So I decided to have two kinds of highlighted keywords:
  1. those that start a type or start a declaration, including for packages:
    struct func interface map chan package import type const var
  2. those that control the flow of the code:
    goto break continue if else switch default case for range go select return fallthrough defer

Then I use the code from $GOROOT/test/rename.go and rename1.go to see the effect of this color scheme:
// $G $D/$F.go && $L $F.$A && ./$A.out

// Copyright 2009 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

import "fmt"

func main() {
   n :=
      bool +
         byte +
         float +
         float32 +
         float64 +
         int +
         int8 +
         int16 +
         int32 +
         int64 +
         uint +
         uint8 +
         uint16 +
         uint32 +
         uint64 +
         uintptr +
         true +
         false +
         iota +
         nil +
         cap +
         len +
         make +
         new +
         panic +
         print +
         println
   if n != 27*28/2 {
      fmt.Println("BUG: wrong n", n, 27*28/2)
   }

   var n byte       // ERROR "not a type|expected type"
   var y = float(0) // ERROR "cannot call|expected function"
   const (
      a = 1 + iota // ERROR "string|incompatible types"
   )
}

const (
   bool    = 1
   byte    = 2
   float   = 3
   float32 = 4
   float64 = 5
   int     = 6
   int8    = 7
   int16   = 8
   int32   = 9
   int64   = 10
   uint    = 11
   uint8   = 12
   uint16  = 13
   uint32  = 14
   uint64  = 15
   uintptr = 16
   true    = 17
   false   = 18
   iota    = 19
   nil     = 20
   cap     = 21
   len     = 22
   make    = 23
   new     = 24
   panic   = 25
   print   = 26
   println = 27
)

In the end, if it doesn't suit your aesthetic tastes, you could always download the script and tweak it.

No comments:

Post a Comment