@@ -12,11 +12,13 @@ local Parser = re.compile([[
12
12
Main <- (Token / Sp)*
13
13
Sp <- %s+
14
14
X16 <- [a-fA-F0-9]
15
- Token <- Integer / Name / String / Symbol
15
+ Token <- Integer / Name / String / Code / Symbol
16
16
Name <- ({} {%name} {})
17
17
-> Name
18
18
Integer <- ({} {[0-9]+} !'.' {})
19
19
-> Integer
20
+ Code <- ({} '`' { (!'`' .)*} '`' {})
21
+ -> Code
20
22
String <- ({} StringDef {})
21
23
-> String
22
24
StringDef <- {'"'}
@@ -48,7 +50,7 @@ EChar <- 'a' -> ea
48
50
/ ([0-9] [0-9]? [0-9]?) -> Char10
49
51
/ ('u{' {X16*} '}') -> CharUtf8
50
52
Symbol <- ({} {
51
- [:|,<>()?+#` {}]
53
+ [:|,<>()?+#{}]
52
54
/ '[]'
53
55
/ '...'
54
56
/ '['
@@ -114,6 +116,13 @@ Symbol <- ({} {
114
116
TokenFinishs [Ci ] = finish - 1
115
117
TokenContents [Ci ] = math.tointeger (content )
116
118
end ,
119
+ Code = function (start , content , finish )
120
+ Ci = Ci + 1
121
+ TokenTypes [Ci ] = ' code'
122
+ TokenStarts [Ci ] = start
123
+ TokenFinishs [Ci ] = finish - 1
124
+ TokenContents [Ci ] = content
125
+ end ,
117
126
Symbol = function (start , content , finish )
118
127
Ci = Ci + 1
119
128
TokenTypes [Ci ] = ' symbol'
@@ -534,6 +543,22 @@ local function parseString(parent)
534
543
return str
535
544
end
536
545
546
+ local function parseCode (parent )
547
+ local tp , content = peekToken ()
548
+ if not tp or tp ~= ' code' then
549
+ return nil
550
+ end
551
+ nextToken ()
552
+ local code = {
553
+ type = ' doc.type.code' ,
554
+ start = getStart (),
555
+ finish = getFinish (),
556
+ parent = parent ,
557
+ [1 ] = content ,
558
+ }
559
+ return code
560
+ end
561
+
537
562
local function parseInteger (parent )
538
563
local tp , content = peekToken ()
539
564
if not tp or tp ~= ' integer' then
@@ -584,23 +609,16 @@ function parseTypeUnit(parent)
584
609
local result = parseFunction (parent )
585
610
or parseTable (parent )
586
611
or parseString (parent )
612
+ or parseCode (parent )
587
613
or parseInteger (parent )
588
614
or parseBoolean (parent )
589
615
or parseDots (' doc.type.name' , parent )
590
616
or parseParen (parent )
591
617
if not result then
592
- local literal = checkToken (' symbol' , ' `' , 1 )
593
- if literal then
594
- nextToken ()
595
- end
596
618
result = parseName (' doc.type.name' , parent )
597
619
if not result then
598
620
return nil
599
621
end
600
- if literal then
601
- result .literal = true
602
- nextSymbolOrError ' `'
603
- end
604
622
end
605
623
while true do
606
624
local newResult = parseTypeUnitSign (parent , result )
@@ -1418,6 +1436,13 @@ local function bindGeneric(binded)
1418
1436
src .type = ' doc.generic.name'
1419
1437
end
1420
1438
end )
1439
+ guide .eachSourceType (doc , ' doc.type.code' , function (src )
1440
+ local name = src [1 ]
1441
+ if generics [name ] then
1442
+ src .type = ' doc.generic.name'
1443
+ src .literal = true
1444
+ end
1445
+ end )
1421
1446
end
1422
1447
end
1423
1448
end
0 commit comments