...

Source file src/github.com/alecthomas/chroma/v2/lexers/go.go

Documentation: github.com/alecthomas/chroma/v2/lexers

     1  package lexers
     2  
     3  import (
     4  	"strings"
     5  
     6  	. "github.com/alecthomas/chroma/v2" // nolint
     7  )
     8  
     9  // Go lexer.
    10  var Go = Register(MustNewLexer(
    11  	&Config{
    12  		Name:      "Go",
    13  		Aliases:   []string{"go", "golang"},
    14  		Filenames: []string{"*.go"},
    15  		MimeTypes: []string{"text/x-gosrc"},
    16  		EnsureNL:  true,
    17  	},
    18  	goRules,
    19  ).SetAnalyser(func(text string) float32 {
    20  	if strings.Contains(text, "fmt.") && strings.Contains(text, "package ") {
    21  		return 0.5
    22  	}
    23  	if strings.Contains(text, "package ") {
    24  		return 0.1
    25  	}
    26  	return 0.0
    27  }))
    28  
    29  func goRules() Rules {
    30  	return Rules{
    31  		"root": {
    32  			{`\n`, Text, nil},
    33  			{`\s+`, Text, nil},
    34  			{`\\\n`, Text, nil},
    35  			{`//(.*?)\n`, CommentSingle, nil},
    36  			{`/(\\\n)?[*](.|\n)*?[*](\\\n)?/`, CommentMultiline, nil},
    37  			{`(import|package)\b`, KeywordNamespace, nil},
    38  			{`(var|func|struct|map|chan|type|interface|const)\b`, KeywordDeclaration, nil},
    39  			{Words(``, `\b`, `break`, `default`, `select`, `case`, `defer`, `go`, `else`, `goto`, `switch`, `fallthrough`, `if`, `range`, `continue`, `for`, `return`), Keyword, nil},
    40  			{`(true|false|iota|nil)\b`, KeywordConstant, nil},
    41  			{Words(``, `\b(\()`, `uint`, `uint8`, `uint16`, `uint32`, `uint64`, `int`, `int8`, `int16`, `int32`, `int64`, `float`, `float32`, `float64`, `complex64`, `complex128`, `byte`, `rune`, `string`, `bool`, `error`, `uintptr`, `print`, `println`, `panic`, `recover`, `close`, `complex`, `real`, `imag`, `len`, `cap`, `append`, `copy`, `delete`, `new`, `make`), ByGroups(NameBuiltin, Punctuation), nil},
    42  			{Words(``, `\b`, `uint`, `uint8`, `uint16`, `uint32`, `uint64`, `int`, `int8`, `int16`, `int32`, `int64`, `float`, `float32`, `float64`, `complex64`, `complex128`, `byte`, `rune`, `string`, `bool`, `error`, `uintptr`), KeywordType, nil},
    43  			{`\d+i`, LiteralNumber, nil},
    44  			{`\d+\.\d*([Ee][-+]\d+)?i`, LiteralNumber, nil},
    45  			{`\.\d+([Ee][-+]\d+)?i`, LiteralNumber, nil},
    46  			{`\d+[Ee][-+]\d+i`, LiteralNumber, nil},
    47  			{`\d+(\.\d+[eE][+\-]?\d+|\.\d*|[eE][+\-]?\d+)`, LiteralNumberFloat, nil},
    48  			{`\.\d+([eE][+\-]?\d+)?`, LiteralNumberFloat, nil},
    49  			{`0[0-7]+`, LiteralNumberOct, nil},
    50  			{`0[xX][0-9a-fA-F_]+`, LiteralNumberHex, nil},
    51  			{`0b[01_]+`, LiteralNumberBin, nil},
    52  			{`(0|[1-9][0-9_]*)`, LiteralNumberInteger, nil},
    53  			{`'(\\['"\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|[^\\])'`, LiteralStringChar, nil},
    54  			{"(`)([^`]*)(`)", ByGroups(LiteralString, UsingLexer(TypeRemappingLexer(GoTextTemplate, TypeMapping{{Other, LiteralString, nil}})), LiteralString), nil},
    55  			{`"(\\\\|\\"|[^"])*"`, LiteralString, nil},
    56  			{`(<<=|>>=|<<|>>|<=|>=|&\^=|&\^|\+=|-=|\*=|/=|%=|&=|\|=|&&|\|\||<-|\+\+|--|==|!=|:=|\.\.\.|[+\-*/%&])`, Operator, nil},
    57  			{`([a-zA-Z_]\w*)(\s*)(\()`, ByGroups(NameFunction, UsingSelf("root"), Punctuation), nil},
    58  			{`[|^<>=!()\[\]{}.,;:]`, Punctuation, nil},
    59  			{`[^\W\d]\w*`, NameOther, nil},
    60  		},
    61  	}
    62  }
    63  
    64  var GoHTMLTemplate = Register(DelegatingLexer(HTML, MustNewXMLLexer(
    65  	embedded,
    66  	"embedded/go_template.xml",
    67  ).SetConfig(
    68  	&Config{
    69  		Name:    "Go HTML Template",
    70  		Aliases: []string{"go-html-template"},
    71  	},
    72  )))
    73  
    74  var GoTextTemplate = Register(MustNewXMLLexer(
    75  	embedded,
    76  	"embedded/go_template.xml",
    77  ).SetConfig(
    78  	&Config{
    79  		Name:    "Go Text Template",
    80  		Aliases: []string{"go-text-template"},
    81  	},
    82  ))
    83  

View as plain text