mirror of
https://github.com/github/codeql.git
synced 2025-12-17 09:13:20 +01:00
53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
"""
|
|
Custom Pygments lexer for highlighting QL code.
|
|
|
|
Based on instructions from http://pygments.org/docs/lexerdevelopment/.
|
|
"""
|
|
|
|
import re
|
|
|
|
from pygments.lexer import RegexLexer, words
|
|
from pygments.token import Operator, Punctuation, Keyword, Comment, \
|
|
Name, Number, String, Text
|
|
|
|
class QLLexer(RegexLexer):
|
|
|
|
name = 'QL'
|
|
aliases = ['ql']
|
|
filenames = ['*.ql','*.qll']
|
|
mimetype = ['text/x-ql']
|
|
|
|
flags = re.MULTILINE
|
|
|
|
tokens = {
|
|
'root': [
|
|
(r'\r\n|\r|\n', Text),
|
|
(r'\s+', Text),
|
|
(r'\"([^\\\"\n\r\t]|\\[\"nrt\\])*\"', String),
|
|
(r'[0-9]+(\.[0-9])?', Number),
|
|
(r'[,;.()\[\]{}]', Punctuation),
|
|
# Comments (one-line, multiline, and QLDoc)
|
|
(r'\/\/.*$', Comment.Single),
|
|
(r'\/\*([^\*][\s\S]*?)?\*\/', Comment.Multiline),
|
|
(r'\/\*(?!\*\/)\*[\s\S]*?\*\/', Comment.Preproc),
|
|
# Operators
|
|
(r'<=|>=|!=|\.\.|::|[<>=\-\/*%+|]', Operator),
|
|
# Keywords
|
|
(r'\b(boolean|date|float|int|string)\b', Keyword.Type),
|
|
(r'\b(abstract|cached|deprecated|external|final|library|override|private|query'
|
|
r'|(pragma|language|bindingset)\[\w*(,\s*\w*)*\])\s',
|
|
Keyword.Reserved),
|
|
(words((
|
|
'and', 'any', 'as', 'asc', 'avg', 'by', 'class','concat', 'count',
|
|
'desc', 'else', 'exists', 'extends', 'false', 'forall',
|
|
'forex', 'from', 'if', 'implies', 'import', 'in', 'instanceof',
|
|
'max', 'min', 'module', 'newtype', 'not', 'none', 'or', 'order',
|
|
'predicate', 'rank', 'result', 'select', 'strictconcat',
|
|
'strictcount', 'strictsum', 'sum', 'super', 'then', 'this',
|
|
'true', 'unique', 'where'), prefix=r'\b', suffix=r'\b'),
|
|
Keyword),
|
|
# Identifiers
|
|
(r'@?\w', Name),
|
|
]
|
|
}
|