Skip to content

Commit 1995b19

Browse files
committed
improve scoping
1 parent 5ddee01 commit 1995b19

File tree

11 files changed

+1010028
-827465
lines changed

11 files changed

+1010028
-827465
lines changed

common/scanner.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ enum TokenType {
1919
STRUCT,
2020
INTERFACE,
2121
END,
22+
AND,
2223
TRIPLE_QUOTE_CONTENT,
2324
BLOCK_COMMENT_CONTENT,
2425
INSIDE_STRING,
@@ -410,6 +411,19 @@ static bool scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) {
410411
}
411412
}
412413
}
414+
} else if (lexer->lookahead == 'a' && valid_symbols[AND]) {
415+
advance(lexer);
416+
if (lexer->lookahead == 'n') {
417+
advance(lexer);
418+
if (lexer->lookahead == 'd') {
419+
advance(lexer);
420+
if (lexer->lookahead == ' ') {
421+
lexer->result_symbol = AND;
422+
lexer->mark_end(lexer);
423+
return true;
424+
}
425+
}
426+
}
413427
} else if (lexer->lookahead == 'e' &&
414428
(valid_symbols[ELSE] || valid_symbols[ELIF] ||
415429
valid_symbols[END] || valid_symbols[DEDENT])) {

fsharp/grammar.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ module.exports = grammar({
7575
$._struct_begin,
7676
$._interface_begin,
7777
"end",
78+
"and",
7879
$._triple_quoted_content,
7980
$.block_comment_content,
8081
$._inside_string_marker,
@@ -1499,8 +1500,14 @@ module.exports = grammar({
14991500
seq("=", $._expression_block),
15001501
seq(
15011502
"with",
1502-
$._property_accessors,
1503-
repeat(seq("and", $._property_accessors)),
1503+
scoped(
1504+
seq(
1505+
$._property_accessors,
1506+
repeat(seq("and", $._property_accessors)),
1507+
),
1508+
$._indent,
1509+
$._dedent,
1510+
),
15041511
),
15051512
),
15061513
),
@@ -1535,7 +1542,10 @@ module.exports = grammar({
15351542
choice(
15361543
$._method_defn,
15371544
$._property_defn,
1538-
seq("with", $._function_or_value_defns),
1545+
seq(
1546+
"with",
1547+
scoped($._function_or_value_defns, $._indent, $._dedent),
1548+
),
15391549
),
15401550
),
15411551
),

fsharp/src/grammar.json

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6372,21 +6372,43 @@
63726372
"value": "with"
63736373
},
63746374
{
6375-
"type": "SYMBOL",
6376-
"name": "_property_accessors"
6377-
},
6378-
{
6379-
"type": "REPEAT",
6375+
"type": "FIELD",
6376+
"name": "block",
63806377
"content": {
63816378
"type": "SEQ",
63826379
"members": [
63836380
{
6384-
"type": "STRING",
6385-
"value": "and"
6381+
"type": "SYMBOL",
6382+
"name": "_indent"
6383+
},
6384+
{
6385+
"type": "SEQ",
6386+
"members": [
6387+
{
6388+
"type": "SYMBOL",
6389+
"name": "_property_accessors"
6390+
},
6391+
{
6392+
"type": "REPEAT",
6393+
"content": {
6394+
"type": "SEQ",
6395+
"members": [
6396+
{
6397+
"type": "STRING",
6398+
"value": "and"
6399+
},
6400+
{
6401+
"type": "SYMBOL",
6402+
"name": "_property_accessors"
6403+
}
6404+
]
6405+
}
6406+
}
6407+
]
63866408
},
63876409
{
63886410
"type": "SYMBOL",
6389-
"name": "_property_accessors"
6411+
"name": "_dedent"
63906412
}
63916413
]
63926414
}
@@ -6533,8 +6555,25 @@
65336555
"value": "with"
65346556
},
65356557
{
6536-
"type": "SYMBOL",
6537-
"name": "_function_or_value_defns"
6558+
"type": "FIELD",
6559+
"name": "block",
6560+
"content": {
6561+
"type": "SEQ",
6562+
"members": [
6563+
{
6564+
"type": "SYMBOL",
6565+
"name": "_indent"
6566+
},
6567+
{
6568+
"type": "SYMBOL",
6569+
"name": "_function_or_value_defns"
6570+
},
6571+
{
6572+
"type": "SYMBOL",
6573+
"name": "_dedent"
6574+
}
6575+
]
6576+
}
65386577
}
65396578
]
65406579
}
@@ -8496,6 +8535,10 @@
84968535
"type": "STRING",
84978536
"value": "end"
84988537
},
8538+
{
8539+
"type": "STRING",
8540+
"value": "and"
8541+
},
84998542
{
85008543
"type": "SYMBOL",
85018544
"name": "_triple_quoted_content"

fsharp/src/node-types.json

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2215,6 +2215,48 @@
22152215
}
22162216
]
22172217
},
2218+
"block": {
2219+
"multiple": true,
2220+
"required": false,
2221+
"types": [
2222+
{
2223+
"type": ":",
2224+
"named": false
2225+
},
2226+
{
2227+
"type": "=",
2228+
"named": false
2229+
},
2230+
{
2231+
"type": "_expression",
2232+
"named": true
2233+
},
2234+
{
2235+
"type": "_type",
2236+
"named": true
2237+
},
2238+
{
2239+
"type": "and",
2240+
"named": false
2241+
},
2242+
{
2243+
"type": "function_declaration_left",
2244+
"named": true
2245+
},
2246+
{
2247+
"type": "property_getter",
2248+
"named": true
2249+
},
2250+
{
2251+
"type": "property_setter",
2252+
"named": true
2253+
},
2254+
{
2255+
"type": "value_declaration_left",
2256+
"named": true
2257+
}
2258+
]
2259+
},
22182260
"body": {
22192261
"multiple": true,
22202262
"required": false,
@@ -2248,25 +2290,9 @@
22482290
"type": "_type",
22492291
"named": true
22502292
},
2251-
{
2252-
"type": "function_declaration_left",
2253-
"named": true
2254-
},
2255-
{
2256-
"type": "property_getter",
2257-
"named": true
2258-
},
2259-
{
2260-
"type": "property_setter",
2261-
"named": true
2262-
},
22632293
{
22642294
"type": "type_arguments",
22652295
"named": true
2266-
},
2267-
{
2268-
"type": "value_declaration_left",
2269-
"named": true
22702296
}
22712297
]
22722298
}

0 commit comments

Comments
 (0)