@no22/dison 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/README.md +194 -0
- package/dist/analysis.d.ts +21 -0
- package/dist/analysis.d.ts.map +1 -0
- package/dist/analysis.js +267 -0
- package/dist/analysis.js.map +1 -0
- package/dist/ast.d.ts +46 -0
- package/dist/ast.d.ts.map +1 -0
- package/dist/ast.js +5 -0
- package/dist/ast.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +98 -0
- package/dist/cli.js.map +1 -0
- package/dist/codegen.d.ts +10 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/codegen.js +181 -0
- package/dist/codegen.js.map +1 -0
- package/dist/collisions.d.ts +26 -0
- package/dist/collisions.d.ts.map +1 -0
- package/dist/collisions.js +120 -0
- package/dist/collisions.js.map +1 -0
- package/dist/core.d.ts +229 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +247 -0
- package/dist/core.js.map +1 -0
- package/dist/generated-runtime.d.ts +7 -0
- package/dist/generated-runtime.d.ts.map +1 -0
- package/dist/generated-runtime.js +51 -0
- package/dist/generated-runtime.js.map +1 -0
- package/dist/lexer.d.ts +16 -0
- package/dist/lexer.d.ts.map +1 -0
- package/dist/lexer.js +93 -0
- package/dist/lexer.js.map +1 -0
- package/dist/parser.d.ts +39 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +594 -0
- package/dist/parser.js.map +1 -0
- package/dist/runtime.d.ts +3 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +79 -0
- package/dist/runtime.js.map +1 -0
- package/package.json +56 -0
package/dist/parser.js
ADDED
|
@@ -0,0 +1,594 @@
|
|
|
1
|
+
// =====================================================================
|
|
2
|
+
// 3. Parser
|
|
3
|
+
// =====================================================================
|
|
4
|
+
import { collectConfigurationNames, collectImportedConfigurationNames, collectBlockContext, isRiskyInjectableType, parseStringLiteralValue, } from "./analysis.js";
|
|
5
|
+
export class DisonParseError extends Error {
|
|
6
|
+
constructor(message, pos) {
|
|
7
|
+
super(`Dison syntax error (position ${pos}): ${message}`);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class Parser {
|
|
11
|
+
tokens;
|
|
12
|
+
knownConfigNames;
|
|
13
|
+
typeKinds;
|
|
14
|
+
blockContext;
|
|
15
|
+
pos = 0;
|
|
16
|
+
constructor(tokens, typeKinds) {
|
|
17
|
+
this.tokens = tokens;
|
|
18
|
+
// 同一ファイル内で定義されたconfigurationと、他ファイルからimportされた
|
|
19
|
+
// configuration(複数ファイル対応、docs/multi-file-support.md)の両方を
|
|
20
|
+
// 「既知のconfiguration名」として扱う。
|
|
21
|
+
this.knownConfigNames = new Set([
|
|
22
|
+
...collectConfigurationNames(tokens),
|
|
23
|
+
...collectImportedConfigurationNames(tokens),
|
|
24
|
+
]);
|
|
25
|
+
this.typeKinds = typeKinds;
|
|
26
|
+
this.blockContext = collectBlockContext(tokens);
|
|
27
|
+
}
|
|
28
|
+
peek(offset = 0) {
|
|
29
|
+
return this.tokens[this.pos + offset] ?? this.tokens[this.tokens.length - 1];
|
|
30
|
+
}
|
|
31
|
+
next() {
|
|
32
|
+
return this.tokens[this.pos++];
|
|
33
|
+
}
|
|
34
|
+
isTrivia(t) {
|
|
35
|
+
return t.type === "whitespace" || t.type === "comment";
|
|
36
|
+
}
|
|
37
|
+
skipTrivia() {
|
|
38
|
+
while (this.isTrivia(this.peek()))
|
|
39
|
+
this.next();
|
|
40
|
+
}
|
|
41
|
+
// whitespace/comment を飛ばした上で offset 番目に「意味のある」トークンを覗き見る
|
|
42
|
+
peekSignificant(offset = 0) {
|
|
43
|
+
let idx = this.pos;
|
|
44
|
+
let count = 0;
|
|
45
|
+
while (idx < this.tokens.length) {
|
|
46
|
+
const t = this.tokens[idx];
|
|
47
|
+
if (!this.isTrivia(t)) {
|
|
48
|
+
if (count === offset)
|
|
49
|
+
return t;
|
|
50
|
+
count++;
|
|
51
|
+
}
|
|
52
|
+
idx++;
|
|
53
|
+
}
|
|
54
|
+
return this.tokens[this.tokens.length - 1];
|
|
55
|
+
}
|
|
56
|
+
expectPunct(text, context) {
|
|
57
|
+
const t = this.next();
|
|
58
|
+
if (!(t.type === "punct" && t.text === text)) {
|
|
59
|
+
throw new DisonParseError(`Expected "${text}" but found "${t.text}" (${context})`, t.pos);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
parseProgram() {
|
|
63
|
+
const nodes = [];
|
|
64
|
+
while (this.peek().type !== "eof") {
|
|
65
|
+
const t = this.peek();
|
|
66
|
+
if (this.isTrivia(t)) {
|
|
67
|
+
nodes.push({ kind: "raw", text: this.next().text });
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (t.type === "keyword" && t.text === "configuration" && this.looksLikeConfiguration()) {
|
|
71
|
+
nodes.push(this.parseConfiguration());
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (t.type === "keyword" && t.text === "injectable" && this.looksLikeInjectable()) {
|
|
75
|
+
nodes.push(this.parseInjectable());
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (t.type === "keyword" && t.text === "activate" && this.looksLikeActivate()) {
|
|
79
|
+
nodes.push(this.parseActivate());
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (t.type === "keyword" && t.text === "token" && this.looksLikeToken()) {
|
|
83
|
+
nodes.push(this.parseToken());
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
// configuration で包まない単独の override/bind。「その場で即座に実行される」
|
|
87
|
+
// 代入文として脱糖されるため、文が書ける場所ならどこでも良い
|
|
88
|
+
// (関数・メソッドの中でレキシカル変数を捕捉したい場合に使う)。
|
|
89
|
+
// ただしクラス本体の直下(メソッドの外)だけは、代入文を置ける位置ではない
|
|
90
|
+
// ため不可(クラス内の override/bind は必ず configuration { ... } の中に
|
|
91
|
+
// 書く前提で、parseConfiguration側でのみ処理される)。
|
|
92
|
+
if (t.type === "keyword" && t.text === "override" && this.looksLikeOverride()) {
|
|
93
|
+
if (this.blockContext.isDirectClassBodyChild(this.pos)) {
|
|
94
|
+
throw new DisonParseError(`A standalone "override" cannot be placed directly inside a class body (put it inside a method, or at the top level / inside a function)`, t.pos);
|
|
95
|
+
}
|
|
96
|
+
const entry = this.parseOverride("a standalone override");
|
|
97
|
+
nodes.push({ kind: "standalone-override", entry });
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (t.type === "keyword" && t.text === "bind" && this.looksLikeBind()) {
|
|
101
|
+
if (this.blockContext.isDirectClassBodyChild(this.pos)) {
|
|
102
|
+
throw new DisonParseError(`A standalone "bind" cannot be placed directly inside a class body (put it inside a method, or at the top level / inside a function)`, t.pos);
|
|
103
|
+
}
|
|
104
|
+
const entry = this.parseBind("a standalone bind");
|
|
105
|
+
nodes.push({ kind: "standalone-bind", entry });
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
// DSLキーワードに該当しないトークンはすべて無傷でパススルー
|
|
109
|
+
nodes.push({ kind: "raw", text: this.next().text });
|
|
110
|
+
}
|
|
111
|
+
return nodes;
|
|
112
|
+
}
|
|
113
|
+
// "configuration IDENT {" の形になっているかを先読みで確認する。
|
|
114
|
+
// 単に "configuration" という名前の変数・メソッドが使われているだけの場合は
|
|
115
|
+
// この判定に失敗し、通常の raw トークンとして扱われる
|
|
116
|
+
// (looksLikeInjectable/looksLikeActivateと同じパターン)。
|
|
117
|
+
looksLikeConfiguration() {
|
|
118
|
+
const a = this.peekSignificant(1);
|
|
119
|
+
const b = this.peekSignificant(2);
|
|
120
|
+
return a.type === "ident" && b.type === "punct" && b.text === "{";
|
|
121
|
+
}
|
|
122
|
+
// "token IDENT ;" の形になっているかを先読みで確認する。
|
|
123
|
+
// 単に "token" という名前の変数・メソッドが使われているだけの場合は
|
|
124
|
+
// この判定に失敗し、通常の raw トークンとして扱われる。
|
|
125
|
+
looksLikeToken() {
|
|
126
|
+
const a = this.peekSignificant(1);
|
|
127
|
+
const b = this.peekSignificant(2);
|
|
128
|
+
return a.type === "ident" && b.type === "punct" && b.text === ";";
|
|
129
|
+
}
|
|
130
|
+
// token Name; -> export const Name = Symbol("Name"); に脱糖される
|
|
131
|
+
// (docs/bind-interface-token.md)。"as <トークン>" 句で参照される値は、
|
|
132
|
+
// 複数箇所(複数ファイルにまたがる場合も含む)から安定して参照される
|
|
133
|
+
// 共有の定数でなければならないため、configurationと同様にトップレベル
|
|
134
|
+
// にのみ書ける(exportはトップレベルの宣言にしか付けられないため)。
|
|
135
|
+
parseToken() {
|
|
136
|
+
if (!this.blockContext.isTopLevel(this.pos)) {
|
|
137
|
+
throw new DisonParseError(`"token" can only be placed at the top level (not inside a function or class)`, this.peek().pos);
|
|
138
|
+
}
|
|
139
|
+
this.next(); // 'token'
|
|
140
|
+
this.skipTrivia();
|
|
141
|
+
const nameTok = this.next();
|
|
142
|
+
if (nameTok.type !== "ident") {
|
|
143
|
+
throw new DisonParseError(`Expected a name in the "token" declaration but found "${nameTok.text}"`, nameTok.pos);
|
|
144
|
+
}
|
|
145
|
+
this.skipTrivia();
|
|
146
|
+
this.expectPunct(";", `token "${nameTok.text}"`);
|
|
147
|
+
return { kind: "token", name: nameTok.text };
|
|
148
|
+
}
|
|
149
|
+
// "override IDENT {" の形になっているかを先読みで確認する
|
|
150
|
+
// (configuration内のoverrideと同じ判定基準)。
|
|
151
|
+
looksLikeOverride() {
|
|
152
|
+
const a = this.peekSignificant(1);
|
|
153
|
+
const b = this.peekSignificant(2);
|
|
154
|
+
return a.type === "ident" && b.type === "punct" && b.text === "{";
|
|
155
|
+
}
|
|
156
|
+
// "bind IDENT" の直後が '='(差し替え先の直接指定)か '<'(ジェネリクスの
|
|
157
|
+
// 型引数)になっているかを先読みで確認する。
|
|
158
|
+
looksLikeBind() {
|
|
159
|
+
const a = this.peekSignificant(1);
|
|
160
|
+
if (a.type !== "ident")
|
|
161
|
+
return false;
|
|
162
|
+
const b = this.peekSignificant(2);
|
|
163
|
+
return b.type === "punct" && (b.text === "=" || b.text === "<");
|
|
164
|
+
}
|
|
165
|
+
// "injectable IDENT : <型注釈> ;" の形になっているかを先読みで確認する。
|
|
166
|
+
// 型注釈は配列型・ユニオン型・ジェネリクス・関数型など任意の形式を許容するため、
|
|
167
|
+
// ここでは「プロパティ名の直後に ':' が続くか」だけを見て判定する。
|
|
168
|
+
// 単に "injectable" という名前の変数・メソッドが使われているだけの場合は
|
|
169
|
+
// この判定に失敗し、通常の raw トークンとして扱われる。
|
|
170
|
+
looksLikeInjectable() {
|
|
171
|
+
const a = this.peekSignificant(1);
|
|
172
|
+
const b = this.peekSignificant(2);
|
|
173
|
+
return a.type === "ident" && b.type === "punct" && b.text === ":";
|
|
174
|
+
}
|
|
175
|
+
parseInjectable() {
|
|
176
|
+
// injectable はクラスメンバ宣言(private/get/set)を生成するため、
|
|
177
|
+
// クラス本体の直下(メソッドの外)以外では構文的に無効になる。
|
|
178
|
+
if (!this.blockContext.isDirectClassBodyChild(this.pos)) {
|
|
179
|
+
throw new DisonParseError(`"injectable" can only be placed directly inside a class body (not inside a method or at the top level)`, this.peek().pos);
|
|
180
|
+
}
|
|
181
|
+
this.next(); // 'injectable'
|
|
182
|
+
this.skipTrivia();
|
|
183
|
+
const propTok = this.next();
|
|
184
|
+
if (propTok.type !== "ident") {
|
|
185
|
+
throw new DisonParseError(`Expected a property name in the "injectable" declaration but found "${propTok.text}"`, propTok.pos);
|
|
186
|
+
}
|
|
187
|
+
this.skipTrivia();
|
|
188
|
+
this.expectPunct(":", `injectable "${propTok.text}"`);
|
|
189
|
+
this.skipTrivia();
|
|
190
|
+
const { typeName, typeKey } = this.parseTypeExpr(propTok.text);
|
|
191
|
+
// "as <トークン>" は任意。複数ファイルにまたがる同名interface/型エイリアスの
|
|
192
|
+
// 衝突をトークンで明示的に回避するために使う(docs/bind-interface-token.md)。
|
|
193
|
+
const token = this.parseOptionalAsToken(`injectable "${propTok.text}"`);
|
|
194
|
+
// parseTypeExpr はトップレベルの ';' か '=' の直前で止まる(消費しない)。
|
|
195
|
+
// '=' があれば既定初期化式が書かれているとみなして読み進める。
|
|
196
|
+
let defaultExpr;
|
|
197
|
+
const terminator = this.peek();
|
|
198
|
+
if (terminator.type === "punct" && terminator.text === "=") {
|
|
199
|
+
this.next(); // '='
|
|
200
|
+
this.skipTrivia();
|
|
201
|
+
defaultExpr = this.parseInjectableDefaultExpr(propTok.text);
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
this.expectPunct(";", `injectable "${propTok.text}"`);
|
|
205
|
+
}
|
|
206
|
+
// 危険な型(new で自動生成できない型)には既定初期化式が構文的に必須。
|
|
207
|
+
// 安全な型(通常のクラス型)は省略可(従来通り new Type() が自動生成される)。
|
|
208
|
+
// 判定には正規化済みキー(typeKey)を使う(空白・コメントの影響を受けない)。
|
|
209
|
+
if (defaultExpr === undefined && isRiskyInjectableType(typeKey, this.typeKinds)) {
|
|
210
|
+
throw new DisonParseError(`injectable "${propTok.text}" has type "${typeName}", which cannot be auto-constructed` +
|
|
211
|
+
` (interface / type alias / abstract class, or an array/union/function type, etc.).` +
|
|
212
|
+
` A default initializer "= <expr>" is required. Example: injectable ${propTok.text}: ${typeName} = new ConcreteClass();`, propTok.pos);
|
|
213
|
+
}
|
|
214
|
+
return { kind: "injectable", propName: propTok.text, typeName, typeKey, defaultExpr, token };
|
|
215
|
+
}
|
|
216
|
+
// "as <トークン>" 句を任意で読み取る。トークンは複数箇所(injectable/bind)から
|
|
217
|
+
// 安定して参照される共有値でなければならないため、識別子+任意の".プロパティ"
|
|
218
|
+
// という制限された形のみ許可する(呼び出し式や任意の式は許可しない。
|
|
219
|
+
// "as Symbol('X')"のようにその場で新しい値を作ってしまうと、参照するたびに
|
|
220
|
+
// 異なる値になり、衝突回避という目的そのものを果たせなくなるため)。
|
|
221
|
+
parseOptionalAsToken(context) {
|
|
222
|
+
const maybeAs = this.peek();
|
|
223
|
+
if (!(maybeAs.type === "ident" && maybeAs.text === "as"))
|
|
224
|
+
return undefined;
|
|
225
|
+
this.next(); // 'as'
|
|
226
|
+
this.skipTrivia();
|
|
227
|
+
const nameTok = this.next();
|
|
228
|
+
if (nameTok.type !== "ident") {
|
|
229
|
+
throw new DisonParseError(`An identifier for the token is required after "as" in ${context}`, nameTok.pos);
|
|
230
|
+
}
|
|
231
|
+
let text = nameTok.text;
|
|
232
|
+
while (true) {
|
|
233
|
+
this.skipTrivia();
|
|
234
|
+
const dot = this.peek();
|
|
235
|
+
if (!(dot.type === "punct" && dot.text === "."))
|
|
236
|
+
break;
|
|
237
|
+
this.next(); // '.'
|
|
238
|
+
this.skipTrivia();
|
|
239
|
+
const propTok = this.next();
|
|
240
|
+
if (propTok.type !== "ident") {
|
|
241
|
+
throw new DisonParseError(`An identifier is required after "." in the "as" token reference in ${context}`, propTok.pos);
|
|
242
|
+
}
|
|
243
|
+
text += "." + propTok.text;
|
|
244
|
+
}
|
|
245
|
+
this.skipTrivia();
|
|
246
|
+
return text;
|
|
247
|
+
}
|
|
248
|
+
// injectableの既定初期化式 "= <式>" の <式> 部分を、次のトップレベル ";" まで
|
|
249
|
+
// 丸ごと式として取り込む形で解析する。override の代入式パース(parseAssignment)
|
|
250
|
+
// と同じロジック(括弧・波カッコ・角カッコの深さを数えて中の ";" には反応しない)。
|
|
251
|
+
// override と同じ規約で、自動で "new" は補わない(任意のTS式をそのまま評価する)。
|
|
252
|
+
parseInjectableDefaultExpr(propName) {
|
|
253
|
+
let depth = 0;
|
|
254
|
+
const exprParts = [];
|
|
255
|
+
while (true) {
|
|
256
|
+
const t = this.peek();
|
|
257
|
+
if (t.type === "eof") {
|
|
258
|
+
throw new DisonParseError(`The default initializer of injectable "${propName}" is not terminated with ";"`, t.pos);
|
|
259
|
+
}
|
|
260
|
+
if (t.type === "punct" && (t.text === "(" || t.text === "[" || t.text === "{"))
|
|
261
|
+
depth++;
|
|
262
|
+
if (t.type === "punct" && (t.text === ")" || t.text === "]" || t.text === "}"))
|
|
263
|
+
depth--;
|
|
264
|
+
if (t.type === "punct" && t.text === ";" && depth === 0) {
|
|
265
|
+
this.next();
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
exprParts.push(this.next().text);
|
|
269
|
+
}
|
|
270
|
+
const expr = exprParts.join("").trim();
|
|
271
|
+
if (expr === "") {
|
|
272
|
+
throw new DisonParseError(`The default initializer of injectable "${propName}" is empty`, this.peek().pos);
|
|
273
|
+
}
|
|
274
|
+
return expr;
|
|
275
|
+
}
|
|
276
|
+
// "activate IDENT ;" または "activate IDENT from ..." の形になっているかを
|
|
277
|
+
// 先読みで確認する。from句の詳細(文字列リテラルかどうか等)はここでは
|
|
278
|
+
// 確認せず、parseActivate本体に委ねる。
|
|
279
|
+
looksLikeActivate() {
|
|
280
|
+
const a = this.peekSignificant(1);
|
|
281
|
+
const b = this.peekSignificant(2);
|
|
282
|
+
if (a.type !== "ident")
|
|
283
|
+
return false;
|
|
284
|
+
if (b.type === "punct" && b.text === ";")
|
|
285
|
+
return true;
|
|
286
|
+
if (b.type === "ident" && b.text === "from")
|
|
287
|
+
return true;
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
parseActivate() {
|
|
291
|
+
// activate はただの関数呼び出し文に脱糖されるため、injectable/configuration
|
|
292
|
+
// のような「宣言」と違い文が書ける場所ならどこでも良いが、クラス本体の
|
|
293
|
+
// 直下(メソッドの外)だけは代入文・呼び出し文を置ける位置ではないため
|
|
294
|
+
// 不可(単独override/bindと同じ制約)。
|
|
295
|
+
if (this.blockContext.isDirectClassBodyChild(this.pos)) {
|
|
296
|
+
throw new DisonParseError(`"activate" cannot be placed directly inside a class body (put it inside a method, or at the top level / inside a function)`, this.peek().pos);
|
|
297
|
+
}
|
|
298
|
+
this.next(); // 'activate'
|
|
299
|
+
this.skipTrivia();
|
|
300
|
+
const nameTok = this.next();
|
|
301
|
+
if (nameTok.type !== "ident") {
|
|
302
|
+
throw new DisonParseError(`Expected a configuration name in the "activate" statement but found "${nameTok.text}"`, nameTok.pos);
|
|
303
|
+
}
|
|
304
|
+
this.skipTrivia();
|
|
305
|
+
// "from <文字列リテラル>" は任意。他ファイルのconfigurationを
|
|
306
|
+
// activateする場合に使う(複数ファイル対応フェーズ2、
|
|
307
|
+
// docs/activate-from-syntax.md)。"from"はLexerの予約語にはしておらず、
|
|
308
|
+
// ここでのみ文脈的に認識する(TypeScript自身のimport構文における
|
|
309
|
+
// "from"と同じ扱い)。
|
|
310
|
+
let fromPath;
|
|
311
|
+
const maybeFrom = this.peek();
|
|
312
|
+
if (maybeFrom.type === "ident" && maybeFrom.text === "from") {
|
|
313
|
+
this.next(); // 'from'
|
|
314
|
+
this.skipTrivia();
|
|
315
|
+
const pathTok = this.next();
|
|
316
|
+
if (pathTok.type !== "string") {
|
|
317
|
+
throw new DisonParseError(`A string literal path is required after "from" in activate "${nameTok.text}"`, pathTok.pos);
|
|
318
|
+
}
|
|
319
|
+
// クォートスタイル("..." と '...')の違いを同一視するため、
|
|
320
|
+
// 生テキストではなく実際の文字列値を正規化済みキーとして使う
|
|
321
|
+
// (bindのジェネリクス対応で発見した「表示用テキストと正規化済み
|
|
322
|
+
// キーを分ける」のと同種の対策)。
|
|
323
|
+
fromPath = parseStringLiteralValue(pathTok.text);
|
|
324
|
+
this.skipTrivia();
|
|
325
|
+
}
|
|
326
|
+
this.expectPunct(";", `activate "${nameTok.text}"`);
|
|
327
|
+
// タイプミス検出: fromが無い場合のみ、同一ファイル内の定義または
|
|
328
|
+
// import済みの名前(docs/multi-file-support.md)で存在確認する。
|
|
329
|
+
// fromがある場合はDison側でパス先のファイルの中身を読まないため
|
|
330
|
+
// 検証できず、tsc自身のimport解決に委ねる
|
|
331
|
+
// (docs/activate-from-syntax.md参照)。
|
|
332
|
+
if (fromPath === undefined && !this.knownConfigNames.has(nameTok.text)) {
|
|
333
|
+
const known = [...this.knownConfigNames].join(", ") || "(none)";
|
|
334
|
+
throw new DisonParseError(`configuration "${nameTok.text}" is not defined. Defined configurations: ${known}`, nameTok.pos);
|
|
335
|
+
}
|
|
336
|
+
return { kind: "activate", name: nameTok.text, fromPath };
|
|
337
|
+
}
|
|
338
|
+
// 型注釈を "次のトップレベル ; または =(既定初期化式の開始)まで" 丸ごと
|
|
339
|
+
// 取り込む形で解析する。これにより配列型(User[])、ユニオン/交差型(A | B)、
|
|
340
|
+
// ジェネリクス(Repository<User>、Map<string, Array<User>>)、関数型
|
|
341
|
+
// ((x: number) => void)などTypeScriptのプロパティ型注釈として
|
|
342
|
+
// 一般的に書ける形式をすべて素通しできる。
|
|
343
|
+
//
|
|
344
|
+
// ';' も '=' も消費せずに止まる(呼び出し側の parseInjectable が、
|
|
345
|
+
// 次のトークンが '=' か ';' かを見て既定初期化式の有無を判断する)。
|
|
346
|
+
//
|
|
347
|
+
// 深さの数え方は2系統に分けている:
|
|
348
|
+
// - bracketDepth: ( ) [ ] { } の対応関係
|
|
349
|
+
// - angleDepth : ジェネリクスの < >
|
|
350
|
+
// ただし "=>" のアロー記法は2箇所で特別扱いする必要がある:
|
|
351
|
+
// - '>' 側: 直前の '=' に隣接している場合はジェネリクスの閉じではなく
|
|
352
|
+
// アロー演算子の一部とみなし、angleDepth のカウントには影響させない。
|
|
353
|
+
// - '=' 側: 直後に '>' が隙間なく続く場合は関数型の "=>" の一部であり、
|
|
354
|
+
// 既定初期化式の区切りの '=' ではないので型注釈の一部として読み進める。
|
|
355
|
+
//
|
|
356
|
+
// 表示用テキスト(typeName、空白・コメントを含む元の書き方をそのまま保持)と、
|
|
357
|
+
// 正規化済みキー(typeKey、空白・コメントトークンを除いて連結したもの)の
|
|
358
|
+
// 両方を返す。typeKeyは TYPE_BINDINGS の照合や危険な型の判定に使う
|
|
359
|
+
// (bindの左辺・右辺のキー化(parseGenericTypeRef)と同じ規則)。
|
|
360
|
+
parseTypeExpr(propName) {
|
|
361
|
+
let bracketDepth = 0;
|
|
362
|
+
let angleDepth = 0;
|
|
363
|
+
const displayParts = [];
|
|
364
|
+
const keyParts = [];
|
|
365
|
+
while (true) {
|
|
366
|
+
const t = this.peek();
|
|
367
|
+
if (t.type === "eof") {
|
|
368
|
+
throw new DisonParseError(`The type annotation of injectable "${propName}" is not terminated with ";" or "="`, t.pos);
|
|
369
|
+
}
|
|
370
|
+
if (t.type === "punct" && (t.text === "(" || t.text === "[" || t.text === "{"))
|
|
371
|
+
bracketDepth++;
|
|
372
|
+
if (t.type === "punct" && (t.text === ")" || t.text === "]" || t.text === "}"))
|
|
373
|
+
bracketDepth--;
|
|
374
|
+
if (t.type === "punct" && t.text === "<") {
|
|
375
|
+
angleDepth++;
|
|
376
|
+
}
|
|
377
|
+
else if (t.type === "punct" && t.text === ">") {
|
|
378
|
+
// 直前のトークンが隣接する '=' の場合は "=>" の一部なのでカウントしない
|
|
379
|
+
const prev = this.tokens[this.pos - 1];
|
|
380
|
+
const isArrowTail = prev && prev.type === "punct" && prev.text === "=" && prev.pos + prev.text.length === t.pos;
|
|
381
|
+
if (!isArrowTail && angleDepth > 0)
|
|
382
|
+
angleDepth--;
|
|
383
|
+
}
|
|
384
|
+
if (bracketDepth === 0 && angleDepth === 0 && t.type === "punct" && t.text === ";") {
|
|
385
|
+
break; // 消費しない
|
|
386
|
+
}
|
|
387
|
+
if (bracketDepth === 0 && angleDepth === 0 && t.type === "punct" && t.text === "=") {
|
|
388
|
+
const next = this.tokens[this.pos + 1];
|
|
389
|
+
const isArrowHead = next && next.type === "punct" && next.text === ">" && t.pos + t.text.length === next.pos;
|
|
390
|
+
if (!isArrowHead) {
|
|
391
|
+
break; // 既定初期化式の区切り。消費しない
|
|
392
|
+
}
|
|
393
|
+
// "=>" の一部なので通常のトークンとして読み進める
|
|
394
|
+
}
|
|
395
|
+
// "as <トークン>" 句の区切り。型注釈の中で "as" が正当に現れることは
|
|
396
|
+
// 無い(マップ型の "as" 節や型アサーションの "as" はどちらも
|
|
397
|
+
// bracketDepth/angleDepth 0 の位置には現れない)ため、単純に識別子
|
|
398
|
+
// "as" で判定してよい。
|
|
399
|
+
if (bracketDepth === 0 && angleDepth === 0 && t.type === "ident" && t.text === "as") {
|
|
400
|
+
break; // 消費しない
|
|
401
|
+
}
|
|
402
|
+
const consumed = this.next();
|
|
403
|
+
displayParts.push(consumed.text);
|
|
404
|
+
if (consumed.type !== "whitespace" && consumed.type !== "comment") {
|
|
405
|
+
keyParts.push(consumed.text);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
const typeName = displayParts.join("").trim();
|
|
409
|
+
if (typeName === "") {
|
|
410
|
+
throw new DisonParseError(`The type annotation of injectable "${propName}" is empty`, this.peek().pos);
|
|
411
|
+
}
|
|
412
|
+
const typeKey = keyParts.join("");
|
|
413
|
+
return { typeName, typeKey };
|
|
414
|
+
}
|
|
415
|
+
parseConfiguration() {
|
|
416
|
+
// configuration は function 宣言を生成するため、また「定義済み
|
|
417
|
+
// configuration名」という静的な前提(activateのタイプミス検出、5節参照)
|
|
418
|
+
// を壊さないため、トップレベルにのみ書ける。
|
|
419
|
+
if (!this.blockContext.isTopLevel(this.pos)) {
|
|
420
|
+
throw new DisonParseError(`"configuration" can only be placed at the top level (not inside a function or class). If you just want a standalone override/bind at this spot, write it without wrapping it in a configuration.`, this.peek().pos);
|
|
421
|
+
}
|
|
422
|
+
const startTok = this.next(); // 'configuration'
|
|
423
|
+
this.skipTrivia();
|
|
424
|
+
const nameTok = this.peek();
|
|
425
|
+
if (nameTok.type !== "ident") {
|
|
426
|
+
throw new DisonParseError(`Expected a configuration name but found "${nameTok.text}"`, nameTok.pos);
|
|
427
|
+
}
|
|
428
|
+
const name = this.next().text;
|
|
429
|
+
this.skipTrivia();
|
|
430
|
+
this.expectPunct("{", `configuration "${name}"`);
|
|
431
|
+
const entries = [];
|
|
432
|
+
while (true) {
|
|
433
|
+
this.skipTrivia();
|
|
434
|
+
const t = this.peek();
|
|
435
|
+
if (t.type === "punct" && t.text === "}") {
|
|
436
|
+
this.next();
|
|
437
|
+
break;
|
|
438
|
+
}
|
|
439
|
+
if (t.type === "eof") {
|
|
440
|
+
throw new DisonParseError(`Closing "}" for configuration "${name}" not found`, startTok.pos);
|
|
441
|
+
}
|
|
442
|
+
if (t.type === "keyword" && t.text === "override") {
|
|
443
|
+
entries.push(this.parseOverride(`configuration "${name}"`));
|
|
444
|
+
continue;
|
|
445
|
+
}
|
|
446
|
+
if (t.type === "keyword" && t.text === "bind") {
|
|
447
|
+
entries.push(this.parseBind(`configuration "${name}"`));
|
|
448
|
+
continue;
|
|
449
|
+
}
|
|
450
|
+
throw new DisonParseError(`Only override / bind declarations are allowed inside configuration "${name}" (found "${t.text}")`, t.pos);
|
|
451
|
+
}
|
|
452
|
+
return { kind: "configuration", name, entries };
|
|
453
|
+
}
|
|
454
|
+
// context: エラーメッセージに埋め込む文脈の説明。configuration内で呼ばれる
|
|
455
|
+
// 場合は `configuration "${name}"`、単独のoverideとして呼ばれる場合は
|
|
456
|
+
// "単独の override" のように、呼び出し側が完成した句を渡す。
|
|
457
|
+
parseOverride(context) {
|
|
458
|
+
const startTok = this.next(); // 'override'
|
|
459
|
+
this.skipTrivia();
|
|
460
|
+
const classTok = this.peek();
|
|
461
|
+
if (classTok.type !== "ident") {
|
|
462
|
+
throw new DisonParseError(`Expected the target class name for override but found "${classTok.text}"`, classTok.pos);
|
|
463
|
+
}
|
|
464
|
+
const className = this.next().text;
|
|
465
|
+
this.skipTrivia();
|
|
466
|
+
this.expectPunct("{", `override "${className}"(${context})`);
|
|
467
|
+
const assignments = [];
|
|
468
|
+
while (true) {
|
|
469
|
+
this.skipTrivia();
|
|
470
|
+
const t = this.peek();
|
|
471
|
+
if (t.type === "punct" && t.text === "}") {
|
|
472
|
+
this.next();
|
|
473
|
+
break;
|
|
474
|
+
}
|
|
475
|
+
if (t.type === "eof") {
|
|
476
|
+
throw new DisonParseError(`Closing "}" for override "${className}" not found`, startTok.pos);
|
|
477
|
+
}
|
|
478
|
+
assignments.push(this.parseAssignment(className));
|
|
479
|
+
}
|
|
480
|
+
return { kind: "override", className, assignments };
|
|
481
|
+
}
|
|
482
|
+
// "bind OriginalType = ReplacementType;" を解析する。
|
|
483
|
+
// override とは異なり、bind は「型を型で差し替える」という用途に限定する
|
|
484
|
+
// ため、左辺・右辺とも単一の型参照(識別子+任意のジェネリクス)のみを
|
|
485
|
+
// 許可する(isSimpleTypeShapeが許容する形と同じ範囲。injectableの
|
|
486
|
+
// resolveType呼び出しがこの形の型にしか使われないため、それ以上広げても
|
|
487
|
+
// 意味がない)。トランスパイラ側で自動的に `new ReplacementType()` を
|
|
488
|
+
// 補って生成する。コンストラクタに引数を渡したいなど、より複雑な差し替え
|
|
489
|
+
// が必要な場合は override によるプロパティ単位の指定を使うことを想定
|
|
490
|
+
// している。
|
|
491
|
+
// context: parseOverrideと同じ規約(呼び出し側が完成した句を渡す)。
|
|
492
|
+
parseBind(context) {
|
|
493
|
+
this.next(); // 'bind'
|
|
494
|
+
this.skipTrivia();
|
|
495
|
+
const original = this.parseGenericTypeRef(`bind's original type (${context})`);
|
|
496
|
+
this.skipTrivia();
|
|
497
|
+
// "as <トークン>" は任意。複数ファイルにまたがる同名interface/型エイリアスの
|
|
498
|
+
// 衝突をトークンで明示的に回避するために使う(docs/bind-interface-token.md)。
|
|
499
|
+
const token = this.parseOptionalAsToken(`bind "${original.display}"`);
|
|
500
|
+
this.expectPunct("=", `bind "${original.display}" (${context})`);
|
|
501
|
+
this.skipTrivia();
|
|
502
|
+
const replacement = this.parseGenericTypeRef(`bind "${original.display}"'s replacement type (${context})`);
|
|
503
|
+
this.skipTrivia();
|
|
504
|
+
this.expectPunct(";", `bind "${original.display}" = "${replacement.display}"`);
|
|
505
|
+
return {
|
|
506
|
+
kind: "bind",
|
|
507
|
+
originalTypeName: original.display,
|
|
508
|
+
originalTypeKey: original.key,
|
|
509
|
+
replacementTypeName: replacement.display,
|
|
510
|
+
replacementTypeKey: replacement.key,
|
|
511
|
+
token,
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
// bindの左辺・右辺で使う「識別子 + 任意の <...>」を読み取る。injectableの
|
|
515
|
+
// 型注釈パーサ(parseTypeExpr)と違い、配列型・ユニオン型・関数型などは
|
|
516
|
+
// 対象外(isSimpleTypeShapeが許容する形にそろえる)。
|
|
517
|
+
// 表示用テキスト(display、元の書き方をそのまま保持。bindType<T>の型引数や
|
|
518
|
+
// new式に使う)と正規化済みキー(key、空白・コメントを除いて連結したもの。
|
|
519
|
+
// TYPE_BINDINGSの照合に使う)の両方を返す。ジェネリクス型引数の中に
|
|
520
|
+
// "=>"(関数型)が含まれるケースの '>' も、parseTypeExprと同じ
|
|
521
|
+
// isArrowTail判定で正しく区別する。
|
|
522
|
+
parseGenericTypeRef(context) {
|
|
523
|
+
const nameTok = this.peek();
|
|
524
|
+
if (nameTok.type !== "ident") {
|
|
525
|
+
throw new DisonParseError(`Expected a type name in ${context} but found "${nameTok.text}"`, nameTok.pos);
|
|
526
|
+
}
|
|
527
|
+
this.next();
|
|
528
|
+
const displayParts = [nameTok.text];
|
|
529
|
+
const keyParts = [nameTok.text];
|
|
530
|
+
if (this.peekSignificant(0).type === "punct" && this.peekSignificant(0).text === "<") {
|
|
531
|
+
// 識別子と '<' の間にある空白・コメントはdisplayにだけ積む
|
|
532
|
+
while (this.isTrivia(this.peek())) {
|
|
533
|
+
const trivia = this.next();
|
|
534
|
+
displayParts.push(trivia.text);
|
|
535
|
+
}
|
|
536
|
+
let angleDepth = 0;
|
|
537
|
+
do {
|
|
538
|
+
const t = this.peek();
|
|
539
|
+
if (t.type === "eof") {
|
|
540
|
+
throw new DisonParseError(`The generic type argument in ${context} is not closed with a matching ">" for "<"`, t.pos);
|
|
541
|
+
}
|
|
542
|
+
if (t.type === "punct" && t.text === "<") {
|
|
543
|
+
angleDepth++;
|
|
544
|
+
}
|
|
545
|
+
else if (t.type === "punct" && t.text === ">") {
|
|
546
|
+
const prev = this.tokens[this.pos - 1];
|
|
547
|
+
const isArrowTail = prev && prev.type === "punct" && prev.text === "=" && prev.pos + prev.text.length === t.pos;
|
|
548
|
+
if (!isArrowTail)
|
|
549
|
+
angleDepth--;
|
|
550
|
+
}
|
|
551
|
+
const consumed = this.next();
|
|
552
|
+
displayParts.push(consumed.text);
|
|
553
|
+
if (consumed.type !== "whitespace" && consumed.type !== "comment") {
|
|
554
|
+
keyParts.push(consumed.text);
|
|
555
|
+
}
|
|
556
|
+
} while (angleDepth > 0);
|
|
557
|
+
}
|
|
558
|
+
return { display: displayParts.join(""), key: keyParts.join("") };
|
|
559
|
+
}
|
|
560
|
+
// "prop = <式>;" を解析する。<式> は次のトップレベル ";" までを丸ごと式として
|
|
561
|
+
// 取り込むため、識別子だけでなく関数呼び出しやオブジェクトリテラルなども許容できる。
|
|
562
|
+
// 括弧・波カッコ・角カッコの中の ";" には反応しないよう深度を数える。
|
|
563
|
+
parseAssignment(className) {
|
|
564
|
+
const propTok = this.next();
|
|
565
|
+
if (propTok.type !== "ident") {
|
|
566
|
+
throw new DisonParseError(`Expected a property name inside override "${className}" but found "${propTok.text}"`, propTok.pos);
|
|
567
|
+
}
|
|
568
|
+
this.skipTrivia();
|
|
569
|
+
this.expectPunct("=", `override "${className}".${propTok.text}`);
|
|
570
|
+
let depth = 0;
|
|
571
|
+
const exprParts = [];
|
|
572
|
+
while (true) {
|
|
573
|
+
const t = this.peek();
|
|
574
|
+
if (t.type === "eof") {
|
|
575
|
+
throw new DisonParseError(`The assignment expression of override "${className}".${propTok.text} is not terminated with ";"`, propTok.pos);
|
|
576
|
+
}
|
|
577
|
+
if (t.type === "punct" && (t.text === "(" || t.text === "[" || t.text === "{"))
|
|
578
|
+
depth++;
|
|
579
|
+
if (t.type === "punct" && (t.text === ")" || t.text === "]" || t.text === "}"))
|
|
580
|
+
depth--;
|
|
581
|
+
if (t.type === "punct" && t.text === ";" && depth === 0) {
|
|
582
|
+
this.next(); // 消費するだけで結果には含めない
|
|
583
|
+
break;
|
|
584
|
+
}
|
|
585
|
+
exprParts.push(this.next().text);
|
|
586
|
+
}
|
|
587
|
+
const valueExpr = exprParts.join("").trim();
|
|
588
|
+
if (valueExpr === "") {
|
|
589
|
+
throw new DisonParseError(`The assignment expression of override "${className}".${propTok.text} is empty`, propTok.pos);
|
|
590
|
+
}
|
|
591
|
+
return { prop: propTok.text, valueExpr };
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAwBA,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,EAAE,GAAG,SAAS,GAAG,MAAM,CA+CjF;AAMD,eAAO,MAAM,2BAA2B,EAAE,MAKF,CAAC"}
|