@typespec/compiler 1.10.0-dev.7 → 1.10.0-dev.9
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/dist/manifest.js +2 -2
- package/dist/src/core/binder.d.ts.map +1 -1
- package/dist/src/core/binder.js +23 -11
- package/dist/src/core/binder.js.map +1 -1
- package/dist/src/core/checker.d.ts.map +1 -1
- package/dist/src/core/checker.js +77 -9
- package/dist/src/core/checker.js.map +1 -1
- package/dist/src/core/cli/actions/info/emitter-options.d.ts +40 -0
- package/dist/src/core/cli/actions/info/emitter-options.d.ts.map +1 -0
- package/dist/src/core/cli/actions/info/emitter-options.js +345 -0
- package/dist/src/core/cli/actions/info/emitter-options.js.map +1 -0
- package/dist/src/core/cli/actions/info.d.ts +5 -2
- package/dist/src/core/cli/actions/info.d.ts.map +1 -1
- package/dist/src/core/cli/actions/info.js +6 -2
- package/dist/src/core/cli/actions/info.js.map +1 -1
- package/dist/src/core/cli/cli.js +43 -4
- package/dist/src/core/cli/cli.js.map +1 -1
- package/dist/src/core/helpers/syntax-utils.d.ts.map +1 -1
- package/dist/src/core/helpers/syntax-utils.js +11 -3
- package/dist/src/core/helpers/syntax-utils.js.map +1 -1
- package/dist/src/core/messages.d.ts +32 -30
- package/dist/src/core/messages.d.ts.map +1 -1
- package/dist/src/core/messages.js +6 -8
- package/dist/src/core/messages.js.map +1 -1
- package/dist/src/core/modifiers.d.ts +14 -0
- package/dist/src/core/modifiers.d.ts.map +1 -0
- package/dist/src/core/modifiers.js +166 -0
- package/dist/src/core/modifiers.js.map +1 -0
- package/dist/src/core/module-host.d.ts +5 -0
- package/dist/src/core/module-host.d.ts.map +1 -0
- package/dist/src/core/module-host.js +12 -0
- package/dist/src/core/module-host.js.map +1 -0
- package/dist/src/core/name-resolver.d.ts.map +1 -1
- package/dist/src/core/name-resolver.js +2 -0
- package/dist/src/core/name-resolver.js.map +1 -1
- package/dist/src/core/parser.d.ts.map +1 -1
- package/dist/src/core/parser.js +120 -95
- package/dist/src/core/parser.js.map +1 -1
- package/dist/src/core/program.d.ts.map +1 -1
- package/dist/src/core/program.js +5 -11
- package/dist/src/core/program.js.map +1 -1
- package/dist/src/core/scanner.d.ts +46 -46
- package/dist/src/core/scanner.d.ts.map +1 -1
- package/dist/src/core/scanner.js +50 -51
- package/dist/src/core/scanner.js.map +1 -1
- package/dist/src/core/source-loader.d.ts.map +1 -1
- package/dist/src/core/source-loader.js +4 -11
- package/dist/src/core/source-loader.js.map +1 -1
- package/dist/src/core/types.d.ts +29 -10
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/types.js +2 -1
- package/dist/src/core/types.js.map +1 -1
- package/dist/src/formatter/print/printer.d.ts +2 -2
- package/dist/src/formatter/print/printer.d.ts.map +1 -1
- package/dist/src/formatter/print/printer.js +42 -5
- package/dist/src/formatter/print/printer.js.map +1 -1
- package/dist/src/server/completion.js +1 -0
- package/dist/src/server/completion.js.map +1 -1
- package/dist/src/server/tmlanguage.d.ts +1 -1
- package/dist/src/server/tmlanguage.d.ts.map +1 -1
- package/dist/src/server/tmlanguage.js +39 -29
- package/dist/src/server/tmlanguage.js.map +1 -1
- package/dist/typespec.tmLanguage +103 -53
- package/lib/prototypes.tsp +2 -1
- package/package.json +1 -1
package/dist/src/core/parser.js
CHANGED
|
@@ -2,7 +2,8 @@ import { isArray, mutate } from "../utils/misc.js";
|
|
|
2
2
|
import { codePointBefore, isIdentifierContinue, trim } from "./charcode.js";
|
|
3
3
|
import { compilerAssert } from "./diagnostics.js";
|
|
4
4
|
import { createDiagnostic } from "./messages.js";
|
|
5
|
-
import {
|
|
5
|
+
import { modifiersToFlags } from "./modifiers.js";
|
|
6
|
+
import { createScanner, isComment, isKeyword, isModifier, isPunctuation, isReservedKeyword, isStatementKeyword, isTrivia, skipContinuousIdentifier, skipTrivia, skipTriviaBackward, Token, TokenDisplay, TokenFlags, } from "./scanner.js";
|
|
6
7
|
import { IdentifierKind, SyntaxKind, } from "./types.js";
|
|
7
8
|
/**
|
|
8
9
|
* The fixed set of options for each of the kinds of delimited lists in TypeSpec.
|
|
@@ -221,35 +222,6 @@ function createParser(code, options = {}) {
|
|
|
221
222
|
reportInvalidDecorators(decorators, "import statement");
|
|
222
223
|
item = parseImportStatement();
|
|
223
224
|
break;
|
|
224
|
-
case Token.ModelKeyword:
|
|
225
|
-
item = parseModelStatement(pos, decorators);
|
|
226
|
-
break;
|
|
227
|
-
case Token.ScalarKeyword:
|
|
228
|
-
item = parseScalarStatement(pos, decorators);
|
|
229
|
-
break;
|
|
230
|
-
case Token.NamespaceKeyword:
|
|
231
|
-
item = parseNamespaceStatement(pos, decorators, docs, directives);
|
|
232
|
-
break;
|
|
233
|
-
case Token.InterfaceKeyword:
|
|
234
|
-
item = parseInterfaceStatement(pos, decorators);
|
|
235
|
-
break;
|
|
236
|
-
case Token.UnionKeyword:
|
|
237
|
-
item = parseUnionStatement(pos, decorators);
|
|
238
|
-
break;
|
|
239
|
-
case Token.OpKeyword:
|
|
240
|
-
item = parseOperationStatement(pos, decorators);
|
|
241
|
-
break;
|
|
242
|
-
case Token.EnumKeyword:
|
|
243
|
-
item = parseEnumStatement(pos, decorators);
|
|
244
|
-
break;
|
|
245
|
-
case Token.AliasKeyword:
|
|
246
|
-
reportInvalidDecorators(decorators, "alias statement");
|
|
247
|
-
item = parseAliasStatement(pos);
|
|
248
|
-
break;
|
|
249
|
-
case Token.ConstKeyword:
|
|
250
|
-
reportInvalidDecorators(decorators, "const statement");
|
|
251
|
-
item = parseConstStatement(pos);
|
|
252
|
-
break;
|
|
253
225
|
case Token.UsingKeyword:
|
|
254
226
|
reportInvalidDecorators(decorators, "using statement");
|
|
255
227
|
item = parseUsingStatement(pos);
|
|
@@ -259,10 +231,20 @@ function createParser(code, options = {}) {
|
|
|
259
231
|
item = parseEmptyStatement(pos);
|
|
260
232
|
break;
|
|
261
233
|
// Start of declaration with modifiers
|
|
234
|
+
case Token.NamespaceKeyword:
|
|
235
|
+
case Token.ModelKeyword:
|
|
236
|
+
case Token.ScalarKeyword:
|
|
237
|
+
case Token.InterfaceKeyword:
|
|
238
|
+
case Token.UnionKeyword:
|
|
239
|
+
case Token.OpKeyword:
|
|
240
|
+
case Token.EnumKeyword:
|
|
241
|
+
case Token.AliasKeyword:
|
|
242
|
+
case Token.ConstKeyword:
|
|
262
243
|
case Token.ExternKeyword:
|
|
244
|
+
case Token.InternalKeyword:
|
|
263
245
|
case Token.FnKeyword:
|
|
264
246
|
case Token.DecKeyword:
|
|
265
|
-
item = parseDeclaration(pos);
|
|
247
|
+
item = parseDeclaration(pos, decorators, docs, directives);
|
|
266
248
|
break;
|
|
267
249
|
default:
|
|
268
250
|
item = parseInvalidStatement(pos, decorators);
|
|
@@ -312,47 +294,24 @@ function createParser(code, options = {}) {
|
|
|
312
294
|
item = parseImportStatement();
|
|
313
295
|
error({ code: "import-first", messageId: "topLevel", target: item });
|
|
314
296
|
break;
|
|
315
|
-
case Token.
|
|
316
|
-
|
|
297
|
+
case Token.UsingKeyword:
|
|
298
|
+
reportInvalidDecorators(decorators, "using statement");
|
|
299
|
+
item = parseUsingStatement(pos);
|
|
317
300
|
break;
|
|
301
|
+
case Token.ModelKeyword:
|
|
318
302
|
case Token.ScalarKeyword:
|
|
319
|
-
item = parseScalarStatement(pos, decorators);
|
|
320
|
-
break;
|
|
321
303
|
case Token.NamespaceKeyword:
|
|
322
|
-
const ns = parseNamespaceStatement(pos, decorators, docs, directives);
|
|
323
|
-
if (isBlocklessNamespace(ns)) {
|
|
324
|
-
error({ code: "blockless-namespace-first", messageId: "topLevel", target: ns });
|
|
325
|
-
}
|
|
326
|
-
item = ns;
|
|
327
|
-
break;
|
|
328
304
|
case Token.InterfaceKeyword:
|
|
329
|
-
item = parseInterfaceStatement(pos, decorators);
|
|
330
|
-
break;
|
|
331
305
|
case Token.UnionKeyword:
|
|
332
|
-
item = parseUnionStatement(pos, decorators);
|
|
333
|
-
break;
|
|
334
306
|
case Token.OpKeyword:
|
|
335
|
-
item = parseOperationStatement(pos, decorators);
|
|
336
|
-
break;
|
|
337
307
|
case Token.EnumKeyword:
|
|
338
|
-
item = parseEnumStatement(pos, decorators);
|
|
339
|
-
break;
|
|
340
308
|
case Token.AliasKeyword:
|
|
341
|
-
reportInvalidDecorators(decorators, "alias statement");
|
|
342
|
-
item = parseAliasStatement(pos);
|
|
343
|
-
break;
|
|
344
309
|
case Token.ConstKeyword:
|
|
345
|
-
reportInvalidDecorators(decorators, "const statement");
|
|
346
|
-
item = parseConstStatement(pos);
|
|
347
|
-
break;
|
|
348
|
-
case Token.UsingKeyword:
|
|
349
|
-
reportInvalidDecorators(decorators, "using statement");
|
|
350
|
-
item = parseUsingStatement(pos);
|
|
351
|
-
break;
|
|
352
310
|
case Token.ExternKeyword:
|
|
311
|
+
case Token.InternalKeyword:
|
|
353
312
|
case Token.FnKeyword:
|
|
354
313
|
case Token.DecKeyword:
|
|
355
|
-
item = parseDeclaration(pos);
|
|
314
|
+
item = parseDeclaration(pos, decorators, docs, directives);
|
|
356
315
|
break;
|
|
357
316
|
case Token.EndOfFile:
|
|
358
317
|
parseExpected(Token.CloseBrace);
|
|
@@ -365,6 +324,9 @@ function createParser(code, options = {}) {
|
|
|
365
324
|
item = parseInvalidStatement(pos, decorators);
|
|
366
325
|
break;
|
|
367
326
|
}
|
|
327
|
+
if (isBlocklessNamespace(item)) {
|
|
328
|
+
error({ code: "blockless-namespace-first", messageId: "topLevel", target: item });
|
|
329
|
+
}
|
|
368
330
|
mutate(item).directives = directives;
|
|
369
331
|
if (tok !== Token.NamespaceKeyword) {
|
|
370
332
|
mutate(item).docs = docs;
|
|
@@ -387,7 +349,7 @@ function createParser(code, options = {}) {
|
|
|
387
349
|
}
|
|
388
350
|
return directives;
|
|
389
351
|
}
|
|
390
|
-
function parseNamespaceStatement(pos, decorators, docs, directives) {
|
|
352
|
+
function parseNamespaceStatement(pos, decorators, modifiers, docs, directives) {
|
|
391
353
|
parseExpected(Token.NamespaceKeyword);
|
|
392
354
|
let currentName = parseIdentifierOrMemberExpression();
|
|
393
355
|
const nsSegments = [];
|
|
@@ -410,6 +372,8 @@ function createParser(code, options = {}) {
|
|
|
410
372
|
locals: undefined,
|
|
411
373
|
statements,
|
|
412
374
|
directives: directives,
|
|
375
|
+
modifiers,
|
|
376
|
+
modifierFlags: modifiersToFlags(modifiers),
|
|
413
377
|
...finishNode(pos),
|
|
414
378
|
};
|
|
415
379
|
for (let i = 1; i < nsSegments.length; i++) {
|
|
@@ -420,12 +384,14 @@ function createParser(code, options = {}) {
|
|
|
420
384
|
id: nsSegments[i],
|
|
421
385
|
statements: outerNs,
|
|
422
386
|
locals: undefined,
|
|
387
|
+
modifiers: [],
|
|
388
|
+
modifierFlags: 0 /* ModifierFlags.None */,
|
|
423
389
|
...finishNode(pos),
|
|
424
390
|
};
|
|
425
391
|
}
|
|
426
392
|
return outerNs;
|
|
427
393
|
}
|
|
428
|
-
function parseInterfaceStatement(pos, decorators) {
|
|
394
|
+
function parseInterfaceStatement(pos, decorators, modifiers) {
|
|
429
395
|
parseExpected(Token.InterfaceKeyword);
|
|
430
396
|
const id = parseIdentifier();
|
|
431
397
|
const { items: templateParameters, range: templateParametersRange } = parseTemplateParameterList();
|
|
@@ -438,7 +404,7 @@ function createParser(code, options = {}) {
|
|
|
438
404
|
error({ code: "token-expected", format: { token: "'extends' or '{'" } });
|
|
439
405
|
nextToken();
|
|
440
406
|
}
|
|
441
|
-
const { items: operations, range: bodyRange } = parseList(ListKind.InterfaceMembers, (pos, decorators) => parseOperationStatement(pos, decorators, true));
|
|
407
|
+
const { items: operations, range: bodyRange } = parseList(ListKind.InterfaceMembers, (pos, decorators) => parseOperationStatement(pos, decorators, /* modifiers */ undefined, true));
|
|
442
408
|
return {
|
|
443
409
|
kind: SyntaxKind.InterfaceStatement,
|
|
444
410
|
id,
|
|
@@ -448,6 +414,8 @@ function createParser(code, options = {}) {
|
|
|
448
414
|
bodyRange,
|
|
449
415
|
extends: extendList.items,
|
|
450
416
|
decorators,
|
|
417
|
+
modifiers,
|
|
418
|
+
modifierFlags: modifiersToFlags(modifiers),
|
|
451
419
|
...finishNode(pos),
|
|
452
420
|
};
|
|
453
421
|
}
|
|
@@ -465,7 +433,7 @@ function createParser(code, options = {}) {
|
|
|
465
433
|
}
|
|
466
434
|
return detail;
|
|
467
435
|
}
|
|
468
|
-
function parseUnionStatement(pos, decorators) {
|
|
436
|
+
function parseUnionStatement(pos, decorators, modifiers) {
|
|
469
437
|
parseExpected(Token.UnionKeyword);
|
|
470
438
|
const id = parseIdentifier();
|
|
471
439
|
const { items: templateParameters, range: templateParametersRange } = parseTemplateParameterList();
|
|
@@ -476,6 +444,8 @@ function createParser(code, options = {}) {
|
|
|
476
444
|
templateParameters,
|
|
477
445
|
templateParametersRange,
|
|
478
446
|
decorators,
|
|
447
|
+
modifiers,
|
|
448
|
+
modifierFlags: modifiersToFlags(modifiers),
|
|
479
449
|
options,
|
|
480
450
|
...finishNode(pos),
|
|
481
451
|
};
|
|
@@ -483,11 +453,16 @@ function createParser(code, options = {}) {
|
|
|
483
453
|
function parseIdOrValueForVariant() {
|
|
484
454
|
const nextToken = token();
|
|
485
455
|
let id;
|
|
486
|
-
if (isReservedKeyword(nextToken)) {
|
|
456
|
+
if (isReservedKeyword(nextToken) || isModifier(nextToken)) {
|
|
487
457
|
id = parseIdentifier({ allowReservedIdentifier: true });
|
|
488
458
|
// If the next token is not a colon this means we tried to use the reserved keyword as a type reference
|
|
489
459
|
if (token() !== Token.Colon) {
|
|
490
|
-
|
|
460
|
+
if (isReservedKeyword(nextToken)) {
|
|
461
|
+
error({ code: "reserved-identifier", messageId: "future", format: { name: id.sv } });
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
error({ code: "reserved-identifier" });
|
|
465
|
+
}
|
|
491
466
|
}
|
|
492
467
|
return {
|
|
493
468
|
kind: SyntaxKind.TypeReference,
|
|
@@ -552,11 +527,14 @@ function createParser(code, options = {}) {
|
|
|
552
527
|
...finishNode(pos),
|
|
553
528
|
};
|
|
554
529
|
}
|
|
555
|
-
function parseOperationStatement(pos, decorators, inInterface) {
|
|
530
|
+
function parseOperationStatement(pos, decorators, _modifiers, inInterface) {
|
|
531
|
+
let modifiers;
|
|
556
532
|
if (inInterface) {
|
|
533
|
+
modifiers = parseModifiers();
|
|
557
534
|
parseOptional(Token.OpKeyword);
|
|
558
535
|
}
|
|
559
536
|
else {
|
|
537
|
+
modifiers = _modifiers;
|
|
560
538
|
parseExpected(Token.OpKeyword);
|
|
561
539
|
}
|
|
562
540
|
const id = parseIdentifier();
|
|
@@ -597,6 +575,8 @@ function createParser(code, options = {}) {
|
|
|
597
575
|
templateParametersRange,
|
|
598
576
|
signature,
|
|
599
577
|
decorators,
|
|
578
|
+
modifiers,
|
|
579
|
+
modifierFlags: modifiersToFlags(modifiers),
|
|
600
580
|
...finishNode(pos),
|
|
601
581
|
};
|
|
602
582
|
}
|
|
@@ -611,7 +591,7 @@ function createParser(code, options = {}) {
|
|
|
611
591
|
};
|
|
612
592
|
return parameters;
|
|
613
593
|
}
|
|
614
|
-
function parseModelStatement(pos, decorators) {
|
|
594
|
+
function parseModelStatement(pos, decorators, modifiers) {
|
|
615
595
|
parseExpected(Token.ModelKeyword);
|
|
616
596
|
const id = parseIdentifier();
|
|
617
597
|
const { items: templateParameters, range: templateParametersRange } = parseTemplateParameterList();
|
|
@@ -641,6 +621,8 @@ function createParser(code, options = {}) {
|
|
|
641
621
|
decorators,
|
|
642
622
|
properties: propDetail.items,
|
|
643
623
|
bodyRange: propDetail.range,
|
|
624
|
+
modifiers,
|
|
625
|
+
modifierFlags: modifiersToFlags(modifiers),
|
|
644
626
|
...finishNode(pos),
|
|
645
627
|
};
|
|
646
628
|
}
|
|
@@ -771,7 +753,7 @@ function createParser(code, options = {}) {
|
|
|
771
753
|
...finishNode(pos),
|
|
772
754
|
};
|
|
773
755
|
}
|
|
774
|
-
function parseScalarStatement(pos, decorators) {
|
|
756
|
+
function parseScalarStatement(pos, decorators, modifiers) {
|
|
775
757
|
parseExpected(Token.ScalarKeyword);
|
|
776
758
|
const id = parseIdentifier();
|
|
777
759
|
const { items: templateParameters, range: templateParametersRange } = parseTemplateParameterList();
|
|
@@ -786,6 +768,8 @@ function createParser(code, options = {}) {
|
|
|
786
768
|
members,
|
|
787
769
|
bodyRange,
|
|
788
770
|
decorators,
|
|
771
|
+
modifiers,
|
|
772
|
+
modifierFlags: modifiersToFlags(modifiers),
|
|
789
773
|
...finishNode(pos),
|
|
790
774
|
};
|
|
791
775
|
}
|
|
@@ -816,7 +800,7 @@ function createParser(code, options = {}) {
|
|
|
816
800
|
...finishNode(pos),
|
|
817
801
|
};
|
|
818
802
|
}
|
|
819
|
-
function parseEnumStatement(pos, decorators) {
|
|
803
|
+
function parseEnumStatement(pos, decorators, modifiers) {
|
|
820
804
|
parseExpected(Token.EnumKeyword);
|
|
821
805
|
const id = parseIdentifier();
|
|
822
806
|
const { items: members } = parseList(ListKind.EnumMembers, parseEnumMemberOrSpread);
|
|
@@ -824,6 +808,8 @@ function createParser(code, options = {}) {
|
|
|
824
808
|
kind: SyntaxKind.EnumStatement,
|
|
825
809
|
id,
|
|
826
810
|
decorators,
|
|
811
|
+
modifiers,
|
|
812
|
+
modifierFlags: modifiersToFlags(modifiers),
|
|
827
813
|
members,
|
|
828
814
|
...finishNode(pos),
|
|
829
815
|
};
|
|
@@ -871,7 +857,7 @@ function createParser(code, options = {}) {
|
|
|
871
857
|
...finishNode(pos),
|
|
872
858
|
};
|
|
873
859
|
}
|
|
874
|
-
function parseAliasStatement(pos) {
|
|
860
|
+
function parseAliasStatement(pos, modifiers) {
|
|
875
861
|
parseExpected(Token.AliasKeyword);
|
|
876
862
|
const id = parseIdentifier();
|
|
877
863
|
const { items: templateParameters, range: templateParametersRange } = parseTemplateParameterList();
|
|
@@ -884,10 +870,12 @@ function createParser(code, options = {}) {
|
|
|
884
870
|
templateParameters,
|
|
885
871
|
templateParametersRange,
|
|
886
872
|
value,
|
|
873
|
+
modifiers,
|
|
874
|
+
modifierFlags: modifiersToFlags(modifiers),
|
|
887
875
|
...finishNode(pos),
|
|
888
876
|
};
|
|
889
877
|
}
|
|
890
|
-
function parseConstStatement(pos) {
|
|
878
|
+
function parseConstStatement(pos, modifiers) {
|
|
891
879
|
parseExpected(Token.ConstKeyword);
|
|
892
880
|
const id = parseIdentifier();
|
|
893
881
|
const type = parseOptionalTypeAnnotation();
|
|
@@ -899,6 +887,8 @@ function createParser(code, options = {}) {
|
|
|
899
887
|
id,
|
|
900
888
|
value,
|
|
901
889
|
type,
|
|
890
|
+
modifiers,
|
|
891
|
+
modifierFlags: modifiersToFlags(modifiers),
|
|
902
892
|
...finishNode(pos),
|
|
903
893
|
};
|
|
904
894
|
}
|
|
@@ -1326,6 +1316,14 @@ function createParser(code, options = {}) {
|
|
|
1326
1316
|
...finishNode(pos),
|
|
1327
1317
|
};
|
|
1328
1318
|
}
|
|
1319
|
+
function parseInternalKeyword() {
|
|
1320
|
+
const pos = tokenPos();
|
|
1321
|
+
parseExpected(Token.InternalKeyword);
|
|
1322
|
+
return {
|
|
1323
|
+
kind: SyntaxKind.InternalKeyword,
|
|
1324
|
+
...finishNode(pos),
|
|
1325
|
+
};
|
|
1326
|
+
}
|
|
1329
1327
|
function parseVoidKeyword() {
|
|
1330
1328
|
const pos = tokenPos();
|
|
1331
1329
|
parseExpected(Token.VoidKeyword);
|
|
@@ -1513,8 +1511,10 @@ function createParser(code, options = {}) {
|
|
|
1513
1511
|
}
|
|
1514
1512
|
function parseIdentifier(options) {
|
|
1515
1513
|
if (isKeyword(token())) {
|
|
1516
|
-
|
|
1517
|
-
|
|
1514
|
+
if (!(isModifier(token()) && options?.allowReservedIdentifier)) {
|
|
1515
|
+
error({ code: "reserved-identifier" });
|
|
1516
|
+
return createMissingIdentifier();
|
|
1517
|
+
}
|
|
1518
1518
|
}
|
|
1519
1519
|
else if (isReservedKeyword(token())) {
|
|
1520
1520
|
if (!options?.allowReservedIdentifier) {
|
|
@@ -1537,9 +1537,29 @@ function createParser(code, options = {}) {
|
|
|
1537
1537
|
...finishNode(pos),
|
|
1538
1538
|
};
|
|
1539
1539
|
}
|
|
1540
|
-
function parseDeclaration(pos) {
|
|
1540
|
+
function parseDeclaration(pos, decorators, docs, directives) {
|
|
1541
1541
|
const modifiers = parseModifiers();
|
|
1542
1542
|
switch (token()) {
|
|
1543
|
+
case Token.ModelKeyword:
|
|
1544
|
+
return parseModelStatement(pos, decorators, modifiers);
|
|
1545
|
+
case Token.ScalarKeyword:
|
|
1546
|
+
return parseScalarStatement(pos, decorators, modifiers);
|
|
1547
|
+
case Token.NamespaceKeyword:
|
|
1548
|
+
return parseNamespaceStatement(pos, decorators, modifiers, docs, directives);
|
|
1549
|
+
case Token.InterfaceKeyword:
|
|
1550
|
+
return parseInterfaceStatement(pos, decorators, modifiers);
|
|
1551
|
+
case Token.UnionKeyword:
|
|
1552
|
+
return parseUnionStatement(pos, decorators, modifiers);
|
|
1553
|
+
case Token.OpKeyword:
|
|
1554
|
+
return parseOperationStatement(pos, decorators, modifiers);
|
|
1555
|
+
case Token.EnumKeyword:
|
|
1556
|
+
return parseEnumStatement(pos, decorators, modifiers);
|
|
1557
|
+
case Token.AliasKeyword:
|
|
1558
|
+
reportInvalidDecorators(decorators, "alias statement");
|
|
1559
|
+
return parseAliasStatement(pos, modifiers);
|
|
1560
|
+
case Token.ConstKeyword:
|
|
1561
|
+
reportInvalidDecorators(decorators, "const statement");
|
|
1562
|
+
return parseConstStatement(pos, modifiers);
|
|
1543
1563
|
case Token.DecKeyword:
|
|
1544
1564
|
return parseDecoratorDeclarationStatement(pos, modifiers);
|
|
1545
1565
|
case Token.FnKeyword:
|
|
@@ -1559,6 +1579,8 @@ function createParser(code, options = {}) {
|
|
|
1559
1579
|
switch (token()) {
|
|
1560
1580
|
case Token.ExternKeyword:
|
|
1561
1581
|
return parseExternKeyword();
|
|
1582
|
+
case Token.InternalKeyword:
|
|
1583
|
+
return parseInternalKeyword();
|
|
1562
1584
|
default:
|
|
1563
1585
|
return undefined;
|
|
1564
1586
|
}
|
|
@@ -1652,17 +1674,6 @@ function createParser(code, options = {}) {
|
|
|
1652
1674
|
...finishNode(pos),
|
|
1653
1675
|
};
|
|
1654
1676
|
}
|
|
1655
|
-
function modifiersToFlags(modifiers) {
|
|
1656
|
-
let flags = 0 /* ModifierFlags.None */;
|
|
1657
|
-
for (const modifier of modifiers) {
|
|
1658
|
-
switch (modifier.kind) {
|
|
1659
|
-
case SyntaxKind.ExternKeyword:
|
|
1660
|
-
flags |= 2 /* ModifierFlags.Extern */;
|
|
1661
|
-
break;
|
|
1662
|
-
}
|
|
1663
|
-
}
|
|
1664
|
-
return flags;
|
|
1665
|
-
}
|
|
1666
1677
|
function parseRange(mode, range, callback) {
|
|
1667
1678
|
const savedMode = currentMode;
|
|
1668
1679
|
const result = scanner.scanRange(range, () => {
|
|
@@ -2321,7 +2332,8 @@ export function visitChildren(node, cb) {
|
|
|
2321
2332
|
case SyntaxKind.ImportStatement:
|
|
2322
2333
|
return visitNode(cb, node.path);
|
|
2323
2334
|
case SyntaxKind.OperationStatement:
|
|
2324
|
-
return (visitEach(cb, node.
|
|
2335
|
+
return (visitEach(cb, node.modifiers) ||
|
|
2336
|
+
visitEach(cb, node.decorators) ||
|
|
2325
2337
|
visitNode(cb, node.id) ||
|
|
2326
2338
|
visitEach(cb, node.templateParameters) ||
|
|
2327
2339
|
visitNode(cb, node.signature));
|
|
@@ -2330,11 +2342,13 @@ export function visitChildren(node, cb) {
|
|
|
2330
2342
|
case SyntaxKind.OperationSignatureReference:
|
|
2331
2343
|
return visitNode(cb, node.baseOperation);
|
|
2332
2344
|
case SyntaxKind.NamespaceStatement:
|
|
2333
|
-
return (visitEach(cb, node.
|
|
2345
|
+
return (visitEach(cb, node.modifiers) ||
|
|
2346
|
+
visitEach(cb, node.decorators) ||
|
|
2334
2347
|
visitNode(cb, node.id) ||
|
|
2335
2348
|
(isArray(node.statements) ? visitEach(cb, node.statements) : visitNode(cb, node.statements)));
|
|
2336
2349
|
case SyntaxKind.InterfaceStatement:
|
|
2337
|
-
return (visitEach(cb, node.
|
|
2350
|
+
return (visitEach(cb, node.modifiers) ||
|
|
2351
|
+
visitEach(cb, node.decorators) ||
|
|
2338
2352
|
visitNode(cb, node.id) ||
|
|
2339
2353
|
visitEach(cb, node.templateParameters) ||
|
|
2340
2354
|
visitEach(cb, node.extends) ||
|
|
@@ -2355,14 +2369,16 @@ export function visitChildren(node, cb) {
|
|
|
2355
2369
|
case SyntaxKind.ModelSpreadProperty:
|
|
2356
2370
|
return visitNode(cb, node.target);
|
|
2357
2371
|
case SyntaxKind.ModelStatement:
|
|
2358
|
-
return (visitEach(cb, node.
|
|
2372
|
+
return (visitEach(cb, node.modifiers) ||
|
|
2373
|
+
visitEach(cb, node.decorators) ||
|
|
2359
2374
|
visitNode(cb, node.id) ||
|
|
2360
2375
|
visitEach(cb, node.templateParameters) ||
|
|
2361
2376
|
visitNode(cb, node.extends) ||
|
|
2362
2377
|
visitNode(cb, node.is) ||
|
|
2363
2378
|
visitEach(cb, node.properties));
|
|
2364
2379
|
case SyntaxKind.ScalarStatement:
|
|
2365
|
-
return (visitEach(cb, node.
|
|
2380
|
+
return (visitEach(cb, node.modifiers) ||
|
|
2381
|
+
visitEach(cb, node.decorators) ||
|
|
2366
2382
|
visitNode(cb, node.id) ||
|
|
2367
2383
|
visitEach(cb, node.templateParameters) ||
|
|
2368
2384
|
visitEach(cb, node.members) ||
|
|
@@ -2370,24 +2386,32 @@ export function visitChildren(node, cb) {
|
|
|
2370
2386
|
case SyntaxKind.ScalarConstructor:
|
|
2371
2387
|
return visitNode(cb, node.id) || visitEach(cb, node.parameters);
|
|
2372
2388
|
case SyntaxKind.UnionStatement:
|
|
2373
|
-
return (visitEach(cb, node.
|
|
2389
|
+
return (visitEach(cb, node.modifiers) ||
|
|
2390
|
+
visitEach(cb, node.decorators) ||
|
|
2374
2391
|
visitNode(cb, node.id) ||
|
|
2375
2392
|
visitEach(cb, node.templateParameters) ||
|
|
2376
2393
|
visitEach(cb, node.options));
|
|
2377
2394
|
case SyntaxKind.UnionVariant:
|
|
2378
2395
|
return visitEach(cb, node.decorators) || visitNode(cb, node.id) || visitNode(cb, node.value);
|
|
2379
2396
|
case SyntaxKind.EnumStatement:
|
|
2380
|
-
return (visitEach(cb, node.
|
|
2397
|
+
return (visitEach(cb, node.modifiers) ||
|
|
2398
|
+
visitEach(cb, node.decorators) ||
|
|
2399
|
+
visitNode(cb, node.id) ||
|
|
2400
|
+
visitEach(cb, node.members));
|
|
2381
2401
|
case SyntaxKind.EnumMember:
|
|
2382
2402
|
return visitEach(cb, node.decorators) || visitNode(cb, node.id) || visitNode(cb, node.value);
|
|
2383
2403
|
case SyntaxKind.EnumSpreadMember:
|
|
2384
2404
|
return visitNode(cb, node.target);
|
|
2385
2405
|
case SyntaxKind.AliasStatement:
|
|
2386
|
-
return (
|
|
2406
|
+
return (visitEach(cb, node.modifiers) ||
|
|
2407
|
+
visitNode(cb, node.id) ||
|
|
2387
2408
|
visitEach(cb, node.templateParameters) ||
|
|
2388
2409
|
visitNode(cb, node.value));
|
|
2389
2410
|
case SyntaxKind.ConstStatement:
|
|
2390
|
-
return
|
|
2411
|
+
return (visitEach(cb, node.modifiers) ||
|
|
2412
|
+
visitNode(cb, node.id) ||
|
|
2413
|
+
visitNode(cb, node.value) ||
|
|
2414
|
+
visitNode(cb, node.type));
|
|
2391
2415
|
case SyntaxKind.DecoratorDeclarationStatement:
|
|
2392
2416
|
return (visitEach(cb, node.modifiers) ||
|
|
2393
2417
|
visitNode(cb, node.id) ||
|
|
@@ -2453,6 +2477,7 @@ export function visitChildren(node, cb) {
|
|
|
2453
2477
|
case SyntaxKind.VoidKeyword:
|
|
2454
2478
|
case SyntaxKind.NeverKeyword:
|
|
2455
2479
|
case SyntaxKind.ExternKeyword:
|
|
2480
|
+
case SyntaxKind.InternalKeyword:
|
|
2456
2481
|
case SyntaxKind.UnknownKeyword:
|
|
2457
2482
|
case SyntaxKind.JsSourceFile:
|
|
2458
2483
|
case SyntaxKind.JsNamespaceDeclaration:
|