diff --git a/python/extractor/tsg-python/python.tsg b/python/extractor/tsg-python/python.tsg index 8cd3bc50743..dd11814753d 100644 --- a/python/extractor/tsg-python/python.tsg +++ b/python/extractor/tsg-python/python.tsg @@ -12,7 +12,7 @@ (assignment !type) @assign { let @assign.node = (ast-node @assign "Assign") } -[ (expression_list) (tuple) (tuple_pattern) (pattern_list) (index_expression_list) ] @tuple +[ (expression_list) (tuple) (tuple_pattern) (pattern_list) (index_expression_list) (exception_list)] @tuple { let @tuple.node = (ast-node @tuple "Tuple") } (list_pattern) @list @@ -3445,6 +3445,9 @@ (tuple element: (_) @elt) @parent (tuple_pattern element: (_) @elt) @parent + + ; An exception list, as in `except A, B, C: ...` + (exception_list element: (_) @elt) @parent ] { edge @parent.node -> @elt.node @@ -3480,6 +3483,7 @@ (parenthesized_expression inner: (_) @elt) (set element: (_) @elt) (match_sequence_pattern (_) @elt) + (exception_list element: (_) @elt) ] @seq { attr (@elt.node) _inherited_ctx = @seq.node diff --git a/python/extractor/tsg-python/tsp/grammar.js b/python/extractor/tsg-python/tsp/grammar.js index 145fa6a4b9a..a30ddb9f0a0 100644 --- a/python/extractor/tsg-python/tsp/grammar.js +++ b/python/extractor/tsg-python/tsp/grammar.js @@ -297,12 +297,21 @@ module.exports = grammar({ ) ), + exception_list: $ => seq( + field('element', $.expression), + repeat1( + seq( + ',', + field('element', $.expression)) + ) + ), + except_clause: $ => seq( 'except', optional(seq( - field('type', $.expression), + field('type', choice($.expression, $.exception_list)), optional(seq( - choice('as', ','), + 'as', field('alias', $.expression) )) )), @@ -314,7 +323,7 @@ module.exports = grammar({ 'except', '*', seq( - field('type', $.expression), + field('type', choice($.expression, $.exception_list)), optional(seq( 'as', field('alias', $.expression)