@typespec/compiler 0.66.0-dev.11 → 0.66.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/manifest.js +2 -2
- package/dist/src/core/checker.d.ts +1 -1
- package/dist/src/core/checker.d.ts.map +1 -1
- package/dist/src/core/checker.js +85 -50
- package/dist/src/core/checker.js.map +1 -1
- package/dist/src/server/serverlib.d.ts.map +1 -1
- package/dist/src/server/serverlib.js +22 -16
- package/dist/src/server/serverlib.js.map +1 -1
- package/dist/src/server/tmlanguage.js +1 -1
- package/dist/src/server/tmlanguage.js.map +1 -1
- package/dist/typespec.tmLanguage +3 -3
- package/package.json +1 -1
package/dist/manifest.js
CHANGED
|
@@ -25,7 +25,7 @@ export interface Checker {
|
|
|
25
25
|
}): T;
|
|
26
26
|
evalProjection(node: ProjectionNode, target: Type, args: Type[]): Type;
|
|
27
27
|
project(target: Type, projection: ProjectionNode, args?: (Type | string | number | boolean)[]): Type;
|
|
28
|
-
|
|
28
|
+
resolveRelatedSymbols(node: IdentifierNode): Sym[] | undefined;
|
|
29
29
|
resolveCompletions(node: IdentifierNode): Map<string, TypeSpecCompletionItem>;
|
|
30
30
|
createType<T extends Type extends any ? CreateTypeProps : never>(typeDef: T): T & TypePrototype & {
|
|
31
31
|
isFinished: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"AAgBA,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AASlD,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAa9D,OAAO,EAML,cAAc,EACd,kBAAkB,EAWlB,UAAU,EACV,gBAAgB,EAEhB,MAAM,EAMN,SAAS,EAKT,YAAY,EAEZ,cAAc,EAKd,mBAAmB,EAEnB,WAAW,EACX,WAAW,EAQX,KAAK,EAGL,aAAa,EAIb,SAAS,EAET,SAAS,EACT,IAAI,EACJ,QAAQ,EAER,cAAc,EACd,kBAAkB,EAsBlB,cAAc,EAGd,uBAAuB,EAKvB,MAAM,EAMN,WAAW,EACX,QAAQ,EACR,aAAa,EACb,iBAAiB,EAUjB,GAAG,EAaH,IAAI,EAKJ,iBAAiB,EACjB,kBAAkB,EAMlB,WAAW,EAEX,KAAK,EACL,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,GAAG,MAAM,aAAa,CAAC,CAAC;AAE5F,MAAM,WAAW,OAAO;IACtB,aAAa,EAAE,aAAa,CAAC;IAE7B,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAIjC,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAChD,sBAAsB,IAAI,SAAS,CAAC;IAMpC,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAAC;IACvD,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAAC;IACzD,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAAC;IACzD,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAAC;IAE/C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;IAE3D;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM,CAAC;IACnF,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,eAAe,CAAC,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAAE,GAAG,CAAC,CAAC;IACnF,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACvE,OAAO,CACL,MAAM,EAAE,IAAI,EACZ,UAAU,EAAE,cAAc,EAC1B,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,GAC1C,IAAI,CAAC;IACR,
|
|
1
|
+
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/checker.js
CHANGED
|
@@ -88,7 +88,7 @@ export function createChecker(program, resolver) {
|
|
|
88
88
|
getGlobalNamespaceNode,
|
|
89
89
|
getMergedSymbol,
|
|
90
90
|
cloneType,
|
|
91
|
-
|
|
91
|
+
resolveRelatedSymbols,
|
|
92
92
|
resolveCompletions,
|
|
93
93
|
evalProjection,
|
|
94
94
|
project,
|
|
@@ -1691,24 +1691,20 @@ export function createChecker(program, resolver) {
|
|
|
1691
1691
|
function getSymbolLinks(s) {
|
|
1692
1692
|
return resolver.getSymbolLinks(s);
|
|
1693
1693
|
}
|
|
1694
|
-
function
|
|
1694
|
+
function resolveRelatedSymbols(id, mapper) {
|
|
1695
1695
|
let sym;
|
|
1696
1696
|
const { node, kind } = getIdentifierContext(id);
|
|
1697
1697
|
switch (kind) {
|
|
1698
1698
|
case IdentifierKind.ModelExpressionProperty:
|
|
1699
1699
|
case IdentifierKind.ObjectLiteralProperty:
|
|
1700
1700
|
const model = getReferencedModel(node);
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
else {
|
|
1705
|
-
return undefined;
|
|
1706
|
-
}
|
|
1707
|
-
break;
|
|
1701
|
+
return model
|
|
1702
|
+
.map((m) => getMemberSymbol(m.node.symbol, id.sv))
|
|
1703
|
+
.filter((m) => m !== undefined);
|
|
1708
1704
|
case IdentifierKind.ModelStatementProperty:
|
|
1709
1705
|
case IdentifierKind.Declaration:
|
|
1710
1706
|
const links = resolver.getNodeLinks(id);
|
|
1711
|
-
return links.resolvedSymbol;
|
|
1707
|
+
return links.resolvedSymbol === undefined ? undefined : [links.resolvedSymbol];
|
|
1712
1708
|
case IdentifierKind.Other:
|
|
1713
1709
|
return undefined;
|
|
1714
1710
|
case IdentifierKind.Decorator:
|
|
@@ -1743,7 +1739,15 @@ export function createChecker(program, resolver) {
|
|
|
1743
1739
|
const _assertNever = kind;
|
|
1744
1740
|
compilerAssert(false, "Unreachable");
|
|
1745
1741
|
}
|
|
1746
|
-
|
|
1742
|
+
if (sym) {
|
|
1743
|
+
if (sym.symbolSource) {
|
|
1744
|
+
return [sym.symbolSource];
|
|
1745
|
+
}
|
|
1746
|
+
else {
|
|
1747
|
+
return [sym];
|
|
1748
|
+
}
|
|
1749
|
+
}
|
|
1750
|
+
return undefined; //sym?.symbolSource ?? sym;
|
|
1747
1751
|
}
|
|
1748
1752
|
function getTemplateDeclarationsForArgument(node, mapper) {
|
|
1749
1753
|
const ref = node.parent;
|
|
@@ -1789,9 +1793,7 @@ export function createChecker(program, resolver) {
|
|
|
1789
1793
|
refType = getReferencedTypeFromConstAssignment(foundNode);
|
|
1790
1794
|
break;
|
|
1791
1795
|
}
|
|
1792
|
-
return refType
|
|
1793
|
-
? getNestedModel(refType, path)
|
|
1794
|
-
: undefined;
|
|
1796
|
+
return getNestedModel(refType, path);
|
|
1795
1797
|
function pushToModelPath(node, preNode, path) {
|
|
1796
1798
|
if (node.kind === SyntaxKind.ArrayLiteral || node.kind === SyntaxKind.TupleExpression) {
|
|
1797
1799
|
const index = node.values.findIndex((n) => n === preNode);
|
|
@@ -1807,36 +1809,67 @@ export function createChecker(program, resolver) {
|
|
|
1807
1809
|
path.unshift({ propertyName: node.id.sv });
|
|
1808
1810
|
}
|
|
1809
1811
|
}
|
|
1810
|
-
function getNestedModel(
|
|
1811
|
-
let cur =
|
|
1812
|
-
|
|
1812
|
+
function getNestedModel(modelOrTupleOrUnion, path) {
|
|
1813
|
+
let cur = modelOrTupleOrUnion;
|
|
1814
|
+
if (cur && cur.kind !== "Model" && cur.kind !== "Tuple" && cur.kind !== "Union") {
|
|
1815
|
+
return [];
|
|
1816
|
+
}
|
|
1817
|
+
if (path.length === 0) {
|
|
1818
|
+
// Handle union and model type nesting when path is empty
|
|
1813
1819
|
switch (cur?.kind) {
|
|
1814
|
-
case "Tuple":
|
|
1815
|
-
if (seg.tupleIndex !== undefined &&
|
|
1816
|
-
seg.tupleIndex >= 0 &&
|
|
1817
|
-
seg.tupleIndex < cur.values.length) {
|
|
1818
|
-
cur = cur.values[seg.tupleIndex];
|
|
1819
|
-
}
|
|
1820
|
-
else {
|
|
1821
|
-
return undefined;
|
|
1822
|
-
}
|
|
1823
|
-
break;
|
|
1824
1820
|
case "Model":
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1821
|
+
return [cur];
|
|
1822
|
+
case "Union":
|
|
1823
|
+
const models = [];
|
|
1824
|
+
for (const variant of cur.variants.values()) {
|
|
1825
|
+
if (variant.type.kind === "Model" ||
|
|
1826
|
+
variant.type.kind === "Tuple" ||
|
|
1827
|
+
variant.type.kind === "Union") {
|
|
1828
|
+
models.push(...(getNestedModel(variant.type, path) ?? []));
|
|
1829
|
+
}
|
|
1833
1830
|
}
|
|
1834
|
-
|
|
1831
|
+
return models;
|
|
1835
1832
|
default:
|
|
1836
|
-
return
|
|
1833
|
+
return [];
|
|
1837
1834
|
}
|
|
1838
1835
|
}
|
|
1839
|
-
|
|
1836
|
+
const seg = path[0];
|
|
1837
|
+
switch (cur?.kind) {
|
|
1838
|
+
case "Tuple":
|
|
1839
|
+
if (seg.tupleIndex !== undefined &&
|
|
1840
|
+
seg.tupleIndex >= 0 &&
|
|
1841
|
+
seg.tupleIndex < cur.values.length) {
|
|
1842
|
+
return getNestedModel(cur.values[seg.tupleIndex], path.slice(1));
|
|
1843
|
+
}
|
|
1844
|
+
else {
|
|
1845
|
+
return [];
|
|
1846
|
+
}
|
|
1847
|
+
case "Model":
|
|
1848
|
+
if (cur.name === "Array" && seg.tupleIndex !== undefined) {
|
|
1849
|
+
cur = cur.templateMapper?.args[0];
|
|
1850
|
+
}
|
|
1851
|
+
else if (cur.name !== "Array" && seg.propertyName) {
|
|
1852
|
+
cur = cur.properties.get(seg.propertyName)?.type;
|
|
1853
|
+
}
|
|
1854
|
+
else {
|
|
1855
|
+
return [];
|
|
1856
|
+
}
|
|
1857
|
+
return getNestedModel(cur, path.slice(1));
|
|
1858
|
+
case "Union":
|
|
1859
|
+
// When seg.property name exists, it means that it is in the union model or tuple,
|
|
1860
|
+
// and the corresponding model or tuple needs to be found recursively.
|
|
1861
|
+
const models = [];
|
|
1862
|
+
for (const variant of cur.variants.values()) {
|
|
1863
|
+
if (variant.type.kind === "Model" ||
|
|
1864
|
+
variant.type.kind === "Tuple" ||
|
|
1865
|
+
variant.type.kind === "Union") {
|
|
1866
|
+
models.push(...(getNestedModel(variant.type, path) ?? []));
|
|
1867
|
+
}
|
|
1868
|
+
}
|
|
1869
|
+
return models;
|
|
1870
|
+
default:
|
|
1871
|
+
return [];
|
|
1872
|
+
}
|
|
1840
1873
|
}
|
|
1841
1874
|
function getReferencedTypeFromTemplateDeclaration(node) {
|
|
1842
1875
|
let templateParmaeterDeclNode = undefined;
|
|
@@ -1901,11 +1934,11 @@ export function createChecker(program, resolver) {
|
|
|
1901
1934
|
if (decNode?.kind !== SyntaxKind.DecoratorExpression) {
|
|
1902
1935
|
return undefined;
|
|
1903
1936
|
}
|
|
1904
|
-
const decSym = program.checker.
|
|
1905
|
-
if (!decSym) {
|
|
1937
|
+
const decSym = program.checker.resolveRelatedSymbols(decNode.target.kind === SyntaxKind.MemberExpression ? decNode.target.id : decNode.target);
|
|
1938
|
+
if (!decSym || decSym.length <= 0) {
|
|
1906
1939
|
return undefined;
|
|
1907
1940
|
}
|
|
1908
|
-
const decDecl = decSym.declarations.find((x) => x.kind === SyntaxKind.DecoratorDeclarationStatement);
|
|
1941
|
+
const decDecl = decSym[0].declarations.find((x) => x.kind === SyntaxKind.DecoratorDeclarationStatement);
|
|
1909
1942
|
if (!decDecl) {
|
|
1910
1943
|
return undefined;
|
|
1911
1944
|
}
|
|
@@ -1978,18 +2011,20 @@ export function createChecker(program, resolver) {
|
|
|
1978
2011
|
else if (kind === IdentifierKind.ModelExpressionProperty ||
|
|
1979
2012
|
kind === IdentifierKind.ObjectLiteralProperty) {
|
|
1980
2013
|
const model = getReferencedModel(ancestor);
|
|
1981
|
-
if (
|
|
2014
|
+
if (model.length <= 0) {
|
|
1982
2015
|
return completions;
|
|
1983
2016
|
}
|
|
1984
2017
|
const curModelNode = ancestor.parent;
|
|
1985
|
-
for (const
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
p.kind === SyntaxKind.
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
2018
|
+
for (const curModel of model) {
|
|
2019
|
+
for (const prop of walkPropertiesInherited(curModel)) {
|
|
2020
|
+
if (identifier.sv === prop.name ||
|
|
2021
|
+
!curModelNode.properties.find((p) => (p.kind === SyntaxKind.ModelProperty ||
|
|
2022
|
+
p.kind === SyntaxKind.ObjectLiteralProperty) &&
|
|
2023
|
+
p.id.sv === prop.name)) {
|
|
2024
|
+
const sym = getMemberSymbol(curModel.node.symbol, prop.name);
|
|
2025
|
+
if (sym) {
|
|
2026
|
+
addCompletion(prop.name, sym);
|
|
2027
|
+
}
|
|
1993
2028
|
}
|
|
1994
2029
|
}
|
|
1995
2030
|
}
|