ThirdParty/Pygments/pygments/lexers/rust.py

changeset 5713
6762afd9f963
parent 4697
c2e9bf425554
child 6651
e8f3b5568b21
diff -r f0d08bdeacf4 -r 6762afd9f963 ThirdParty/Pygments/pygments/lexers/rust.py
--- a/ThirdParty/Pygments/pygments/lexers/rust.py	Sun Apr 23 16:40:31 2017 +0200
+++ b/ThirdParty/Pygments/pygments/lexers/rust.py	Tue Apr 25 18:36:38 2017 +0200
@@ -5,7 +5,7 @@
 
     Lexers for the Rust language.
 
-    :copyright: Copyright 2006-2015 by the Pygments team, see AUTHORS.
+    :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS.
     :license: BSD, see LICENSE for details.
 """
 
@@ -18,7 +18,7 @@
 
 class RustLexer(RegexLexer):
     """
-    Lexer for the Rust programming language (version 1.0).
+    Lexer for the Rust programming language (version 1.10).
 
     .. versionadded:: 1.6
     """
@@ -27,6 +27,35 @@
     aliases = ['rust']
     mimetypes = ['text/rust']
 
+    keyword_types = (
+        words(('u8', 'u16', 'u32', 'u64', 'i8', 'i16', 'i32', 'i64',
+               'usize', 'isize', 'f32', 'f64', 'str', 'bool'),
+              suffix=r'\b'),
+        Keyword.Type)
+
+    builtin_types = (words((
+        # Reexported core operators
+        'Copy', 'Send', 'Sized', 'Sync',
+        'Drop', 'Fn', 'FnMut', 'FnOnce',
+
+        # Reexported types and traits
+        'Box',
+        'ToOwned',
+        'Clone',
+        'PartialEq', 'PartialOrd', 'Eq', 'Ord',
+        'AsRef', 'AsMut', 'Into', 'From',
+        'Default',
+        'Iterator', 'Extend', 'IntoIterator',
+        'DoubleEndedIterator', 'ExactSizeIterator',
+        'Option',
+        'Some', 'None',
+        'Result',
+        'Ok', 'Err',
+        'SliceConcatExt',
+        'String', 'ToString',
+        'Vec'), suffix=r'\b'),
+        Name.Builtin)
+
     tokens = {
         'root': [
             # rust allows a file to start with a shebang, but if the first line
@@ -49,50 +78,32 @@
             (r"""\$([a-zA-Z_]\w*|\(,?|\),?|,?)""", Comment.Preproc),
             # Keywords
             (words((
-                'as', 'box', 'crate', 'do', 'else', 'enum', 'extern',  # break and continue are in labels
-                'fn', 'for', 'if', 'impl', 'in', 'loop', 'match', 'mut', 'priv',
-                'proc', 'pub', 'ref', 'return', 'static', 'struct',
-                'trait', 'true', 'type', 'unsafe', 'while'), suffix=r'\b'),
+                'as', 'box', 'const', 'crate', 'else', 'extern',
+                'for', 'if', 'impl', 'in', 'loop', 'match', 'move',
+                'mut', 'pub', 'ref', 'return', 'static', 'super',
+                'trait', 'unsafe', 'use', 'where', 'while'), suffix=r'\b'),
              Keyword),
-            (words(('alignof', 'be', 'const', 'offsetof', 'pure', 'sizeof',
-                    'typeof', 'once', 'unsized', 'yield'), suffix=r'\b'),
+            (words(('abstract', 'alignof', 'become', 'do', 'final', 'macro',
+                    'offsetof', 'override', 'priv', 'proc', 'pure', 'sizeof',
+                    'typeof', 'unsized', 'virtual', 'yield'), suffix=r'\b'),
              Keyword.Reserved),
-            (r'(mod|use)\b', Keyword.Namespace),
             (r'(true|false)\b', Keyword.Constant),
+            (r'mod\b', Keyword, 'modname'),
             (r'let\b', Keyword.Declaration),
-            (words(('u8', 'u16', 'u32', 'u64', 'i8', 'i16', 'i32', 'i64', 'usize',
-                    'isize', 'f32', 'f64', 'str', 'bool'), suffix=r'\b'),
-             Keyword.Type),
+            (r'fn\b', Keyword, 'funcname'),
+            (r'(struct|enum|type|union)\b', Keyword, 'typename'),
+            (r'(default)(\s+)(type|fn)\b', bygroups(Keyword, Text, Keyword)),
+            keyword_types,
             (r'self\b', Name.Builtin.Pseudo),
             # Prelude (taken from Rust’s src/libstd/prelude.rs)
-            (words((
-                # Reexported core operators
-                'Copy', 'Send', 'Sized', 'Sync',
-                'Drop', 'Fn', 'FnMut', 'FnOnce',
-
-                # Reexported functions
-                'drop',
-
-                # Reexported types and traits
-                'Box',
-                'ToOwned',
-                'Clone',
-                'PartialEq', 'PartialOrd', 'Eq', 'Ord',
-                'AsRef', 'AsMut', 'Into', 'From',
-                'Default',
-                'Iterator', 'Extend', 'IntoIterator',
-                'DoubleEndedIterator', 'ExactSizeIterator',
-                'Option',
-                'Some', 'None',
-                'Result',
-                'Ok', 'Err',
-                'SliceConcatExt',
-                'String', 'ToString',
-                'Vec',
-                ), suffix=r'\b'),
-             Name.Builtin),
+            builtin_types,
+            # Path seperators, so types don't catch them.
+            (r'::\b', Text),
+            # Types in positions.
+            (r'(?::|->)', Text, 'typename'),
             # Labels
-            (r'(break|continue)(\s*)(\'[A-Za-z_]\w*)?', bygroups(Keyword, Text.Whitespace, Name.Label)),
+            (r'(break|continue)(\s*)(\'[A-Za-z_]\w*)?',
+             bygroups(Keyword, Text.Whitespace, Name.Label)),
             # Character Literal
             (r"""'(\\['"\\nrt]|\\x[0-7][0-9a-fA-F]|\\0"""
              r"""|\\u\{[0-9a-fA-F]{1,6}\}|.)'""",
