summaryrefslogtreecommitdiff
path: root/pygments/lexers/compiled.py
diff options
context:
space:
mode:
authorCorey Richardson <corey@octayn.net>2014-01-07 22:04:40 -0500
committerCorey Richardson <corey@octayn.net>2014-01-07 22:04:40 -0500
commite5b9c3c27d8851ec03b5b71aa9053532c9cda685 (patch)
tree261b46b4f25d3dc5b18c87f17201ce6bdf7ea085 /pygments/lexers/compiled.py
parent0e187dc6d5b3735c7fe82d79e6c2ceebeebc2d55 (diff)
downloadpygments-e5b9c3c27d8851ec03b5b71aa9053532c9cda685.tar.gz
Rust lexer: update to 0.9
The old lexer looked to be about 0.4 or 0.5. Notably, the lifetime and label syntax is properly handled, and macro invocation has been corrected.
Diffstat (limited to 'pygments/lexers/compiled.py')
-rw-r--r--pygments/lexers/compiled.py78
1 files changed, 61 insertions, 17 deletions
diff --git a/pygments/lexers/compiled.py b/pygments/lexers/compiled.py
index 75ace35e..d1745ac9 100644
--- a/pygments/lexers/compiled.py
+++ b/pygments/lexers/compiled.py
@@ -3183,12 +3183,12 @@ class FantomLexer(RegexLexer):
class RustLexer(RegexLexer):
"""
- Lexer for Mozilla's Rust programming language.
+ Lexer for the Rust programming language (version 0.9).
*New in Pygments 1.6.*
"""
name = 'Rust'
- filenames = ['*.rs', '*.rc']
+ filenames = ['*.rs']
aliases = ['rust']
mimetypes = ['text/x-rustsrc']
@@ -3197,47 +3197,83 @@ class RustLexer(RegexLexer):
# Whitespace and Comments
(r'\n', Text),
(r'\s+', Text),
+ (r'///(.*?)\n'),
(r'//(.*?)\n', Comment.Single),
(r'/[*](.|\n)*?[*]/', Comment.Multiline),
# Keywords
- (r'(as|assert|break|const'
- r'|copy|do|else|enum|extern|fail'
- r'|false|fn|for|if|impl|let|log'
- r'|loop|match|mod|move|mut|once|priv|pub|pure'
- r'|ref|return|static|struct|trait|true|type|unsafe|use|while'
- r'|u8|u16|u32|u64|i8|i16|i32|i64|uint'
- r'|int|float|f32|f64|str)\b', Keyword),
-
+ (r'(as|box|break|continue'
+ r'|do|else|enum|extern'
+ r'|fn|for|if|impl|in'
+ r'|loop|match|mut|priv|proc|pub'
+ r'|ref|return|static|\'static|struct|trait|true|type|unsafe|while',
+ Keyword),
+ (r'(alignof|be|const|offsetof|pure|sizeof|typeof|once|unsized'
+ r'|yield)', Keyword.Reserved),
+ (r'(mod|use)', Keyword.Namespace),
+ (r'(true|false)', Keyword.Constant),
+ (r'let', Keyword.Declaration),
+ (r'|u8|u16|u32|u64|i8|i16|i32|i64|uint|int|f32|f64', Keyword.Type),
+ (r'self', Name.Builtin.Pseudo),
+ # Prelude
+ (r'(Freeze|Pod|Send|Sized|Add|Sub|Mul|Div|Rem|Neg|Not|BitAnd'
+ r'|BitOr|BitXor|Drop|Shl|Shr|Index|Option|Some|None|Result'
+ r'|Ok|Err|from_str|range|print|println|Any|AnyOwnExt|AnyRefExt'
+ r'|AnyMutRefExt|Ascii|AsciiCast|OnwedAsciiCast|AsciiStr'
+ r'|IntoBytes|Bool|ToCStr|Char|Clone|DeepClone|Eq|ApproxEq'
+ r'|Ord|TotalEq|Ordering|Less|Equal|Greater|Equiv|Container'
+ r'|Mutable|Map|MutableMap|Set|MutableSet|Default|FromStr'
+ r'|Hash|FromIterator|Extendable|Iterator|DoubleEndedIterator'
+ r'|RandomAccessIterator|CloneableIterator|OrdIterator'
+ r'|MutableDoubleEndedIterator|ExactSize|Times|Algebraic'
+ r'|Trigonometric|Exponential|Hyperbolic|Bitwise|BitCount'
+ r'|Bounded|Integer|Fractional|Real|RealExt|Num|NumCast'
+ r'|CheckedAdd|CheckedSub|CheckedMul|Orderable|Signed'
+ r'|Unsigned|Round|Primitive|Int|Float|ToStrRadix'
+ r'|ToPrimitive|FromPrimitive|GenericPath|Path|PosixPath'
+ r'|WindowsPath|RawPtr|Buffer|Writer|Reader|Seek'
+ r'|SendStr|SendStrOwned|SendStrStatic|IntoSendStr|Str'
+ r'|StrVector|StrSlice|OwnedStr|IterBytes|ToStr|IntoStr'
+ r'|CopyableTuple|ImmutableTuple|ImmutableTuple\d+'
+ r'|Tuple\d+|ImmutableEqVector|ImmutableTotalOrdVector'
+ r'|ImmutableCopyableVector|OwnedVector|OwnedCopyableVector'
+ r'|OwnedEqVector|MutableVector|MutableTotalOrdVector'
+ r'|Vector|VectorVector|CopyableVector|ImmutableVector'
+ r'|Port|Chan|SharedChan|spawn|drop)\b', Name.Builtin),
+ # Borrowed pointer
+ (r'(&)(\'[A-Za-z_]\w*)?', bygroups(Operator, Name)),
+ # Labels
+ (r'\'[A-Za-z_]\w*:', Name.Label),
# Character Literal
(r"""'(\\['"\\nrt]|\\x[0-9a-fA-F]{2}|\\[0-7]{1,3}"""
r"""|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|.)'""",
String.Char),
# Binary Literal
- (r'0[Bb][01_]+', Number, 'number_lit'),
+ (r'0b[01_]+', Number, 'number_lit'),
# Octal Literal
- (r'0[0-7_]+', Number.Oct, 'number_lit'),
+ (r'0o[0-7_]+', Number.Oct, 'number_lit'),
# Hexadecimal Literal
(r'0[xX][0-9a-fA-F_]+', Number.Hex, 'number_lit'),
# Decimal Literal
(r'[0-9][0-9_]*(\.[0-9_]+[eE][+\-]?'
r'[0-9_]+|\.[0-9_]*|[eE][+\-]?[0-9_]+)?', Number, 'number_lit'),
# String Literal
- (r'"', String, 'string'),
+ (r'("|r")', String, 'string'),
# Operators and Punctuation
(r'[{}()\[\],.;]', Punctuation),
(r'[+\-*/%&|<>^!~@=:?]', Operator),
# Identifier
- (r'[a-zA-Z_$][a-zA-Z0-9_]*', Name),
+ (r'[a-zA-Z_]\w*', Name),
# Attributes
(r'#\[', Comment.Preproc, 'attribute['),
- (r'#\(', Comment.Preproc, 'attribute('),
# Macros
- (r'[A-Za-z_][A-Za-z0-9_]*!\[', Comment.Preproc, 'attribute['),
- (r'[A-Za-z_][A-Za-z0-9_]*!\(', Comment.Preproc, 'attribute('),
+ (r'([A-Za-z_]\w*)!\s*([A-Za-z_]\w*)?\s*\{',
+ bygroups(Comment.Preproc, Name), 'macro{'),
+ (r'([A-Za-z_]\w*)!\s*([A-Za-z_]\w*)?\(',
+ bygroups(Comment.Preproc, Name), 'macro('),
],
'number_lit': [
(r'(([ui](8|16|32|64)?)|(f(32|64)?))?', Keyword, '#pop'),
@@ -3249,6 +3285,14 @@ class RustLexer(RegexLexer):
(r'[^\\"]+', String),
(r'\\', String),
],
+ 'macro{': [
+ (r'{', Operator, '#push'),
+ (r'}', Operator, '#pop'),
+ ],
+ 'macro(': [
+ (r'(', Operator, '#push'),
+ (r')', Operator, '#pop'),
+ ],
'attribute_common': [
(r'"', String, 'string'),
(r'\[', Comment.Preproc, 'attribute['),