MCPcopy
hub / github.com/thesysdev/openui / parsePrefix

Function parsePrefix

packages/lang-core/src/parser/expressions.ts:79–175  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

77
78 // ── Prefix / atoms ─────────────────────────────────────────────────────
79 function parsePrefix(): ASTNode {
80 const tok = cur();
81
82 // String literal
83 if (tok.t === T.Str) {
84 adv();
85 return { k: "Str", v: tok.v as string };
86 }
87
88 // Number literal
89 if (tok.t === T.Num) {
90 adv();
91 return { k: "Num", v: tok.v as number };
92 }
93
94 // Boolean literals
95 if (tok.t === T.True) {
96 adv();
97 return { k: "Bool", v: true };
98 }
99 if (tok.t === T.False) {
100 adv();
101 return { k: "Bool", v: false };
102 }
103
104 // Null literal
105 if (tok.t === T.Null) {
106 adv();
107 return { k: "Null" };
108 }
109
110 // Array
111 if (tok.t === T.LBrack) return parseArr();
112
113 // Object
114 if (tok.t === T.LBrace) return parseObj();
115
116 // State variable — may be assignment or reference
117 if (tok.t === T.StateVar) {
118 const name = tok.v as string;
119 adv();
120 // Check for assignment: $var = expr (Equals, NOT EqEq)
121 if (cur().t === T.Equals) {
122 adv(); // consume =
123 const value = parseExpr(0);
124 return { k: "Assign", target: name, value };
125 }
126 return { k: "StateRef", n: name };
127 }
128
129 // PascalCase — component call or reference
130 if (tok.t === T.Type) {
131 const name = tok.v as string;
132 // Builtins (Count, Each, Set, Run, etc.) require @-prefix — only Action is exempt
133 if (tokens[pos + 1]?.t === T.LParen && (!isBuiltin(name) || name === "Action"))
134 return parseComp();
135 adv();
136 return { k: "Ref", n: name };

Callers 1

parseExprFunction · 0.85

Calls 8

isBuiltinFunction · 0.90
curFunction · 0.85
advFunction · 0.85
parseArrFunction · 0.85
parseObjFunction · 0.85
parseExprFunction · 0.85
parseCompFunction · 0.85
eatFunction · 0.85

Tested by

no test coverage detected