@typespec/compiler 0.57.0-dev.0 → 0.57.0-dev.13
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/generated-defs/TypeSpec.d.ts +33 -33
- package/dist/generated-defs/TypeSpec.d.ts.map +1 -1
- package/dist/manifest.js +2 -2
- package/dist/src/config/config-schema.d.ts +1 -1
- package/dist/src/config/config-schema.d.ts.map +1 -1
- package/dist/src/config/types.d.ts +2 -2
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/core/binder.d.ts +1 -1
- package/dist/src/core/binder.d.ts.map +1 -1
- package/dist/src/core/binder.js +16 -3
- package/dist/src/core/binder.js.map +1 -1
- package/dist/src/core/checker.d.ts +11 -9
- package/dist/src/core/checker.d.ts.map +1 -1
- package/dist/src/core/checker.js +1851 -288
- package/dist/src/core/checker.js.map +1 -1
- package/dist/src/core/compiler-code-fixes/model-to-object-literal.codefix.d.ts +6 -0
- package/dist/src/core/compiler-code-fixes/model-to-object-literal.codefix.d.ts.map +1 -0
- package/dist/src/core/compiler-code-fixes/model-to-object-literal.codefix.js +15 -0
- package/dist/src/core/compiler-code-fixes/model-to-object-literal.codefix.js.map +1 -0
- package/dist/src/core/compiler-code-fixes/tuple-to-array-value.codefix.d.ts +6 -0
- package/dist/src/core/compiler-code-fixes/tuple-to-array-value.codefix.d.ts.map +1 -0
- package/dist/src/core/compiler-code-fixes/tuple-to-array-value.codefix.js +15 -0
- package/dist/src/core/compiler-code-fixes/tuple-to-array-value.codefix.js.map +1 -0
- package/dist/src/core/decorator-utils.d.ts +5 -1
- package/dist/src/core/decorator-utils.d.ts.map +1 -1
- package/dist/src/core/decorator-utils.js +11 -1
- package/dist/src/core/decorator-utils.js.map +1 -1
- package/dist/src/core/deprecation.d.ts +1 -1
- package/dist/src/core/deprecation.d.ts.map +1 -1
- package/dist/src/core/diagnostic-creator.d.ts.map +1 -1
- package/dist/src/core/diagnostic-creator.js +1 -2
- package/dist/src/core/diagnostic-creator.js.map +1 -1
- package/dist/src/core/diagnostics.js +3 -3
- package/dist/src/core/diagnostics.js.map +1 -1
- package/dist/src/core/emitter-utils.d.ts +1 -1
- package/dist/src/core/emitter-utils.d.ts.map +1 -1
- package/dist/src/core/helpers/discriminator-utils.d.ts +2 -2
- package/dist/src/core/helpers/discriminator-utils.d.ts.map +1 -1
- package/dist/src/core/helpers/discriminator-utils.js +1 -1
- package/dist/src/core/helpers/discriminator-utils.js.map +1 -1
- package/dist/src/core/helpers/index.d.ts +1 -1
- package/dist/src/core/helpers/index.d.ts.map +1 -1
- package/dist/src/core/helpers/index.js +3 -1
- package/dist/src/core/helpers/index.js.map +1 -1
- package/dist/src/core/helpers/location-context.d.ts +2 -2
- package/dist/src/core/helpers/location-context.d.ts.map +1 -1
- package/dist/src/core/helpers/projected-names-utils.d.ts +2 -2
- package/dist/src/core/helpers/projected-names-utils.d.ts.map +1 -1
- package/dist/src/core/helpers/projected-names-utils.js.map +1 -1
- package/dist/src/core/helpers/string-template-utils.d.ts +6 -6
- package/dist/src/core/helpers/string-template-utils.d.ts.map +1 -1
- package/dist/src/core/helpers/string-template-utils.js +20 -33
- package/dist/src/core/helpers/string-template-utils.js.map +1 -1
- package/dist/src/core/helpers/type-name-utils.d.ts +3 -2
- package/dist/src/core/helpers/type-name-utils.d.ts.map +1 -1
- package/dist/src/core/helpers/type-name-utils.js +57 -8
- package/dist/src/core/helpers/type-name-utils.js.map +1 -1
- package/dist/src/core/index.d.ts +4 -1
- package/dist/src/core/index.d.ts.map +1 -1
- package/dist/src/core/index.js +4 -1
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/core/intrinsic-type-state.d.ts +63 -0
- package/dist/src/core/intrinsic-type-state.d.ts.map +1 -0
- package/dist/src/core/intrinsic-type-state.js +160 -0
- package/dist/src/core/intrinsic-type-state.js.map +1 -0
- package/dist/src/core/js-marshaller.d.ts +13 -0
- package/dist/src/core/js-marshaller.d.ts.map +1 -0
- package/dist/src/core/js-marshaller.js +79 -0
- package/dist/src/core/js-marshaller.js.map +1 -0
- package/dist/src/core/library.d.ts +2 -1
- package/dist/src/core/library.d.ts.map +1 -1
- package/dist/src/core/library.js +3 -0
- package/dist/src/core/library.js.map +1 -1
- package/dist/src/core/linter.d.ts +1 -1
- package/dist/src/core/linter.d.ts.map +1 -1
- package/dist/src/core/linter.js +1 -1
- package/dist/src/core/linter.js.map +1 -1
- package/dist/src/core/messages.d.ts +235 -2
- package/dist/src/core/messages.d.ts.map +1 -1
- package/dist/src/core/messages.js +74 -1
- package/dist/src/core/messages.js.map +1 -1
- package/dist/src/core/numeric-ranges.d.ts +51 -0
- package/dist/src/core/numeric-ranges.d.ts.map +1 -0
- package/dist/src/core/numeric-ranges.js +30 -0
- package/dist/src/core/numeric-ranges.js.map +1 -0
- package/dist/src/core/numeric.js +2 -8
- package/dist/src/core/numeric.js.map +1 -1
- package/dist/src/core/parser.d.ts +2 -1
- package/dist/src/core/parser.d.ts.map +1 -1
- package/dist/src/core/parser.js +288 -6
- package/dist/src/core/parser.js.map +1 -1
- package/dist/src/core/program.d.ts +2 -45
- package/dist/src/core/program.d.ts.map +1 -1
- package/dist/src/core/program.js +3 -127
- package/dist/src/core/program.js.map +1 -1
- package/dist/src/core/projected-program.d.ts +3 -0
- package/dist/src/core/projected-program.d.ts.map +1 -0
- package/dist/src/core/projected-program.js +4 -0
- package/dist/src/core/projected-program.js.map +1 -0
- package/dist/src/core/projection-members.d.ts +2 -2
- package/dist/src/core/projection-members.d.ts.map +1 -1
- package/dist/src/core/projector.d.ts +2 -2
- package/dist/src/core/projector.d.ts.map +1 -1
- package/dist/src/core/projector.js +12 -3
- package/dist/src/core/projector.js.map +1 -1
- package/dist/src/core/scanner.d.ts +42 -37
- package/dist/src/core/scanner.d.ts.map +1 -1
- package/dist/src/core/scanner.js +67 -46
- package/dist/src/core/scanner.js.map +1 -1
- package/dist/src/core/schema-validator.js +1 -1
- package/dist/src/core/schema-validator.js.map +1 -1
- package/dist/src/core/semantic-walker.d.ts +1 -1
- package/dist/src/core/semantic-walker.d.ts.map +1 -1
- package/dist/src/core/semantic-walker.js +12 -0
- package/dist/src/core/semantic-walker.js.map +1 -1
- package/dist/src/core/state-accessors.d.ts +46 -0
- package/dist/src/core/state-accessors.d.ts.map +1 -0
- package/dist/src/core/state-accessors.js +123 -0
- package/dist/src/core/state-accessors.js.map +1 -0
- package/dist/src/core/type-utils.d.ts +18 -7
- package/dist/src/core/type-utils.d.ts.map +1 -1
- package/dist/src/core/type-utils.js +24 -5
- package/dist/src/core/type-utils.js.map +1 -1
- package/dist/src/core/types.d.ts +238 -46
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/core/types.js +12 -1
- package/dist/src/core/types.js.map +1 -1
- package/dist/src/emitter-framework/asset-emitter.d.ts +1 -1
- package/dist/src/emitter-framework/asset-emitter.d.ts.map +1 -1
- package/dist/src/emitter-framework/asset-emitter.js +4 -1
- package/dist/src/emitter-framework/asset-emitter.js.map +1 -1
- package/dist/src/emitter-framework/ref-scope.d.ts +1 -1
- package/dist/src/emitter-framework/ref-scope.d.ts.map +1 -1
- package/dist/src/emitter-framework/reference-cycle.d.ts +2 -2
- package/dist/src/emitter-framework/reference-cycle.d.ts.map +1 -1
- package/dist/src/emitter-framework/reference-cycle.js +1 -1
- package/dist/src/emitter-framework/reference-cycle.js.map +1 -1
- package/dist/src/emitter-framework/type-emitter.d.ts +3 -2
- package/dist/src/emitter-framework/type-emitter.d.ts.map +1 -1
- package/dist/src/emitter-framework/type-emitter.js +11 -3
- package/dist/src/emitter-framework/type-emitter.js.map +1 -1
- package/dist/src/emitter-framework/types.d.ts +2 -2
- package/dist/src/emitter-framework/types.d.ts.map +1 -1
- package/dist/src/formatter/print/comment-handler.d.ts.map +1 -1
- package/dist/src/formatter/print/comment-handler.js +22 -0
- package/dist/src/formatter/print/comment-handler.js.map +1 -1
- package/dist/src/formatter/print/printer.d.ts +11 -5
- package/dist/src/formatter/print/printer.d.ts.map +1 -1
- package/dist/src/formatter/print/printer.js +95 -4
- package/dist/src/formatter/print/printer.js.map +1 -1
- package/dist/src/init/file-templating.d.ts +2 -2
- package/dist/src/init/file-templating.d.ts.map +1 -1
- package/dist/src/init/init-template.d.ts +1 -1
- package/dist/src/init/init-template.d.ts.map +1 -1
- package/dist/src/lib/decorators.d.ts +3 -55
- package/dist/src/lib/decorators.d.ts.map +1 -1
- package/dist/src/lib/decorators.js +30 -124
- package/dist/src/lib/decorators.js.map +1 -1
- package/dist/src/lib/encoded-names.d.ts +2 -2
- package/dist/src/lib/encoded-names.d.ts.map +1 -1
- package/dist/src/lib/intrinsic-decorators.d.ts +2 -2
- package/dist/src/lib/intrinsic-decorators.d.ts.map +1 -1
- package/dist/src/lib/intrinsic-decorators.js +7 -0
- package/dist/src/lib/intrinsic-decorators.js.map +1 -1
- package/dist/src/lib/service.d.ts +1 -1
- package/dist/src/lib/service.d.ts.map +1 -1
- package/dist/src/server/classify.d.ts.map +1 -1
- package/dist/src/server/classify.js +10 -0
- package/dist/src/server/classify.js.map +1 -1
- package/dist/src/server/completion.d.ts +2 -2
- package/dist/src/server/completion.d.ts.map +1 -1
- package/dist/src/server/completion.js +44 -2
- package/dist/src/server/completion.js.map +1 -1
- package/dist/src/server/serverlib.d.ts.map +1 -1
- package/dist/src/server/serverlib.js +10 -10
- package/dist/src/server/serverlib.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 +147 -20
- package/dist/src/server/tmlanguage.js.map +1 -1
- package/dist/src/server/type-details.js +14 -7
- package/dist/src/server/type-details.js.map +1 -1
- package/dist/src/server/type-signature.js +15 -6
- package/dist/src/server/type-signature.js.map +1 -1
- package/dist/src/server/types.d.ts +1 -1
- package/dist/src/server/types.d.ts.map +1 -1
- package/dist/src/testing/expect.js +1 -1
- package/dist/src/testing/expect.js.map +1 -1
- package/dist/src/testing/rule-tester.d.ts.map +1 -1
- package/dist/src/testing/rule-tester.js +1 -2
- package/dist/src/testing/rule-tester.js.map +1 -1
- package/dist/src/testing/test-host.d.ts +1 -2
- package/dist/src/testing/test-host.d.ts.map +1 -1
- package/dist/src/testing/test-host.js +1 -8
- package/dist/src/testing/test-host.js.map +1 -1
- package/dist/src/testing/test-server-host.d.ts.map +1 -1
- package/dist/src/testing/test-server-host.js +2 -1
- package/dist/src/testing/test-server-host.js.map +1 -1
- package/dist/src/testing/test-utils.d.ts +1 -0
- package/dist/src/testing/test-utils.d.ts.map +1 -1
- package/dist/src/testing/test-utils.js +7 -0
- package/dist/src/testing/test-utils.js.map +1 -1
- package/dist/typespec.tmLanguage +408 -17
- package/lib/intrinsics.tsp +55 -5
- package/package.json +9 -9
package/dist/src/core/parser.js
CHANGED
|
@@ -27,6 +27,10 @@ var ListKind;
|
|
|
27
27
|
...ListKind.OperationParameters,
|
|
28
28
|
invalidAnnotationTarget: "expression",
|
|
29
29
|
};
|
|
30
|
+
ListKind.FunctionArguments = {
|
|
31
|
+
...ListKind.OperationParameters,
|
|
32
|
+
invalidAnnotationTarget: "expression",
|
|
33
|
+
};
|
|
30
34
|
ListKind.ModelProperties = {
|
|
31
35
|
...PropertiesBase,
|
|
32
36
|
open: Token.OpenBrace,
|
|
@@ -34,6 +38,13 @@ var ListKind;
|
|
|
34
38
|
delimiter: Token.Semicolon,
|
|
35
39
|
toleratedDelimiter: Token.Comma,
|
|
36
40
|
};
|
|
41
|
+
ListKind.ObjectLiteralProperties = {
|
|
42
|
+
...PropertiesBase,
|
|
43
|
+
open: Token.HashBrace,
|
|
44
|
+
close: Token.CloseBrace,
|
|
45
|
+
delimiter: Token.Comma,
|
|
46
|
+
toleratedDelimiter: Token.Comma,
|
|
47
|
+
};
|
|
37
48
|
ListKind.InterfaceMembers = {
|
|
38
49
|
...PropertiesBase,
|
|
39
50
|
open: Token.OpenBrace,
|
|
@@ -43,6 +54,15 @@ var ListKind;
|
|
|
43
54
|
toleratedDelimiterIsValid: false,
|
|
44
55
|
allowedStatementKeyword: Token.OpKeyword,
|
|
45
56
|
};
|
|
57
|
+
ListKind.ScalarMembers = {
|
|
58
|
+
...PropertiesBase,
|
|
59
|
+
open: Token.OpenBrace,
|
|
60
|
+
close: Token.CloseBrace,
|
|
61
|
+
delimiter: Token.Semicolon,
|
|
62
|
+
toleratedDelimiter: Token.Comma,
|
|
63
|
+
toleratedDelimiterIsValid: false,
|
|
64
|
+
allowedStatementKeyword: Token.InitKeyword,
|
|
65
|
+
};
|
|
46
66
|
ListKind.UnionVariants = {
|
|
47
67
|
...PropertiesBase,
|
|
48
68
|
open: Token.OpenBrace,
|
|
@@ -91,6 +111,12 @@ var ListKind;
|
|
|
91
111
|
open: Token.OpenBracket,
|
|
92
112
|
close: Token.CloseBracket,
|
|
93
113
|
};
|
|
114
|
+
ListKind.ArrayLiteral = {
|
|
115
|
+
...ExpresionsBase,
|
|
116
|
+
allowEmpty: true,
|
|
117
|
+
open: Token.HashBracket,
|
|
118
|
+
close: Token.CloseBracket,
|
|
119
|
+
};
|
|
94
120
|
ListKind.FunctionParameters = {
|
|
95
121
|
...ExpresionsBase,
|
|
96
122
|
allowEmpty: true,
|
|
@@ -234,6 +260,10 @@ function createParser(code, options = {}) {
|
|
|
234
260
|
reportInvalidDecorators(decorators, "alias statement");
|
|
235
261
|
item = parseAliasStatement(pos);
|
|
236
262
|
break;
|
|
263
|
+
case Token.ConstKeyword:
|
|
264
|
+
reportInvalidDecorators(decorators, "const statement");
|
|
265
|
+
item = parseConstStatement(pos);
|
|
266
|
+
break;
|
|
237
267
|
case Token.UsingKeyword:
|
|
238
268
|
reportInvalidDecorators(decorators, "using statement");
|
|
239
269
|
item = parseUsingStatement(pos);
|
|
@@ -329,6 +359,10 @@ function createParser(code, options = {}) {
|
|
|
329
359
|
reportInvalidDecorators(decorators, "alias statement");
|
|
330
360
|
item = parseAliasStatement(pos);
|
|
331
361
|
break;
|
|
362
|
+
case Token.ConstKeyword:
|
|
363
|
+
reportInvalidDecorators(decorators, "const statement");
|
|
364
|
+
item = parseConstStatement(pos);
|
|
365
|
+
break;
|
|
332
366
|
case Token.UsingKeyword:
|
|
333
367
|
reportInvalidDecorators(decorators, "using statement");
|
|
334
368
|
item = parseUsingStatement(pos);
|
|
@@ -622,7 +656,7 @@ function createParser(code, options = {}) {
|
|
|
622
656
|
const id = parseIdentifier();
|
|
623
657
|
let constraint;
|
|
624
658
|
if (parseOptional(Token.ExtendsKeyword)) {
|
|
625
|
-
constraint =
|
|
659
|
+
constraint = parseMixedParameterConstraint();
|
|
626
660
|
}
|
|
627
661
|
let def;
|
|
628
662
|
if (parseOptional(Token.Equals)) {
|
|
@@ -636,6 +670,35 @@ function createParser(code, options = {}) {
|
|
|
636
670
|
...finishNode(pos),
|
|
637
671
|
};
|
|
638
672
|
}
|
|
673
|
+
function parseValueOfExpressionOrIntersectionOrHigher() {
|
|
674
|
+
if (token() === Token.ValueOfKeyword) {
|
|
675
|
+
return parseValueOfExpression();
|
|
676
|
+
}
|
|
677
|
+
else if (parseOptional(Token.OpenParen)) {
|
|
678
|
+
const expr = parseMixedParameterConstraint();
|
|
679
|
+
parseExpected(Token.CloseParen);
|
|
680
|
+
return expr;
|
|
681
|
+
}
|
|
682
|
+
return parseIntersectionExpressionOrHigher();
|
|
683
|
+
}
|
|
684
|
+
function parseMixedParameterConstraint() {
|
|
685
|
+
const pos = tokenPos();
|
|
686
|
+
parseOptional(Token.Bar);
|
|
687
|
+
const node = parseValueOfExpressionOrIntersectionOrHigher();
|
|
688
|
+
if (token() !== Token.Bar) {
|
|
689
|
+
return node;
|
|
690
|
+
}
|
|
691
|
+
const options = [node];
|
|
692
|
+
while (parseOptional(Token.Bar)) {
|
|
693
|
+
const expr = parseValueOfExpressionOrIntersectionOrHigher();
|
|
694
|
+
options.push(expr);
|
|
695
|
+
}
|
|
696
|
+
return {
|
|
697
|
+
kind: SyntaxKind.UnionExpression,
|
|
698
|
+
options,
|
|
699
|
+
...finishNode(pos),
|
|
700
|
+
};
|
|
701
|
+
}
|
|
639
702
|
function parseModelPropertyOrSpread(pos, decorators) {
|
|
640
703
|
return token() === Token.Ellipsis
|
|
641
704
|
? parseModelSpreadProperty(pos, decorators)
|
|
@@ -672,16 +735,47 @@ function createParser(code, options = {}) {
|
|
|
672
735
|
...finishNode(pos),
|
|
673
736
|
};
|
|
674
737
|
}
|
|
738
|
+
function parseObjectLiteralPropertyOrSpread(pos, decorators) {
|
|
739
|
+
reportInvalidDecorators(decorators, "object literal property");
|
|
740
|
+
return token() === Token.Ellipsis
|
|
741
|
+
? parseObjectLiteralSpreadProperty(pos)
|
|
742
|
+
: parseObjectLiteralProperty(pos);
|
|
743
|
+
}
|
|
744
|
+
function parseObjectLiteralSpreadProperty(pos) {
|
|
745
|
+
parseExpected(Token.Ellipsis);
|
|
746
|
+
// This could be broadened to allow any type expression
|
|
747
|
+
const target = parseReferenceExpression();
|
|
748
|
+
return {
|
|
749
|
+
kind: SyntaxKind.ObjectLiteralSpreadProperty,
|
|
750
|
+
target,
|
|
751
|
+
...finishNode(pos),
|
|
752
|
+
};
|
|
753
|
+
}
|
|
754
|
+
function parseObjectLiteralProperty(pos) {
|
|
755
|
+
const id = parseIdentifier({
|
|
756
|
+
message: "property",
|
|
757
|
+
});
|
|
758
|
+
parseExpected(Token.Colon);
|
|
759
|
+
const value = parseExpression();
|
|
760
|
+
return {
|
|
761
|
+
kind: SyntaxKind.ObjectLiteralProperty,
|
|
762
|
+
id,
|
|
763
|
+
value,
|
|
764
|
+
...finishNode(pos),
|
|
765
|
+
};
|
|
766
|
+
}
|
|
675
767
|
function parseScalarStatement(pos, decorators) {
|
|
676
768
|
parseExpected(Token.ScalarKeyword);
|
|
677
769
|
const id = parseIdentifier();
|
|
678
770
|
const templateParameters = parseTemplateParameterList();
|
|
679
771
|
const optionalExtends = parseOptionalScalarExtends();
|
|
772
|
+
const members = parseScalarMembers();
|
|
680
773
|
return {
|
|
681
774
|
kind: SyntaxKind.ScalarStatement,
|
|
682
775
|
id,
|
|
683
776
|
templateParameters,
|
|
684
777
|
extends: optionalExtends,
|
|
778
|
+
members,
|
|
685
779
|
decorators,
|
|
686
780
|
...finishNode(pos),
|
|
687
781
|
};
|
|
@@ -692,6 +786,27 @@ function createParser(code, options = {}) {
|
|
|
692
786
|
}
|
|
693
787
|
return undefined;
|
|
694
788
|
}
|
|
789
|
+
function parseScalarMembers() {
|
|
790
|
+
if (token() === Token.Semicolon) {
|
|
791
|
+
nextToken();
|
|
792
|
+
return [];
|
|
793
|
+
}
|
|
794
|
+
else {
|
|
795
|
+
return parseList(ListKind.ScalarMembers, parseScalarMember);
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
function parseScalarMember(pos, decorators) {
|
|
799
|
+
reportInvalidDecorators(decorators, "scalar member");
|
|
800
|
+
parseExpected(Token.InitKeyword);
|
|
801
|
+
const id = parseIdentifier();
|
|
802
|
+
const parameters = parseFunctionParameters();
|
|
803
|
+
return {
|
|
804
|
+
kind: SyntaxKind.ScalarConstructor,
|
|
805
|
+
id,
|
|
806
|
+
parameters,
|
|
807
|
+
...finishNode(pos),
|
|
808
|
+
};
|
|
809
|
+
}
|
|
695
810
|
function parseEnumStatement(pos, decorators) {
|
|
696
811
|
parseExpected(Token.EnumKeyword);
|
|
697
812
|
const id = parseIdentifier();
|
|
@@ -761,6 +876,27 @@ function createParser(code, options = {}) {
|
|
|
761
876
|
...finishNode(pos),
|
|
762
877
|
};
|
|
763
878
|
}
|
|
879
|
+
function parseConstStatement(pos) {
|
|
880
|
+
parseExpected(Token.ConstKeyword);
|
|
881
|
+
const id = parseIdentifier();
|
|
882
|
+
const type = parseOptionalTypeAnnotation();
|
|
883
|
+
parseExpected(Token.Equals);
|
|
884
|
+
const value = parseExpression();
|
|
885
|
+
parseExpected(Token.Semicolon);
|
|
886
|
+
return {
|
|
887
|
+
kind: SyntaxKind.ConstStatement,
|
|
888
|
+
id,
|
|
889
|
+
value,
|
|
890
|
+
type,
|
|
891
|
+
...finishNode(pos),
|
|
892
|
+
};
|
|
893
|
+
}
|
|
894
|
+
function parseOptionalTypeAnnotation() {
|
|
895
|
+
if (parseOptional(Token.Colon)) {
|
|
896
|
+
return parseExpression();
|
|
897
|
+
}
|
|
898
|
+
return undefined;
|
|
899
|
+
}
|
|
764
900
|
function parseExpression() {
|
|
765
901
|
return parseUnionExpressionOrHigher();
|
|
766
902
|
}
|
|
@@ -830,9 +966,61 @@ function createParser(code, options = {}) {
|
|
|
830
966
|
...finishNode(pos),
|
|
831
967
|
};
|
|
832
968
|
}
|
|
969
|
+
function parseTypeOfExpression() {
|
|
970
|
+
const pos = tokenPos();
|
|
971
|
+
parseExpected(Token.TypeOfKeyword);
|
|
972
|
+
const target = parseTypeOfTarget();
|
|
973
|
+
return {
|
|
974
|
+
kind: SyntaxKind.TypeOfExpression,
|
|
975
|
+
target,
|
|
976
|
+
...finishNode(pos),
|
|
977
|
+
};
|
|
978
|
+
}
|
|
979
|
+
function parseTypeOfTarget() {
|
|
980
|
+
while (true) {
|
|
981
|
+
switch (token()) {
|
|
982
|
+
case Token.TypeOfKeyword:
|
|
983
|
+
return parseTypeOfExpression();
|
|
984
|
+
case Token.Identifier:
|
|
985
|
+
return parseCallOrReferenceExpression();
|
|
986
|
+
case Token.StringLiteral:
|
|
987
|
+
return parseStringLiteral();
|
|
988
|
+
case Token.StringTemplateHead:
|
|
989
|
+
return parseStringTemplateExpression();
|
|
990
|
+
case Token.TrueKeyword:
|
|
991
|
+
case Token.FalseKeyword:
|
|
992
|
+
return parseBooleanLiteral();
|
|
993
|
+
case Token.NumericLiteral:
|
|
994
|
+
return parseNumericLiteral();
|
|
995
|
+
case Token.OpenParen:
|
|
996
|
+
parseExpected(Token.OpenParen);
|
|
997
|
+
const target = parseTypeOfTarget();
|
|
998
|
+
parseExpected(Token.CloseParen);
|
|
999
|
+
return target;
|
|
1000
|
+
default:
|
|
1001
|
+
return parseReferenceExpression("typeofTarget");
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
833
1005
|
function parseReferenceExpression(message) {
|
|
834
1006
|
const pos = tokenPos();
|
|
835
1007
|
const target = parseIdentifierOrMemberExpression(message);
|
|
1008
|
+
return parseReferenceExpressionInternal(target, pos);
|
|
1009
|
+
}
|
|
1010
|
+
function parseCallOrReferenceExpression(message) {
|
|
1011
|
+
const pos = tokenPos();
|
|
1012
|
+
const target = parseIdentifierOrMemberExpression(message);
|
|
1013
|
+
if (token() === Token.OpenParen) {
|
|
1014
|
+
return {
|
|
1015
|
+
kind: SyntaxKind.CallExpression,
|
|
1016
|
+
target,
|
|
1017
|
+
arguments: parseList(ListKind.FunctionArguments, parseExpression),
|
|
1018
|
+
...finishNode(pos),
|
|
1019
|
+
};
|
|
1020
|
+
}
|
|
1021
|
+
return parseReferenceExpressionInternal(target, pos);
|
|
1022
|
+
}
|
|
1023
|
+
function parseReferenceExpressionInternal(target, pos) {
|
|
836
1024
|
const args = parseOptionalList(ListKind.TemplateArguments, parseTemplateArgument);
|
|
837
1025
|
return {
|
|
838
1026
|
kind: SyntaxKind.TypeReference,
|
|
@@ -1039,10 +1227,10 @@ function createParser(code, options = {}) {
|
|
|
1039
1227
|
function parsePrimaryExpression() {
|
|
1040
1228
|
while (true) {
|
|
1041
1229
|
switch (token()) {
|
|
1042
|
-
case Token.
|
|
1043
|
-
return
|
|
1230
|
+
case Token.TypeOfKeyword:
|
|
1231
|
+
return parseTypeOfExpression();
|
|
1044
1232
|
case Token.Identifier:
|
|
1045
|
-
return
|
|
1233
|
+
return parseCallOrReferenceExpression();
|
|
1046
1234
|
case Token.StringLiteral:
|
|
1047
1235
|
return parseStringLiteral();
|
|
1048
1236
|
case Token.StringTemplateHead:
|
|
@@ -1066,6 +1254,10 @@ function createParser(code, options = {}) {
|
|
|
1066
1254
|
const directives = parseDirectiveList();
|
|
1067
1255
|
reportInvalidDirective(directives, "expression");
|
|
1068
1256
|
continue;
|
|
1257
|
+
case Token.HashBrace:
|
|
1258
|
+
return parseObjectLiteral();
|
|
1259
|
+
case Token.HashBracket:
|
|
1260
|
+
return parseArrayLiteral();
|
|
1069
1261
|
case Token.VoidKeyword:
|
|
1070
1262
|
return parseVoidKeyword();
|
|
1071
1263
|
case Token.NeverKeyword:
|
|
@@ -1134,6 +1326,24 @@ function createParser(code, options = {}) {
|
|
|
1134
1326
|
...finishNode(pos),
|
|
1135
1327
|
};
|
|
1136
1328
|
}
|
|
1329
|
+
function parseObjectLiteral() {
|
|
1330
|
+
const pos = tokenPos();
|
|
1331
|
+
const properties = parseList(ListKind.ObjectLiteralProperties, parseObjectLiteralPropertyOrSpread);
|
|
1332
|
+
return {
|
|
1333
|
+
kind: SyntaxKind.ObjectLiteral,
|
|
1334
|
+
properties,
|
|
1335
|
+
...finishNode(pos),
|
|
1336
|
+
};
|
|
1337
|
+
}
|
|
1338
|
+
function parseArrayLiteral() {
|
|
1339
|
+
const pos = tokenPos();
|
|
1340
|
+
const values = parseList(ListKind.ArrayLiteral, parseExpression);
|
|
1341
|
+
return {
|
|
1342
|
+
kind: SyntaxKind.ArrayLiteral,
|
|
1343
|
+
values,
|
|
1344
|
+
...finishNode(pos),
|
|
1345
|
+
};
|
|
1346
|
+
}
|
|
1137
1347
|
function parseStringLiteral() {
|
|
1138
1348
|
const pos = tokenPos();
|
|
1139
1349
|
const value = tokenValue();
|
|
@@ -1373,7 +1583,7 @@ function createParser(code, options = {}) {
|
|
|
1373
1583
|
const optional = parseOptional(Token.Question);
|
|
1374
1584
|
let type;
|
|
1375
1585
|
if (parseOptional(Token.Colon)) {
|
|
1376
|
-
type =
|
|
1586
|
+
type = parseMixedParameterConstraint();
|
|
1377
1587
|
}
|
|
1378
1588
|
return {
|
|
1379
1589
|
kind: SyntaxKind.FunctionParameter,
|
|
@@ -2032,11 +2242,31 @@ function createParser(code, options = {}) {
|
|
|
2032
2242
|
start = tokenPos();
|
|
2033
2243
|
while (parseOptional(Token.Whitespace))
|
|
2034
2244
|
;
|
|
2035
|
-
if (parseOptional(Token.Star)) {
|
|
2245
|
+
if (!parseOptional(Token.Star)) {
|
|
2246
|
+
break;
|
|
2247
|
+
}
|
|
2248
|
+
if (!inCodeFence) {
|
|
2036
2249
|
parseOptional(Token.Whitespace);
|
|
2037
2250
|
start = tokenPos();
|
|
2038
2251
|
break;
|
|
2039
2252
|
}
|
|
2253
|
+
// If we are in a code fence we want to preserve the leading whitespace
|
|
2254
|
+
// except for the first space after the star which is used as indentation.
|
|
2255
|
+
const whitespaceStart = tokenPos();
|
|
2256
|
+
parseOptional(Token.Whitespace);
|
|
2257
|
+
// This `min` handles the case when there is no whitespace after the
|
|
2258
|
+
// star e.g. a case like this:
|
|
2259
|
+
//
|
|
2260
|
+
// /**
|
|
2261
|
+
// *```
|
|
2262
|
+
// *foo-bar
|
|
2263
|
+
// *```
|
|
2264
|
+
// */
|
|
2265
|
+
//
|
|
2266
|
+
// Not having space after the star isn't idiomatic, but we support this.
|
|
2267
|
+
// `whitespaceStart + 1` strips the first space before `foo-bar` if there
|
|
2268
|
+
// is a space after the star (the idiomatic case).
|
|
2269
|
+
start = Math.min(whitespaceStart + 1, tokenPos());
|
|
2040
2270
|
break;
|
|
2041
2271
|
case Token.EndOfFile:
|
|
2042
2272
|
break loop;
|
|
@@ -2555,6 +2785,8 @@ export function visitChildren(node, cb) {
|
|
|
2555
2785
|
visitEach(cb, node.arguments));
|
|
2556
2786
|
case SyntaxKind.DecoratorExpression:
|
|
2557
2787
|
return visitNode(cb, node.target) || visitEach(cb, node.arguments);
|
|
2788
|
+
case SyntaxKind.CallExpression:
|
|
2789
|
+
return visitNode(cb, node.target) || visitEach(cb, node.arguments);
|
|
2558
2790
|
case SyntaxKind.DirectiveExpression:
|
|
2559
2791
|
return visitNode(cb, node.target) || visitEach(cb, node.arguments);
|
|
2560
2792
|
case SyntaxKind.ImportStatement:
|
|
@@ -2604,7 +2836,10 @@ export function visitChildren(node, cb) {
|
|
|
2604
2836
|
return (visitEach(cb, node.decorators) ||
|
|
2605
2837
|
visitNode(cb, node.id) ||
|
|
2606
2838
|
visitEach(cb, node.templateParameters) ||
|
|
2839
|
+
visitEach(cb, node.members) ||
|
|
2607
2840
|
visitNode(cb, node.extends));
|
|
2841
|
+
case SyntaxKind.ScalarConstructor:
|
|
2842
|
+
return visitNode(cb, node.id) || visitEach(cb, node.parameters);
|
|
2608
2843
|
case SyntaxKind.UnionStatement:
|
|
2609
2844
|
return (visitEach(cb, node.decorators) ||
|
|
2610
2845
|
visitNode(cb, node.id) ||
|
|
@@ -2622,6 +2857,8 @@ export function visitChildren(node, cb) {
|
|
|
2622
2857
|
return (visitNode(cb, node.id) ||
|
|
2623
2858
|
visitEach(cb, node.templateParameters) ||
|
|
2624
2859
|
visitNode(cb, node.value));
|
|
2860
|
+
case SyntaxKind.ConstStatement:
|
|
2861
|
+
return visitNode(cb, node.id) || visitNode(cb, node.value) || visitNode(cb, node.type);
|
|
2625
2862
|
case SyntaxKind.DecoratorDeclarationStatement:
|
|
2626
2863
|
return (visitEach(cb, node.modifiers) ||
|
|
2627
2864
|
visitNode(cb, node.id) ||
|
|
@@ -2638,6 +2875,8 @@ export function visitChildren(node, cb) {
|
|
|
2638
2875
|
return visitNode(cb, node.target) || visitEach(cb, node.arguments);
|
|
2639
2876
|
case SyntaxKind.ValueOfExpression:
|
|
2640
2877
|
return visitNode(cb, node.target);
|
|
2878
|
+
case SyntaxKind.TypeOfExpression:
|
|
2879
|
+
return visitNode(cb, node.target);
|
|
2641
2880
|
case SyntaxKind.TupleExpression:
|
|
2642
2881
|
return visitEach(cb, node.values);
|
|
2643
2882
|
case SyntaxKind.UnionExpression:
|
|
@@ -2707,6 +2946,14 @@ export function visitChildren(node, cb) {
|
|
|
2707
2946
|
return visitNode(cb, node.head) || visitEach(cb, node.spans);
|
|
2708
2947
|
case SyntaxKind.StringTemplateSpan:
|
|
2709
2948
|
return visitNode(cb, node.expression) || visitNode(cb, node.literal);
|
|
2949
|
+
case SyntaxKind.ObjectLiteral:
|
|
2950
|
+
return visitEach(cb, node.properties);
|
|
2951
|
+
case SyntaxKind.ObjectLiteralProperty:
|
|
2952
|
+
return visitNode(cb, node.id) || visitNode(cb, node.value);
|
|
2953
|
+
case SyntaxKind.ObjectLiteralSpreadProperty:
|
|
2954
|
+
return visitNode(cb, node.target);
|
|
2955
|
+
case SyntaxKind.ArrayLiteral:
|
|
2956
|
+
return visitEach(cb, node.values);
|
|
2710
2957
|
// no children for the rest of these.
|
|
2711
2958
|
case SyntaxKind.StringTemplateHead:
|
|
2712
2959
|
case SyntaxKind.StringTemplateMiddle:
|
|
@@ -2756,6 +3003,21 @@ function visitEach(cb, nodes) {
|
|
|
2756
3003
|
}
|
|
2757
3004
|
return;
|
|
2758
3005
|
}
|
|
3006
|
+
export function getNodeAtPositionDetail(script, position, filter) {
|
|
3007
|
+
const node = getNodeAtPosition(script, position, filter);
|
|
3008
|
+
if (!node)
|
|
3009
|
+
return undefined;
|
|
3010
|
+
const char = script.file.text.charCodeAt(position);
|
|
3011
|
+
const preChar = position >= 0 ? script.file.text.charCodeAt(position - 1) : NaN;
|
|
3012
|
+
const nextChar = position < script.file.text.length ? script.file.text.charCodeAt(position + 1) : NaN;
|
|
3013
|
+
return {
|
|
3014
|
+
node,
|
|
3015
|
+
position,
|
|
3016
|
+
preChar,
|
|
3017
|
+
nextChar,
|
|
3018
|
+
char,
|
|
3019
|
+
};
|
|
3020
|
+
}
|
|
2759
3021
|
export function getNodeAtPosition(script, position, filter = (node) => true) {
|
|
2760
3022
|
return visit(script);
|
|
2761
3023
|
function visit(node) {
|
|
@@ -2852,6 +3114,26 @@ export function getIdentifierContext(id) {
|
|
|
2852
3114
|
case SyntaxKind.TemplateArgument:
|
|
2853
3115
|
kind = IdentifierKind.TemplateArgument;
|
|
2854
3116
|
break;
|
|
3117
|
+
case SyntaxKind.ObjectLiteralProperty:
|
|
3118
|
+
kind = IdentifierKind.ObjectLiteralProperty;
|
|
3119
|
+
break;
|
|
3120
|
+
case SyntaxKind.ModelProperty:
|
|
3121
|
+
switch (node.parent?.kind) {
|
|
3122
|
+
case SyntaxKind.ModelExpression:
|
|
3123
|
+
kind = IdentifierKind.ModelExpressionProperty;
|
|
3124
|
+
break;
|
|
3125
|
+
case SyntaxKind.ModelStatement:
|
|
3126
|
+
kind = IdentifierKind.ModelStatementProperty;
|
|
3127
|
+
break;
|
|
3128
|
+
default:
|
|
3129
|
+
compilerAssert("false", "ModelProperty with unexpected parent kind.");
|
|
3130
|
+
kind =
|
|
3131
|
+
id.parent.id === id
|
|
3132
|
+
? IdentifierKind.Declaration
|
|
3133
|
+
: IdentifierKind.Other;
|
|
3134
|
+
break;
|
|
3135
|
+
}
|
|
3136
|
+
break;
|
|
2855
3137
|
default:
|
|
2856
3138
|
kind =
|
|
2857
3139
|
id.parent.id === id
|