File tree Expand file tree Collapse file tree 2 files changed +40
-1
lines changed
src/melody/melody-extension-core Expand file tree Collapse file tree 2 files changed +40
-1
lines changed Original file line number Diff line number Diff line change @@ -31,6 +31,7 @@ import { SetParser } from "./parser/set.js";
3131import { SpacelessParser } from "./parser/spaceless.js" ;
3232import { UseParser } from "./parser/use.js" ;
3333import { MountParser } from "./parser/mount.js" ;
34+ import { PropsParser } from "./parser/props.js" ;
3435
3536import forVisitor from "./visitors/for.js" ;
3637import testVisitor from "./visitors/tests.js" ;
@@ -97,7 +98,8 @@ export const extension = {
9798 SetParser ,
9899 SpacelessParser ,
99100 UseParser ,
100- MountParser
101+ MountParser ,
102+ PropsParser
101103 ] ,
102104 unaryOperators,
103105 binaryOperators,
Original file line number Diff line number Diff line change 1+ import { DoStatement , PropItem , PropsStatement } from "../types.js" ;
2+ import {
3+ createNode ,
4+ setEndFromToken ,
5+ setStartFromToken ,
6+ Types
7+ } from "../../melody-parser/index.js" ;
8+ import { Identifier } from "../../melody-types/index.js" ;
9+
10+ export const PropsParser = {
11+ name : "props" ,
12+ parse ( parser , token ) {
13+ const tokenStream = parser . tokens ;
14+ const items = [ ] ;
15+ let name ;
16+ let nameNode ;
17+ let valueNode ;
18+
19+ do {
20+ name = tokenStream . expect ( Types . SYMBOL ) ;
21+ nameNode = createNode ( Identifier , name , name . text ) ;
22+ if ( tokenStream . test ( Types . ASSIGNMENT ) ) {
23+ tokenStream . expect ( Types . ASSIGNMENT ) ;
24+ valueNode = parser . matchExpression ( ) ;
25+ } else {
26+ valueNode = undefined ;
27+ }
28+ const item = new PropItem ( nameNode , valueNode ) ;
29+ items . push ( item ) ;
30+ } while ( tokenStream . nextIf ( Types . COMMA ) ) ;
31+
32+ const propsStatement = new PropsStatement ( items ) ;
33+ setStartFromToken ( propsStatement , token ) ;
34+ setEndFromToken ( propsStatement , tokenStream . expect ( Types . TAG_END ) ) ;
35+ return propsStatement ;
36+ }
37+ } ;
You can’t perform that action at this time.
0 commit comments