Skip to content

Commit

Permalink
Added Smithy Lexer (#1878) (#1879)
Browse files Browse the repository at this point in the history
* Added Smithy Lexer (#1878)

* Added Smithy Lexer
* Added Smithy Lexer auhtor
* Documented Smithy as a supported language
* Added Smithy test file and output

* Updated Smithy Lexer

* Added Standard file heading with copyright and license
* Used `words` method for optimization, instead of bare regex
* Specified whitespace punctuation in root
* Updated aliases to only contain lowercase names to pass `test_basic_api` tests
* Updated regexes lightly to fit regexlint rules (removing duplicate characters in group `-`)
* Fixed regexes with errors in regexlint rules (Escaping brackets, gaps in capture groups)

* Ran mapping script to fix build check

* Ran mapping to update after changing aliases in previous commit
  • Loading branch information
immanuelqrw committed Aug 8, 2021
1 parent a768fb9 commit e2352ff
Show file tree
Hide file tree
Showing 6 changed files with 1,653 additions and 0 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Expand Up @@ -227,6 +227,7 @@ Other contributors, listed alphabetically, are:
* Matthias Vallentin -- Bro lexer
* Benoît Vinot -- AMPL lexer
* Linh Vu Hong -- RSL lexer
* Immanuel Washington -- Smithy lexer
* Nathan Weizenbaum -- Haml and Sass lexers
* Nathan Whetsell -- Csound lexers
* Dietmar Winkler -- Modelica lexer
Expand Down
1 change: 1 addition & 0 deletions doc/languages.rst
Expand Up @@ -280,6 +280,7 @@ Other markup
* Scdoc
* Sieve
* Singularity
* `Smithy <https://awslabs.github.io/smithy/>`_
* SPARQL
* SQL, also MySQL, SQLite
* Squid configuration
Expand Down
1 change: 1 addition & 0 deletions pygments/lexers/_mapping.py
Expand Up @@ -431,6 +431,7 @@
'SmalltalkLexer': ('pygments.lexers.smalltalk', 'Smalltalk', ('smalltalk', 'squeak', 'st'), ('*.st',), ('text/x-smalltalk',)),
'SmartGameFormatLexer': ('pygments.lexers.sgf', 'SmartGameFormat', ('sgf',), ('*.sgf',), ()),
'SmartyLexer': ('pygments.lexers.templates', 'Smarty', ('smarty',), ('*.tpl',), ('application/x-smarty',)),
'SmithyLexer': ('pygments.lexers.smithy', 'Smithy', ('smithy',), ('*.smithy',), ()),
'SnobolLexer': ('pygments.lexers.snobol', 'Snobol', ('snobol',), ('*.snobol',), ('text/x-snobol',)),
'SnowballLexer': ('pygments.lexers.dsls', 'Snowball', ('snowball',), ('*.sbl',), ()),
'SolidityLexer': ('pygments.lexers.solidity', 'Solidity', ('solidity',), ('*.sol',), ()),
Expand Down
79 changes: 79 additions & 0 deletions pygments/lexers/smithy.py
@@ -0,0 +1,79 @@
"""
pygments.lexers.smithy
~~~~~~~~~~~~~~~~~~~~~~~~~~
Lexers for the Smithy IDL.
:copyright: Copyright 2006-2021 by the Pygments team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""

import re

from pygments.lexer import RegexLexer, bygroups, words
from pygments.token import Text, Comment, Keyword, Name, String, \
Number, Whitespace, Punctuation

__all__ = ['SmithyLexer']


class SmithyLexer(RegexLexer):
"""
For Smithy IDL
.. versionadded:: 2.10
"""
name = 'Smithy'
filenames = ['*.smithy']
aliases = ['smithy']

flags = re.MULTILINE | re.UNICODE
unquoted = r'[A-Za-z0-9_\.#$-]+'
identifier = r"[A-Za-z0-9_\.#$-]+"

simple_shapes = (
'use', 'byte', 'short', 'integer', 'long', 'float', 'document',
'double', 'bigInteger', 'bigDecimal', 'boolean', 'blob', 'string',
'timestamp',
)

aggregate_shapes = (
'apply', 'list', 'map', 'set', 'structure', 'union', 'resource',
'operation', 'service', 'trait'
)

tokens = {
'root': [
(r'///.*$', Comment.Multiline),
(r'//.*$', Comment),
(r'@[0-9a-zA-Z\.#-]*', Name.Decorator),
(r'(=)', Name.Decorator),
(r'^(\$version)(:)(.+)',
bygroups(Keyword.Declaration, Name.Decorator, Name.Class)),
(r'^(namespace)(\s+' + identifier + r')\b',
bygroups(Keyword.Declaration, Name.Class)),
(words(simple_shapes,
prefix=r'^', suffix=r'(\s+' + identifier + r')\b'),
bygroups(Keyword.Declaration, Name.Class)),
(words(aggregate_shapes,
prefix=r'^', suffix=r'(\s+' + identifier + r')'),
bygroups(Keyword.Declaration, Name.Class)),
(r'^(metadata)(\s+.+)(\s*)(=)',
bygroups(Keyword.Declaration, Name.Class, Whitespace, Name.Decorator)),
(r"(true|false|null)", Keyword.Constant),
(r"(-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)", Number),
(identifier + ":", Name.Label),
(identifier, Name.Variable.Class),
(r'\[', Text, "#push"),
(r'\]', Text, "#pop"),
(r'\(', Text, "#push"),
(r'\)', Text, "#pop"),
(r'\{', Text, "#push"),
(r'\}', Text, "#pop"),
(r'"{3}(\\\\|\n|\\")*"{3}', String.Doc),
(r'"(\\\\|\n|\\"|[^"])*"', String.Double),
(r"'(\\\\|\n|\\'|[^'])*'", String.Single),
(r'[:,]+', Punctuation),
(r'\s+', Whitespace),
]
}

0 comments on commit e2352ff

Please sign in to comment.