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

1""" 

2 pygments.lexers.go 

3 ~~~~~~~~~~~~~~~~~~ 

4 

5 Lexers for the Google Go language. 

6 

7 :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. 

8 :license: BSD, see LICENSE for details. 

9""" 

10 

11from pygments.lexer import RegexLexer, bygroups, words 

12from pygments.token import Text, Comment, Operator, Keyword, Name, String, \ 

13 Number, Punctuation, Whitespace 

14 

15__all__ = ['GoLexer'] 

16 

17 

18class GoLexer(RegexLexer): 

19 """ 

20 For Go source. 

21 

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'] 

29 

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 }