@azure-tools/typespec-azure-core 0.40.0-dev.5 → 0.40.0-dev.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"no-enum.d.ts","sourceRoot":"","sources":["../../../src/rules/no-enum.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU;;EAqBrB,CAAC"}
1
+ {"version":3,"file":"no-enum.d.ts","sourceRoot":"","sources":["../../../src/rules/no-enum.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,UAAU;;EAsBrB,CAAC"}
@@ -1,4 +1,4 @@
1
- import { createRule, paramMessage } from "@typespec/compiler";
1
+ import { SyntaxKind, createRule, getPositionBeforeTrivia, getSourceLocation, paramMessage, } from "@typespec/compiler";
2
2
  import { getVersionsForEnum } from "@typespec/versioning";
3
3
  export const noEnumRule = createRule({
4
4
  name: "no-enum",
@@ -17,9 +17,100 @@ export const noEnumRule = createRule({
17
17
  context.reportDiagnostic({
18
18
  format: { enumName: en.name },
19
19
  target: en,
20
+ codefixes: [createEnumToExtensibleUnionCodeFix(en)],
20
21
  });
21
22
  },
22
23
  };
23
24
  },
24
25
  });
26
+ function createEnumToExtensibleUnionCodeFix(en) {
27
+ function convertEnumMemberToUnionVariant(node) {
28
+ switch (node.kind) {
29
+ case SyntaxKind.EnumSpreadMember:
30
+ return getSourceLocation(node.target).file.text.slice(node.target.pos, node.target.end);
31
+ case SyntaxKind.EnumMember:
32
+ return node.value
33
+ ? `${node.id.sv}: ${node.value.kind === SyntaxKind.NumericLiteral
34
+ ? node.value.value
35
+ : `"${node.value.value}"`}`
36
+ : `"${node.id.sv}"`;
37
+ }
38
+ }
39
+ return {
40
+ id: "enum-to-extensible-union",
41
+ label: "Convert to extensible union",
42
+ fix(context) {
43
+ const type = typeof [...en.members.values()][0].value === "number" ? "number" : "string";
44
+ const indent = getIndent(en.node);
45
+ const script = getTypeSpecScript(en.node);
46
+ if (script === undefined) {
47
+ return [];
48
+ }
49
+ return [
50
+ context.replaceText(getSourceLocation(en.node), [
51
+ getNodeAnnotations(en.node),
52
+ `union ${en.name} {\n`,
53
+ `${indent} `,
54
+ `${type},\n`,
55
+ ...en.node.members.map((member) => {
56
+ return `${getNodeTrivia(script, member)}${getNodeAnnotations(member)}${convertEnumMemberToUnionVariant(member)},`;
57
+ }),
58
+ getNodeTrivia(script, en.node.end - 1),
59
+ "}",
60
+ ].join("")),
61
+ ];
62
+ },
63
+ };
64
+ }
65
+ function getIndent(node) {
66
+ const source = getSourceLocation(node).file.text;
67
+ const start = source.lastIndexOf("\n", node.pos);
68
+ return source.slice(start + 1, node.pos);
69
+ }
70
+ function getTypeSpecScript(node) {
71
+ let root = node;
72
+ while (root.parent !== undefined) {
73
+ root = root.parent;
74
+ }
75
+ if (root.kind !== SyntaxKind.TypeSpecScript) {
76
+ return undefined;
77
+ }
78
+ return root;
79
+ }
80
+ function getNodeTrivia(root, node) {
81
+ const end = typeof node === "number" ? node : node.pos;
82
+ const pos = getPositionBeforeTrivia(root, end);
83
+ return root.file.text.slice(pos, end);
84
+ }
85
+ function getNodeAnnotations(node) {
86
+ var _a, _b, _c;
87
+ const source = getSourceLocation(node).file.text;
88
+ let endOfTrivia = node.pos;
89
+ for (const directive of (_a = node.directives) !== null && _a !== void 0 ? _a : []) {
90
+ if (directive.end > endOfTrivia) {
91
+ endOfTrivia = directive.end;
92
+ }
93
+ }
94
+ for (const doc of (_b = node.docs) !== null && _b !== void 0 ? _b : []) {
95
+ if (doc.end > endOfTrivia) {
96
+ endOfTrivia = doc.end;
97
+ }
98
+ }
99
+ if ("decorators" in node) {
100
+ for (const dec of (_c = node.decorators) !== null && _c !== void 0 ? _c : []) {
101
+ if (dec.end > endOfTrivia) {
102
+ endOfTrivia = dec.end;
103
+ }
104
+ }
105
+ }
106
+ for (let i = endOfTrivia; i < node.end; i++) {
107
+ if (source[i] === " ") {
108
+ endOfTrivia = i + 1;
109
+ }
110
+ else {
111
+ break;
112
+ }
113
+ }
114
+ return getSourceLocation(node).file.text.slice(node.pos, endOfTrivia);
115
+ }
25
116
  //# sourceMappingURL=no-enum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"no-enum.js","sourceRoot":"","sources":["../../../src/rules/no-enum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,sCAAsC;IACnD,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,gFAAgF;IACrF,QAAQ,EAAE;QACR,OAAO,EAAE,YAAY,CAAA,6LAA6L;KACnN;IACD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,IAAI,EAAE,CAAC,EAAQ,EAAE,EAAE;gBACjB,IAAI,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvD,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,gBAAgB,CAAC;oBACvB,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE;oBAC7B,MAAM,EAAE,EAAE;iBACX,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"no-enum.js","sourceRoot":"","sources":["../../../src/rules/no-enum.ts"],"names":[],"mappings":"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"}
package/lib/models.tsp CHANGED
@@ -344,3 +344,14 @@ scalar ipV6Address extends string;
344
344
  #suppress "@azure-tools/typespec-autorest/invalid-format" "Foundation."
345
345
  @format("eTag")
346
346
  scalar eTag extends string;
347
+
348
+ /**
349
+ * Represents an Azure geography region where supported resource providers live.
350
+ *
351
+ * @example
352
+ *
353
+ * ```
354
+ * WestUS
355
+ * ```
356
+ */
357
+ scalar azureLocation extends string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure-tools/typespec-azure-core",
3
- "version": "0.40.0-dev.5",
3
+ "version": "0.40.0-dev.7",
4
4
  "author": "Microsoft Corporation",
5
5
  "description": "TypeSpec Azure Core library",
6
6
  "homepage": "https://azure.github.io/typespec-azure",