@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 CHANGED
@@ -1,4 +1,4 @@
1
1
  export default {
2
- "version": "0.66.0-dev.11",
3
- "commit": "f523b089612028240abf59440356e0670fc41ec9"
2
+ "version": "0.66.0-dev.13",
3
+ "commit": "4757a4f99ef1d90d14d18eb55133b4404c38b9f5"
4
4
  };
@@ -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
- resolveIdentifier(node: IdentifierNode): Sym | undefined;
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":"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"}
1
+ {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"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"}
@@ -88,7 +88,7 @@ export function createChecker(program, resolver) {
88
88
  getGlobalNamespaceNode,
89
89
  getMergedSymbol,
90
90
  cloneType,
91
- resolveIdentifier,
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 resolveIdentifier(id, mapper) {
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
- if (model) {
1702
- sym = getMemberSymbol(model.node.symbol, id.sv);
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
- return sym?.symbolSource ?? sym;
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?.kind === "Model" || refType?.kind === "Tuple"
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(modelOrTuple, path) {
1811
- let cur = modelOrTuple;
1812
- for (const seg of path) {
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
- if (cur.name === "Array" && seg.tupleIndex !== undefined) {
1826
- cur = cur.templateMapper?.args[0];
1827
- }
1828
- else if (cur.name !== "Array" && seg.propertyName) {
1829
- cur = cur.properties.get(seg.propertyName)?.type;
1830
- }
1831
- else {
1832
- return undefined;
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
- break;
1831
+ return models;
1835
1832
  default:
1836
- return undefined;
1833
+ return [];
1837
1834
  }
1838
1835
  }
1839
- return cur?.kind === "Model" ? cur : undefined;
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.resolveIdentifier(decNode.target.kind === SyntaxKind.MemberExpression ? decNode.target.id : decNode.target);
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 (!model) {
2014
+ if (model.length <= 0) {
1982
2015
  return completions;
1983
2016
  }
1984
2017
  const curModelNode = ancestor.parent;
1985
- for (const prop of walkPropertiesInherited(model)) {
1986
- if (identifier.sv === prop.name ||
1987
- !curModelNode.properties.find((p) => (p.kind === SyntaxKind.ModelProperty ||
1988
- p.kind === SyntaxKind.ObjectLiteralProperty) &&
1989
- p.id.sv === prop.name)) {
1990
- const sym = getMemberSymbol(model.node.symbol, prop.name);
1991
- if (sym) {
1992
- addCompletion(prop.name, sym);
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
  }