From cc9d4c03ae30fd3b5575a589a83d274a657e3bf7 Mon Sep 17 00:00:00 2001 From: Torsten Schmits Date: Fri, 12 Apr 2024 22:13:14 +0200 Subject: [PATCH] mark prefix operators --- grammar/id.js | 10 ++-- grammar/import.js | 3 +- grammar/module.js | 6 +-- grammar/operator.js | 13 +++-- test/corpus/class.txt | 15 ++++-- test/corpus/data.txt | 6 ++- test/corpus/decl.txt | 12 +++-- test/corpus/exp.txt | 18 ++++--- test/corpus/family.txt | 9 ++-- test/corpus/gadt.txt | 6 ++- test/corpus/import.txt | 15 ++++-- test/corpus/module.txt | 79 ++++++++++++++++++++-------- test/corpus/pat.txt | 3 +- test/corpus/patsyn.txt | 3 +- test/corpus/prec.txt | 72 ++++++++++++++++--------- test/corpus/signature.txt | 3 +- test/corpus/type.txt | 12 +++-- test/corpus/varsym.txt | 108 +++++++++++++++++++++++++------------- 18 files changed, 259 insertions(+), 134 deletions(-) diff --git a/grammar/id.js b/grammar/id.js index 59ad3bea..0f30f55c 100644 --- a/grammar/id.js +++ b/grammar/id.js @@ -19,8 +19,8 @@ module.exports = { _qvarid: $ => alias($._qualified_variable, $.qualified), _varids: $ => choice($._qvarid, $.variable), - _var: $ => choice($.variable, $._varsym_prefix), - _qvar: $ => choice($._qvarid, $._qualified_operator_prefix), + _var: $ => choice($.variable, $._pvarsym), + _qvar: $ => choice($._qvarid, $._pqvarsym), _vars: $ => choice($._var, $._qvar), _variable_ticked: $ => ticked($.variable), @@ -51,8 +51,8 @@ module.exports = { _qconid: $ => alias($._qualified_constructor, $.qualified), _conids: $ => choice($._qconid, $.constructor), - _con: $ => choice($.constructor, $._consym_prefix), - _qcon: $ => choice($._qconid, $._qualified_constructor_operator_prefix), + _con: $ => choice($.constructor, $._pconsym), + _qcon: $ => choice($._qconid, $._pqconsym), // Prec for conflict between projection and qualified name in `A.b` _cons: $ => choice(prec('qcon', $._con), $._qcon), @@ -83,7 +83,7 @@ module.exports = { _qtyconid: $ => alias($._qualified_type, $.qualified), _tyconids: $ => choice($._qtyconid, $._tyconid), - _tycon: $ => choice($._tyconid, $._varsym_prefix, $._consym_prefix), + _tycon: $ => choice($._tyconid, $._pvarsym, $._pconsym), _qtycon: $ => choice($._qtyconid, $._qsym_prefix), _tycons: $ => choice($._tycon, $._qtycon), diff --git a/grammar/import.js b/grammar/import.js index 59e53400..7826fae1 100644 --- a/grammar/import.js +++ b/grammar/import.js @@ -20,8 +20,7 @@ module.exports = { optional($.namespace), choice( $._tyconid, - $._varsym_prefix, - $._consym_prefix, + $._sym_prefix, ), optional($.import_con_names), ), diff --git a/grammar/module.js b/grammar/module.js index ae360130..bc2a69ca 100644 --- a/grammar/module.js +++ b/grammar/module.js @@ -25,10 +25,8 @@ module.exports = { seq( optional($.namespace), choice( - parens($, $.operator), - parens($, $._operator_minus), - parens($, $._qvarsym), - parens($, $._consyms), + $._sym_prefix, + $._qsym_prefix, $._tyconids, ), optional($.export_names), diff --git a/grammar/operator.js b/grammar/operator.js index 35f42fe6..18a30058 100644 --- a/grammar/operator.js +++ b/grammar/operator.js @@ -31,12 +31,15 @@ module.exports = { ), ), + _pvarsym: $ => alias($._varsym_prefix, $.prefix_id), + _qualified_varsym: $ => qualified($, choice($.operator, $._operator_minus)), _qvarsym: $ => alias($._qualified_varsym, $.qualified), _varsyms: $ => choice($.operator, $._qvarsym), - _qualified_operator_prefix: $ => parens($, $._qvarsym), + _qvarsym_prefix: $ => parens($, $._qvarsym), + _pqvarsym: $ => alias($._qvarsym_prefix, $.prefix_id), // ------------------------------------------------------------------------ // con @@ -47,13 +50,15 @@ module.exports = { _constructor_operator_alias: $ => $.constructor_operator, _consym_prefix: $ => parens($, $.constructor_operator), + _pconsym: $ => alias($._consym_prefix, $.prefix_id), _qualified_consym: $ => qualified($, $.constructor_operator), _qconsym: $ => alias($._qualified_consym, $.qualified), _consyms: $ => choice($.constructor_operator, $._qconsym), - _qualified_constructor_operator_prefix: $ => parens($, $._qconsym), + _qconsym_prefix: $ => parens($, $._qconsym), + _pqconsym: $ => alias($._qconsym_prefix, $.prefix_id), // ------------------------------------------------------------------------ // op @@ -61,8 +66,10 @@ module.exports = { _sym: $ => choice($._operator_alias, $._constructor_operator_alias), - _qsym_prefix: $ => choice($._qualified_operator_prefix, $._qualified_constructor_operator_prefix), + _sym_prefix: $ => choice($._pvarsym, $._pconsym), _qsym: $ => choice($._qvarsym, $._qconsym), + _qsym_prefix: $ => choice($._pqvarsym, $._pqconsym), + } diff --git a/test/corpus/class.txt b/test/corpus/class.txt index e1a3698d..02421c0a 100644 --- a/test/corpus/class.txt +++ b/test/corpus/class.txt @@ -183,12 +183,16 @@ class A where (class_declarations (signature (binding_list - (operator) + (prefix_id + (operator)) (variable) - (operator) - (operator) + (prefix_id + (operator)) + (prefix_id + (operator)) (variable) - (operator)) + (prefix_id + (operator))) (type_name (type_variable))))))) @@ -433,7 +437,8 @@ class (++) a b (class_apply (class_name (type_name - (operator))) + (prefix_id + (operator)))) (type_name (type_variable)) (type_name diff --git a/test/corpus/data.txt b/test/corpus/data.txt index 5910ec53..979ba2da 100644 --- a/test/corpus/data.txt +++ b/test/corpus/data.txt @@ -479,7 +479,8 @@ data A = A deriving ((+)) (class_apply (class_name (type_name - (operator))) + (prefix_id + (operator)))) (type_name (type))))) (data_type @@ -490,7 +491,8 @@ data A = A deriving ((+)) (constructor))) (deriving (class_name - (operator)))))) + (prefix_id + (operator))))))) ================================================================================ data: datatype context diff --git a/test/corpus/decl.txt b/test/corpus/decl.txt index aab6f449..817a8dc8 100644 --- a/test/corpus/decl.txt +++ b/test/corpus/decl.txt @@ -222,11 +222,15 @@ decl: operator binding list (declarations (signature (binding_list - (operator) - (operator) - (operator) + (prefix_id + (operator)) + (prefix_id + (operator)) + (prefix_id + (operator)) (variable) - (operator)) + (prefix_id + (operator))) (type_name (type_variable))))) diff --git a/test/corpus/exp.txt b/test/corpus/exp.txt index 316065e6..acdd1d62 100644 --- a/test/corpus/exp.txt +++ b/test/corpus/exp.txt @@ -2153,10 +2153,11 @@ a = a A.!? a a (bind (variable) (exp_name - (qualified - (module - (module_id)) - (operator)))) + (prefix_id + (qualified + (module + (module_id)) + (operator))))) (bind (variable) (exp_infix @@ -2213,10 +2214,11 @@ a = '(A..&) (bind (variable) (exp_th_quoted_name - (qualified - (module - (module_id)) - (operator)))))) + (prefix_id + (qualified + (module + (module_id)) + (operator))))))) ================================================================================ exp: negation in tuple diff --git a/test/corpus/family.txt b/test/corpus/family.txt index 0a8ea755..efe402ca 100644 --- a/test/corpus/family.txt +++ b/test/corpus/family.txt @@ -610,7 +610,8 @@ type family (<>) a a where (head (type_apply (type_name - (operator)) + (prefix_id + (operator))) (type_name (type_variable)) (type_name @@ -745,12 +746,14 @@ type family (<>) where (type_family (head (type_name - (operator))) + (prefix_id + (operator)))) (equations (equation (pattern (type_name - (operator))) + (prefix_id + (operator)))) (type_name (type))))))) diff --git a/test/corpus/gadt.txt b/test/corpus/gadt.txt index 1205c333..c60ef3fc 100644 --- a/test/corpus/gadt.txt +++ b/test/corpus/gadt.txt @@ -279,7 +279,8 @@ data a +++ b where (type_variable))) (gadt_constructors (gadt_constructor - (constructor_operator) + (prefix_id + (constructor_operator)) (type_fun (type_name (type_variable)) @@ -326,7 +327,8 @@ data (:#) a where (data_type (type_apply (type_name - (constructor_operator)) + (prefix_id + (constructor_operator))) (type_name (type_variable)))))) diff --git a/test/corpus/import.txt b/test/corpus/import.txt index f185c233..8b892662 100644 --- a/test/corpus/import.txt +++ b/test/corpus/import.txt @@ -164,7 +164,8 @@ import Aaa.A (A((<>))) (import_item (type) (import_con_names - (operator))))))) + (prefix_id + (operator)))))))) ================================================================================ import: type dotdot @@ -378,9 +379,11 @@ import A ((:<|>)((:<|>))) (module_id)) (import_list (import_item - (constructor_operator) + (prefix_id + (constructor_operator)) (import_con_names - (constructor_operator))))))) + (prefix_id + (constructor_operator)))))))) ================================================================================ import: operator @@ -397,7 +400,8 @@ import A ((<=<)) (module_id)) (import_list (import_item - (operator)))))) + (prefix_id + (operator))))))) ================================================================================ import: pattern/type @@ -453,6 +457,7 @@ import A (type (++)(..)) (import_list (import_item (namespace) - (operator) + (prefix_id + (operator)) (import_con_names (all_names))))))) diff --git a/test/corpus/module.txt b/test/corpus/module.txt index 2cfc42e5..f329589a 100644 --- a/test/corpus/module.txt +++ b/test/corpus/module.txt @@ -65,12 +65,15 @@ module A ( (module_id)) (exports (export - (operator) + (prefix_id + (operator)) (export_names - (constructor_operator) + (prefix_id + (constructor_operator)) (constructor))) (export - (constructor_operator))))) + (prefix_id + (constructor_operator)))))) ================================================================================ module: exports type @@ -94,10 +97,12 @@ module A ( (type)) (export (namespace) - (operator)) + (prefix_id + (operator))) (export (namespace) - (constructor_operator))))) + (prefix_id + (constructor_operator)))))) ================================================================================ module: exports pattern @@ -121,7 +126,8 @@ module A ( (type)) (export (namespace) - (operator)) + (prefix_id + (operator))) (export (type) (export_names @@ -186,18 +192,20 @@ module A ( (variable))) (export (namespace) - (qualified - (module - (module_id) - (module_id)) - (operator))) + (prefix_id + (qualified + (module + (module_id) + (module_id)) + (operator)))) (export (namespace) - (qualified - (module - (module_id) - (module_id)) - (constructor_operator))) + (prefix_id + (qualified + (module + (module_id) + (module_id)) + (constructor_operator)))) (export (qualified (module @@ -211,8 +219,10 @@ module A ( (module_id)) (type)) (export_names - (operator) - (constructor_operator) + (prefix_id + (operator)) + (prefix_id + (constructor_operator)) (constructor) (variable))) (export @@ -222,7 +232,8 @@ module A ( (module_id)) (type)) (export_names - (operator) + (prefix_id + (operator)) (constructor))) (export (namespace) @@ -231,7 +242,8 @@ module A ( (module_id)) (type)) (export_names - (operator) + (prefix_id + (operator)) (constructor)))))) ================================================================================ @@ -287,9 +299,32 @@ module A (type (-), (-)) where (exports (export (namespace) - (operator)) + (prefix_id + (operator))) + (export + (prefix_id + (operator)))))) + +================================================================================ +module: export dot +================================================================================ + +module A (type (.), (.)) where + +-------------------------------------------------------------------------------- + +(haskell + (header + (module + (module_id)) + (exports + (export + (namespace) + (prefix_id + (operator))) (export - (operator))))) + (prefix_id + (operator)))))) ================================================================================ module: no trailing comma diff --git a/test/corpus/pat.txt b/test/corpus/pat.txt index 867f4cbf..ecc65300 100644 --- a/test/corpus/pat.txt +++ b/test/corpus/pat.txt @@ -856,7 +856,8 @@ a (++) = a (variable) (patterns (pat_name - (operator))) + (prefix_id + (operator)))) (exp_name (variable))))) diff --git a/test/corpus/patsyn.txt b/test/corpus/patsyn.txt index ddfc5890..507eda4f 100644 --- a/test/corpus/patsyn.txt +++ b/test/corpus/patsyn.txt @@ -292,7 +292,8 @@ pattern a :-> b <- a declarations: (declarations (pattern_synonym (signature - synonym: (constructor_operator) + synonym: (prefix_id + (constructor_operator)) type: (type_name (type)))) (pattern_synonym diff --git a/test/corpus/prec.txt b/test/corpus/prec.txt index 3d470b33..dc939c79 100644 --- a/test/corpus/prec.txt +++ b/test/corpus/prec.txt @@ -166,15 +166,18 @@ prec: varop decl with leading dot (haskell (declarations (signature - (operator) + (prefix_id + (operator)) (type_name (type_variable))) (signature - (operator) + (prefix_id + (operator)) (type_name (type_variable))) (signature - (operator) + (prefix_id + (operator)) (type_name (type_variable))))) @@ -191,10 +194,11 @@ a = (A..!?) (bind (variable) (exp_name - (qualified - (module - (module_id)) - (operator)))))) + (prefix_id + (qualified + (module + (module_id)) + (operator))))))) ================================================================================ prec: varop import with leading dot @@ -211,7 +215,8 @@ import A ((.=)) (module_id)) (import_list (import_item - (operator)))))) + (prefix_id + (operator))))))) ================================================================================ prec: varop export with leading dot @@ -227,7 +232,8 @@ module A ((.=)) where (module_id)) (exports (export - (operator))))) + (prefix_id + (operator)))))) ================================================================================ prec: infix varop with leading dot in list @@ -1008,15 +1014,18 @@ prec: hash: signature lhs (haskell (declarations (signature - (operator) + (prefix_id + (operator)) (type_name (type_variable))) (signature - (operator) + (prefix_id + (operator)) (type_name (type_variable))) (signature - (operator) + (prefix_id + (operator)) (type_name (type_variable))))) @@ -1035,15 +1044,18 @@ a = (#?) (bind (variable) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_name - (operator))))) + (prefix_id + (operator)))))) ================================================================================ prec: hash: right section @@ -1233,19 +1245,25 @@ type (#?) = (#?) (declarations (type_alias (type_name - (operator)) + (prefix_id + (operator))) (type_name - (operator))) + (prefix_id + (operator)))) (type_alias (type_name - (operator)) + (prefix_id + (operator))) (type_name - (operator))) + (prefix_id + (operator)))) (type_alias (type_name - (operator)) + (prefix_id + (operator))) (type_name - (operator))))) + (prefix_id + (operator)))))) ================================================================================ prec: hash: unboxed type @@ -1358,13 +1376,15 @@ a = a# || a (comment) (declarations (signature - (operator) + (prefix_id + (operator)) (type_name (type_variable))) (bind (variable) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_section_right @@ -1373,13 +1393,15 @@ a = a# || a (variable)))) (comment) (signature - (operator) + (prefix_id + (operator)) (type_name (type_variable))) (bind (variable) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_section_left diff --git a/test/corpus/signature.txt b/test/corpus/signature.txt index bcf34b40..84bb8ec1 100644 --- a/test/corpus/signature.txt +++ b/test/corpus/signature.txt @@ -120,7 +120,8 @@ signature: parenthesized operator fun (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name (variable))))) diff --git a/test/corpus/type.txt b/test/corpus/type.txt index d2787984..a1bfd5f0 100644 --- a/test/corpus/type.txt +++ b/test/corpus/type.txt @@ -561,7 +561,8 @@ type A = (++) a a (type)) (type_apply (type_name - (operator)) + (prefix_id + (operator))) (type_name (type_variable)) (type_name @@ -698,10 +699,11 @@ type role (A.>>) nominal nominal (type_role) (type_role)) (role_annotation - (qualified - (module - (module_id)) - (operator)) + (prefix_id + (qualified + (module + (module_id)) + (operator))) (type_role) (type_role)))) diff --git a/test/corpus/varsym.txt b/test/corpus/varsym.txt index a81f32ba..c87dc579 100644 --- a/test/corpus/varsym.txt +++ b/test/corpus/varsym.txt @@ -352,7 +352,8 @@ a = a ? a (exp_name (implicit_variable))) (bind - (operator) + (prefix_id + (operator)) (exp_name (variable))) (bind @@ -397,7 +398,8 @@ varsym: unicode symbol (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name (variable))))) @@ -421,9 +423,11 @@ a ! a = a (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_infix @@ -520,9 +524,11 @@ a = a A.# a (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_apply @@ -593,9 +599,11 @@ a = a A.$ a (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (comment) (bind (variable) @@ -684,9 +692,11 @@ type A = a % a (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_infix @@ -766,9 +776,11 @@ a = a A.& a (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_infix @@ -839,9 +851,11 @@ a = a A.⋆ a (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_infix @@ -916,9 +930,11 @@ a = (a *) (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_infix @@ -1017,9 +1033,11 @@ a = (a + a) (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_infix @@ -1090,9 +1108,11 @@ a = a A.. a (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_projection @@ -1161,9 +1181,11 @@ a = a A./ a (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_infix @@ -1234,9 +1256,11 @@ a = a A.< a (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_infix @@ -1307,9 +1331,11 @@ a = a A.> a (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_infix @@ -1381,9 +1407,11 @@ a = a A.? a (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (comment) (bind (variable) @@ -1453,9 +1481,11 @@ a = a A.^ a (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_infix @@ -1535,9 +1565,11 @@ type A = a - 1 (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_infix @@ -1665,9 +1697,11 @@ a = (a ~~ a) (haskell (declarations (bind - (operator) + (prefix_id + (operator)) (exp_name - (operator))) + (prefix_id + (operator)))) (bind (variable) (exp_infix @@ -1756,9 +1790,11 @@ a = a A.: a (declarations (bind (pat_name - (constructor_operator)) + (prefix_id + (constructor_operator))) (exp_name - (constructor_operator))) + (prefix_id + (constructor_operator)))) (bind (variable) (exp_infix