@azure-tools/typespec-azure-core 0.40.0-dev.6 → 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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure-tools/typespec-azure-core",
3
- "version": "0.40.0-dev.6",
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",