feat: interfaces with property members

pull/625/head^2
Nikolaj Sidorenco 2024-04-24 19:38:45 +07:00
parent c4629d89cc
commit a863770063
No known key found for this signature in database
5 changed files with 290740 additions and 290864 deletions

@ -1,5 +1,9 @@
namespace Test
type IFun = type IProp1 =
abstract member MyFun: x:int * y:int -> int abstract member Prop1: string
abstract member Prop2: Array<int>
member _.F(?x:int) = x type IProp2 =
abstract member Prop1: string
abstract member Prop2: Array<int>

@ -1138,9 +1138,7 @@ module.exports = grammar({
curried_spec: $ => curried_spec: $ =>
seq( seq(
$.arguments_spec, repeat(seq($.arguments_spec, '->')),
repeat(seq('->', $.arguments_spec)),
'->',
$.type $.type
), ),

16
src/grammar.json generated

@ -4335,30 +4335,22 @@
"curried_spec": { "curried_spec": {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
{
"type": "SYMBOL",
"name": "arguments_spec"
},
{ {
"type": "REPEAT", "type": "REPEAT",
"content": { "content": {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
{
"type": "STRING",
"value": "->"
},
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "arguments_spec" "name": "arguments_spec"
},
{
"type": "STRING",
"value": "->"
} }
] ]
} }
}, },
{
"type": "STRING",
"value": "->"
},
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "type" "name": "type"

581507
src/parser.c generated

File diff suppressed because it is too large Load Diff

@ -970,3 +970,70 @@ type A(x: int, y:int) =
(long_identifier_or_op (long_identifier_or_op
(long_identifier (long_identifier
(identifier)))))))))) (identifier))))))))))
================================================================================
multiple interfaces with property members
================================================================================
namespace Test
type IProp1 =
abstract member Prop1: string
abstract member Prop2: Array<int>
type IProp2 =
abstract member Prop1: string
abstract member Prop2: Array<int>
--------------------------------------------------------------------------------
(file
(namespace
(long_identifier
(identifier))
(type_definition
(anon_type_defn
(type_name
(identifier))
(member_defn
(member_signature
(identifier)
(curried_spec
(type
(long_identifier
(identifier))))))
(member_defn
(member_signature
(identifier)
(curried_spec
(type
(long_identifier
(identifier))
(type_attributes
(type_attribute
(type
(long_identifier
(identifier)))))))))))
(type_definition
(anon_type_defn
(type_name
(identifier))
(member_defn
(member_signature
(identifier)
(curried_spec
(type
(long_identifier
(identifier))))))
(member_defn
(member_signature
(identifier)
(curried_spec
(type
(long_identifier
(identifier))
(type_attributes
(type_attribute
(type
(long_identifier
(identifier)))))))))))))