UNPKG

tree-sitter-tony

Version:
77 lines (66 loc) 1.86 kB
const Prec = require('./precedence') const { buildStruct, buildTuple, buildList, buildMember } = require('./util') module.exports = { _pattern: ($) => prec(Prec.Pattern, choice($._assignable_pattern, $._literal_pattern)), _assignable_pattern: ($) => choice( $.identifier_pattern, $.destructuring_pattern, $.tagged_pattern, $.pattern_group, ), destructuring_pattern: ($) => prec( Prec.Pattern, seq( optional( seq( field('alias', alias($.identifier, $.identifier_pattern_name)), '@', ), ), field( 'pattern', choice($.struct_pattern, $.tuple_pattern, $.list_pattern), ), ), ), struct_pattern: ($) => prec( Prec.Pattern, buildStruct( $, choice( $.member_pattern, alias($.identifier_pattern, $.shorthand_member_pattern), ), true, ), ), member_pattern: ($) => buildMember($, $._simple_term, $._pattern), tuple_pattern: ($) => prec(Prec.Pattern, buildTuple($, $._pattern, true)), list_pattern: ($) => prec(Prec.Pattern, buildList($, $._pattern, true)), identifier_pattern: ($) => prec.right( Prec.Pattern, seq( field('name', alias($.identifier, $.identifier_pattern_name)), optional(seq('::', field('type', $._type))), optional(seq('=', field('default', $._simple_term))), ), ), tagged_pattern: ($) => prec.right( Prec.Tagged, seq( '<', field('name', $.identifier), '>', optional(field('pattern', $._pattern)), ), ), _literal_pattern: ($) => choice($.boolean, $.number, $.raw_string, $.regex), pattern_group: ($) => prec(Prec.Pattern, seq('(', field('pattern', $._pattern), ')')), }