Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pygments/lexers/go.py: 100%
10 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-01 06:54 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-01 06:54 +0000
1"""
2 pygments.lexers.go
3 ~~~~~~~~~~~~~~~~~~
5 Lexers for the Google Go language.
7 :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
8 :license: BSD, see LICENSE for details.
9"""
11from pygments.lexer import RegexLexer, bygroups, words
12from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
13 Number, Punctuation, Whitespace
15__all__ = ['GoLexer']
18class GoLexer(RegexLexer):
19 """
20 For Go source.
22 .. versionadded:: 1.2
23 """
24 name = 'Go'
25 url = 'https://go.dev/'
26 filenames = ['*.go']
27 aliases = ['go', 'golang']
28 mimetypes = ['text/x-gosrc']
30 tokens = {
31 'root': [
32 (r'\n', Whitespace),
33 (r'\s+', Whitespace),
34 (r'(\\)(\n)', bygroups(Text, Whitespace)), # line continuations
35 (r'//(.*?)$', Comment.Single),
36 (r'/(\\\n)?[*](.|\n)*?[*](\\\n)?/', Comment.Multiline),
37 (r'(import|package)\b', Keyword.Namespace),
38 (r'(var|func|struct|map|chan|type|interface|const)\b',
39 Keyword.Declaration),
40 (words((
41 'break', 'default', 'select', 'case', 'defer', 'go',
42 'else', 'goto', 'switch', 'fallthrough', 'if', 'range',
43 'continue', 'for', 'return'), suffix=r'\b'),
44 Keyword),
45 (r'(true|false|iota|nil)\b', Keyword.Constant),
46 # It seems the builtin types aren't actually keywords, but
47 # can be used as functions. So we need two declarations.
48 (words((
49 'uint', 'uint8', 'uint16', 'uint32', 'uint64',
50 'int', 'int8', 'int16', 'int32', 'int64',
51 'float', 'float32', 'float64',
52 'complex64', 'complex128', 'byte', 'rune',
53 'string', 'bool', 'error', 'uintptr', 'any', 'comparable',
54 'print', 'println', 'panic', 'recover', 'close', 'complex',
55 'real', 'imag', 'len', 'cap', 'append', 'copy', 'delete',
56 'new', 'make'), suffix=r'\b(\()'),
57 bygroups(Name.Builtin, Punctuation)),
58 (words((
59 'uint', 'uint8', 'uint16', 'uint32', 'uint64',
60 'int', 'int8', 'int16', 'int32', 'int64',
61 'float', 'float32', 'float64',
62 'complex64', 'complex128', 'byte', 'rune',
63 'string', 'bool', 'error', 'uintptr', 'any', 'comparable'), suffix=r'\b'),
64 Keyword.Type),
65 # imaginary_lit
66 (r'\d+i', Number),
67 (r'\d+\.\d*([Ee][-+]\d+)?i', Number),
68 (r'\.\d+([Ee][-+]\d+)?i', Number),
69 (r'\d+[Ee][-+]\d+i', Number),
70 # float_lit
71 (r'\d+(\.\d+[eE][+\-]?\d+|'
72 r'\.\d*|[eE][+\-]?\d+)', Number.Float),
73 (r'\.\d+([eE][+\-]?\d+)?', Number.Float),
74 # int_lit
75 # -- octal_lit
76 (r'0[0-7]+', Number.Oct),
77 # -- hex_lit
78 (r'0[xX][0-9a-fA-F]+', Number.Hex),
79 # -- decimal_lit
80 (r'(0|[1-9][0-9]*)', Number.Integer),
81 # char_lit
82 (r"""'(\\['"\\abfnrtv]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}"""
83 r"""|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|[^\\])'""",
84 String.Char),
85 # StringLiteral
86 # -- raw_string_lit
87 (r'`[^`]*`', String),
88 # -- interpreted_string_lit
89 (r'"(\\\\|\\[^\\]|[^"\\])*"', String),
90 # Tokens
91 (r'(<<=|>>=|<<|>>|<=|>=|&\^=|&\^|\+=|-=|\*=|/=|%=|&=|\|=|&&|\|\|'
92 r'|<-|\+\+|--|==|!=|:=|\.\.\.|[+\-*/%&]'
93 r'|~|\|)', Operator),
94 (r'[|^<>=!()\[\]{}.,;:]', Punctuation),
95 # identifier
96 (r'[^\W\d]\w*', Name.Other),
97 ]
98 }