diff --git a/pygments/lexers/javascript.py b/pygments/lexers/javascript.py index 48c6aafda6..f11a4a310d 100644 --- a/pygments/lexers/javascript.py +++ b/pygments/lexers/javascript.py @@ -508,7 +508,7 @@ class TypeScriptLexer(RegexLexer): (r'(super)(\s*)(\([\w,?.$\s]+\s*\))', bygroups(Keyword.Reserved, Text), 'slashstartsregex'), # Match stuff like: function() {...} - (r'([a-zA-Z_?.$][\w?.$]*)\(\) \{', Name.Other, 'slashstartsregex'), + (r'([a-zA-Z_?.$][\w?.$]*)(?=\(\) \{)', Name.Other, 'slashstartsregex'), # Match stuff like: (function: return type) (r'([\w?.$][\w?.$]*)(\s*:\s*)([\w?.$][\w?.$]*)', bygroups(Name.Other, Text, Keyword.Type)), diff --git a/tests/test_javascript.py b/tests/test_javascript.py index 25e06fdc25..d4c60d49d5 100644 --- a/tests/test_javascript.py +++ b/tests/test_javascript.py @@ -9,7 +9,7 @@ import pytest -from pygments.lexers import CoffeeScriptLexer +from pygments.lexers import CoffeeScriptLexer, TypeScriptLexer from pygments.token import Token COFFEE_SLASH_GOLDEN = [ @@ -83,3 +83,25 @@ def test_beware_infinite_loop(lexer): (Token.Text, '\n'), ] assert list(lexer.get_tokens(fragment)) == tokens + +@pytest.fixture(scope='module') +def ts_lexer(): + yield TypeScriptLexer() + +def test_function_definition(ts_lexer): + fragment = u'async function main() {\n}' + tokens = [ + (Token.Keyword, u'async'), + (Token.Text, u' '), + (Token.Keyword.Declaration, u'function'), + (Token.Text, u' '), + (Token.Name.Other, u'main'), + (Token.Punctuation, u'('), + (Token.Punctuation, u')'), + (Token.Text, u' '), + (Token.Punctuation, u'{'), + (Token.Text, u'\n'), + (Token.Punctuation, u'}'), + (Token.Text, u'\n'), + ] + assert list(ts_lexer.get_tokens(fragment)) == tokens