@@ -108,7 +119,8 @@
             (r'0[xX][0-9a-fA-F_]+', Number.Hex, 'number_lit'),
             # Decimal Literal
             (r'[0-9][0-9_]*(\.[0-9_]+[eE][+\-]?[0-9_]+|'
-             r'\.[0-9_]*(?!\.)|[eE][+\-]?[0-9_]+)', Number.Float, 'number_lit'),
+             r'\.[0-9_]*(?!\.)|[eE][+\-]?[0-9_]+)', Number.Float,
+             'number_lit'),
             (r'[0-9][0-9_]*', Number.Integer, 'number_lit'),
             # String Literal
             (r'b"', String, 'bytestring'),
@@ -148,6 +160,24 @@
             (r'\*/', String.Doc, '#pop'),
             (r'[*/]', String.Doc),
         ],
+        'modname': [
+            (r'\s+', Text),
+            (r'[a-zA-Z_]\w*', Name.Namespace, '#pop'),
+            default('#pop'),
+        ],
+        'funcname': [
+            (r'\s+', Text),
+            (r'[a-zA-Z_]\w*', Name.Function, '#pop'),
+            default('#pop'),
+        ],
+        'typename': [
+            (r'\s+', Text),
+            (r'&', Keyword.Pseudo),
+            builtin_types,
+            keyword_types,
+            (r'[a-zA-Z_]\w*', Name.Class, '#pop'),
+            default('#pop'),
+        ],
         'number_lit': [
             (r'[ui](8|16|32|64|size)', Keyword, '#pop'),
             (r'f(32|64)', Keyword, '#pop'),

eric ide

mercurial