@typespec/compiler 0.46.0-dev.9 → 0.47.0-dev.0

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.
Files changed (109) hide show
  1. package/dist/manifest.js +2 -2
  2. package/dist/src/config/config-loader.d.ts.map +1 -1
  3. package/dist/src/config/config-loader.js +1 -0
  4. package/dist/src/config/config-loader.js.map +1 -1
  5. package/dist/src/config/config-schema.d.ts.map +1 -1
  6. package/dist/src/config/config-schema.js +24 -0
  7. package/dist/src/config/config-schema.js.map +1 -1
  8. package/dist/src/config/types.d.ts +8 -1
  9. package/dist/src/config/types.d.ts.map +1 -1
  10. package/dist/src/core/checker.d.ts.map +1 -1
  11. package/dist/src/core/checker.js +13 -8
  12. package/dist/src/core/checker.js.map +1 -1
  13. package/dist/src/core/cli/args.d.ts.map +1 -1
  14. package/dist/src/core/cli/args.js +1 -0
  15. package/dist/src/core/cli/args.js.map +1 -1
  16. package/dist/src/core/helpers/index.d.ts +1 -0
  17. package/dist/src/core/helpers/index.d.ts.map +1 -1
  18. package/dist/src/core/helpers/index.js +1 -0
  19. package/dist/src/core/helpers/index.js.map +1 -1
  20. package/dist/src/core/helpers/location-context.d.ts +4 -0
  21. package/dist/src/core/helpers/location-context.d.ts.map +1 -0
  22. package/dist/src/core/helpers/location-context.js +9 -0
  23. package/dist/src/core/helpers/location-context.js.map +1 -0
  24. package/dist/src/core/helpers/type-name-utils.d.ts.map +1 -1
  25. package/dist/src/core/helpers/type-name-utils.js +8 -3
  26. package/dist/src/core/helpers/type-name-utils.js.map +1 -1
  27. package/dist/src/core/index.d.ts +1 -1
  28. package/dist/src/core/index.d.ts.map +1 -1
  29. package/dist/src/core/index.js +1 -1
  30. package/dist/src/core/index.js.map +1 -1
  31. package/dist/src/core/library.d.ts +3 -1
  32. package/dist/src/core/library.d.ts.map +1 -1
  33. package/dist/src/core/library.js +6 -1
  34. package/dist/src/core/library.js.map +1 -1
  35. package/dist/src/core/linter.d.ts +10 -0
  36. package/dist/src/core/linter.d.ts.map +1 -0
  37. package/dist/src/core/linter.js +166 -0
  38. package/dist/src/core/linter.js.map +1 -0
  39. package/dist/src/core/messages.d.ts +77 -2
  40. package/dist/src/core/messages.d.ts.map +1 -1
  41. package/dist/src/core/messages.js +27 -0
  42. package/dist/src/core/messages.js.map +1 -1
  43. package/dist/src/core/node-host.d.ts +3 -0
  44. package/dist/src/core/node-host.d.ts.map +1 -1
  45. package/dist/src/core/node-host.js +22 -1
  46. package/dist/src/core/node-host.js.map +1 -1
  47. package/dist/src/core/options.d.ts +3 -1
  48. package/dist/src/core/options.d.ts.map +1 -1
  49. package/dist/src/core/parser.d.ts.map +1 -1
  50. package/dist/src/core/parser.js +56 -29
  51. package/dist/src/core/parser.js.map +1 -1
  52. package/dist/src/core/program.d.ts +3 -17
  53. package/dist/src/core/program.d.ts.map +1 -1
  54. package/dist/src/core/program.js +90 -46
  55. package/dist/src/core/program.js.map +1 -1
  56. package/dist/src/core/schema-validator.d.ts +1 -0
  57. package/dist/src/core/schema-validator.d.ts.map +1 -1
  58. package/dist/src/core/schema-validator.js +2 -2
  59. package/dist/src/core/schema-validator.js.map +1 -1
  60. package/dist/src/core/types.d.ts +110 -11
  61. package/dist/src/core/types.d.ts.map +1 -1
  62. package/dist/src/core/types.js.map +1 -1
  63. package/dist/src/emitter-framework/asset-emitter.d.ts.map +1 -1
  64. package/dist/src/emitter-framework/asset-emitter.js +89 -45
  65. package/dist/src/emitter-framework/asset-emitter.js.map +1 -1
  66. package/dist/src/emitter-framework/type-emitter.d.ts +43 -22
  67. package/dist/src/emitter-framework/type-emitter.d.ts.map +1 -1
  68. package/dist/src/emitter-framework/type-emitter.js +90 -23
  69. package/dist/src/emitter-framework/type-emitter.js.map +1 -1
  70. package/dist/src/emitter-framework/types.d.ts +14 -4
  71. package/dist/src/emitter-framework/types.d.ts.map +1 -1
  72. package/dist/src/emitter-framework/types.js +1 -0
  73. package/dist/src/emitter-framework/types.js.map +1 -1
  74. package/dist/src/formatter/parser.d.ts.map +1 -1
  75. package/dist/src/formatter/parser.js +4 -1
  76. package/dist/src/formatter/parser.js.map +1 -1
  77. package/dist/src/formatter/print/comment-handler.d.ts +1 -1
  78. package/dist/src/formatter/print/comment-handler.d.ts.map +1 -1
  79. package/dist/src/formatter/print/comment-handler.js +37 -5
  80. package/dist/src/formatter/print/comment-handler.js.map +1 -1
  81. package/dist/src/formatter/print/needs-parens.d.ts +1 -1
  82. package/dist/src/formatter/print/needs-parens.js +1 -1
  83. package/dist/src/formatter/print/printer.d.ts +3 -1
  84. package/dist/src/formatter/print/printer.d.ts.map +1 -1
  85. package/dist/src/formatter/print/printer.js +118 -32
  86. package/dist/src/formatter/print/printer.js.map +1 -1
  87. package/dist/src/init/init-template.d.ts +3 -1
  88. package/dist/src/init/init-template.d.ts.map +1 -1
  89. package/dist/src/init/init-template.js +3 -6
  90. package/dist/src/init/init-template.js.map +1 -1
  91. package/dist/src/init/init.d.ts.map +1 -1
  92. package/dist/src/init/init.js +96 -16
  93. package/dist/src/init/init.js.map +1 -1
  94. package/dist/src/lib/decorators.d.ts +9 -0
  95. package/dist/src/lib/decorators.d.ts.map +1 -1
  96. package/dist/src/lib/decorators.js +9 -0
  97. package/dist/src/lib/decorators.js.map +1 -1
  98. package/dist/src/testing/index.d.ts +1 -0
  99. package/dist/src/testing/index.d.ts.map +1 -1
  100. package/dist/src/testing/index.js +1 -0
  101. package/dist/src/testing/index.js.map +1 -1
  102. package/dist/src/testing/rule-tester.d.ts +12 -0
  103. package/dist/src/testing/rule-tester.d.ts.map +1 -0
  104. package/dist/src/testing/rule-tester.js +34 -0
  105. package/dist/src/testing/rule-tester.js.map +1 -0
  106. package/entrypoints/cli.js +5 -0
  107. package/entrypoints/server.js +5 -0
  108. package/lib/decorators.tsp +8 -0
  109. package/package.json +12 -9
@@ -1,13 +1,16 @@
1
1
  import { getSourceLocation } from "../core/diagnostics.js";
2
2
  import { parse as typespecParse, visitChildren } from "../core/parser.js";
3
3
  import { SyntaxKind } from "../core/types.js";
4
+ import { mutate } from "../core/util.js";
4
5
  export function parse(text, parsers, opts) {
5
- const result = typespecParse(text, { comments: true, docs: false });
6
+ const result = typespecParse(text, { comments: true, docs: true });
6
7
  flattenNamespaces(result);
7
8
  const errors = result.parseDiagnostics.filter((x) => x.severity === "error");
8
9
  if (errors.length > 0 && !result.printable) {
9
10
  throw new PrettierParserError(errors[0]);
10
11
  }
12
+ // Remove doc comments as those are handled directly.
13
+ mutate(result).comments = result.comments.filter((x) => !(x.kind === SyntaxKind.BlockComment && x.parsedAsDocs));
11
14
  return result;
12
15
  }
13
16
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/formatter/parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,KAAK,IAAI,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAoB,UAAU,EAAsB,MAAM,kBAAkB,CAAC;AAEpF,MAAM,UAAU,KAAK,CACnB,IAAY,EACZ,OAAyC,EACzC,IAA+C;IAE/C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEpE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QAC1C,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1C;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAU;IACnC,aAAa,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,kBAAkB,EAAE;YAC/C,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,OAAO,OAAO,CAAC,UAAU,IAAI,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE;gBACzD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aACtB;YACD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE;gBAC3B,GAAG;aACJ,CAAC,CAAC;YACH,iBAAiB,CAAC,OAAO,CAAC,CAAC;SAC5B;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAE5C,YAAmC,KAAiB;;QAClD,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QADY,UAAK,GAAL,KAAK,CAAY;QAElD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,GAAG;YACT,KAAK,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,GAAG,mCAAI,CAAC;YACzB,GAAG,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,GAAG,mCAAI,CAAC;SACxB,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/formatter/parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,KAAK,IAAI,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAoB,UAAU,EAAsB,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,UAAU,KAAK,CACnB,IAAY,EACZ,OAAyC,EACzC,IAA+C;IAE/C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEnE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE1B,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QAC1C,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1C;IACD,qDAAqD;IACrD,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAC9C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,CAC/D,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAU;IACnC,aAAa,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,kBAAkB,EAAE;YAC/C,IAAI,OAAO,GAAG,IAAI,CAAC;YACnB,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,OAAO,OAAO,CAAC,UAAU,IAAI,MAAM,IAAI,OAAO,CAAC,UAAU,EAAE;gBACzD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aACtB;YACD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE;gBAC3B,GAAG;aACJ,CAAC,CAAC;YACH,iBAAiB,CAAC,OAAO,CAAC,CAAC;SAC5B;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAE5C,YAAmC,KAAiB;;QAClD,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QADY,UAAK,GAAL,KAAK,CAAY;QAElD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,GAAG,GAAG;YACT,KAAK,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,GAAG,mCAAI,CAAC;YACzB,GAAG,EAAE,MAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,GAAG,mCAAI,CAAC;SACxB,CAAC;IACJ,CAAC;CACF"}
@@ -1,5 +1,5 @@
1
1
  import { Printer } from "prettier";
2
- import { Node } from "../../core/index.js";
2
+ import { Node } from "../../core/types.js";
3
3
  /**
4
4
  * Override the default behavior to attach comments to syntax node.
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"comment-handler.d.ts","sourceRoot":"","sources":["../../../../src/formatter/print/comment-handler.ts"],"names":[],"mappings":"AAAA,OAAiB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAc,MAAM,qBAAqB,CAAC;AASvD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAK1D,CAAC"}
1
+ {"version":3,"file":"comment-handler.d.ts","sourceRoot":"","sources":["../../../../src/formatter/print/comment-handler.ts"],"names":[],"mappings":"AAAA,OAAiB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAkC,MAAM,qBAAqB,CAAC;AAU3E;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAQ1D,CAAC"}
@@ -1,11 +1,16 @@
1
1
  import prettier from "prettier";
2
- import { SyntaxKind } from "../../core/index.js";
2
+ import { SyntaxKind } from "../../core/types.js";
3
3
  const { util } = prettier;
4
4
  /**
5
5
  * Override the default behavior to attach comments to syntax node.
6
6
  */
7
7
  export const commentHandler = {
8
- ownLine: (comment) => [addEmptyInterfaceComment, addEmptyModelComment, addStatementDecoratorComment].some((x) => x(comment)),
8
+ ownLine: (comment, text, options, ast, isLastComment) => [
9
+ addEmptyInterfaceComment,
10
+ addEmptyModelComment,
11
+ addStatementDecoratorComment,
12
+ handleOnlyComments,
13
+ ].some((x) => x({ comment, text, options, ast: ast, isLastComment })),
9
14
  };
10
15
  /**
11
16
  * When a comment is on an empty interface make sure it gets added as a dangling comment on it and not on the identifier.
@@ -16,7 +21,7 @@ export const commentHandler = {
16
21
  * // My comment
17
22
  * }
18
23
  */
19
- function addEmptyInterfaceComment(comment) {
24
+ function addEmptyInterfaceComment({ comment }) {
20
25
  const { precedingNode, enclosingNode } = comment;
21
26
  if (enclosingNode &&
22
27
  enclosingNode.kind === SyntaxKind.InterfaceStatement &&
@@ -39,7 +44,7 @@ function addEmptyInterfaceComment(comment) {
39
44
  * model Foo {
40
45
  * }
41
46
  */
42
- function addStatementDecoratorComment(comment) {
47
+ function addStatementDecoratorComment({ comment }) {
43
48
  const { enclosingNode, precedingNode } = comment;
44
49
  if (precedingNode &&
45
50
  precedingNode.kind === SyntaxKind.DecoratorExpression &&
@@ -48,6 +53,8 @@ function addStatementDecoratorComment(comment) {
48
53
  enclosingNode.kind === SyntaxKind.ModelStatement ||
49
54
  enclosingNode.kind === SyntaxKind.EnumStatement ||
50
55
  enclosingNode.kind === SyntaxKind.OperationStatement ||
56
+ enclosingNode.kind === SyntaxKind.ScalarStatement ||
57
+ enclosingNode.kind === SyntaxKind.InterfaceStatement ||
51
58
  enclosingNode.kind === SyntaxKind.ModelProperty ||
52
59
  enclosingNode.kind === SyntaxKind.EnumMember ||
53
60
  enclosingNode.kind === SyntaxKind.UnionStatement)) {
@@ -65,7 +72,7 @@ function addStatementDecoratorComment(comment) {
65
72
  * // My comment
66
73
  * }
67
74
  */
68
- function addEmptyModelComment(comment) {
75
+ function addEmptyModelComment({ comment }) {
69
76
  const { precedingNode, enclosingNode } = comment;
70
77
  if (enclosingNode &&
71
78
  enclosingNode.kind === SyntaxKind.ModelStatement &&
@@ -79,4 +86,29 @@ function addEmptyModelComment(comment) {
79
86
  }
80
87
  return false;
81
88
  }
89
+ function handleOnlyComments({ comment, ast, isLastComment }) {
90
+ var _a, _b;
91
+ const { enclosingNode } = comment;
92
+ if (((_a = ast === null || ast === void 0 ? void 0 : ast.statements) === null || _a === void 0 ? void 0 : _a.length) === 0) {
93
+ if (isLastComment) {
94
+ util.addDanglingComment(ast, comment, undefined);
95
+ }
96
+ else {
97
+ util.addLeadingComment(ast, comment);
98
+ }
99
+ return true;
100
+ }
101
+ if ((enclosingNode === null || enclosingNode === void 0 ? void 0 : enclosingNode.kind) === SyntaxKind.TypeSpecScript &&
102
+ enclosingNode.statements.length === 0 &&
103
+ ((_b = enclosingNode.directives) === null || _b === void 0 ? void 0 : _b.length) === 0) {
104
+ if (isLastComment) {
105
+ util.addDanglingComment(enclosingNode, comment, undefined);
106
+ }
107
+ else {
108
+ util.addLeadingComment(enclosingNode, comment);
109
+ }
110
+ return true;
111
+ }
112
+ return false;
113
+ }
82
114
  //# sourceMappingURL=comment-handler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"comment-handler.js","sourceRoot":"","sources":["../../../../src/formatter/print/comment-handler.ts"],"names":[],"mappings":"AAAA,OAAO,QAAqB,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAQ,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;AAO1B;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoC;IAC7D,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CACnB,CAAC,wBAAwB,EAAE,oBAAoB,EAAE,4BAA4B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACxF,CAAC,CAAC,OAAO,CAAC,CACX;CACJ,CAAC;AAEF;;;;;;;;GAQG;AACH,SAAS,wBAAwB,CAAC,OAAoB;IACpD,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAEjD,IACE,aAAa;QACb,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,kBAAkB;QACpD,aAAa,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QACrC,aAAa;QACb,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,UAAU,EAC5C;QACA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,4BAA4B,CAAC,OAAoB;IACxD,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAEjD,IACE,aAAa;QACb,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,mBAAmB;QACrD,aAAa;QACb,CAAC,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,kBAAkB;YACnD,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,cAAc;YAChD,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,aAAa;YAC/C,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,kBAAkB;YACpD,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,aAAa;YAC/C,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,UAAU;YAC5C,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,cAAc,CAAC,EACnD;QACA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,oBAAoB,CAAC,OAAoB;IAChD,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAEjD,IACE,aAAa;QACb,aAAa,CAAC,IAAI,KAAK,UAAU,CAAC,cAAc;QAChD,aAAa,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QACrC,aAAa;QACb,CAAC,aAAa,KAAK,aAAa,CAAC,EAAE;YACjC,aAAa,KAAK,aAAa,CAAC,EAAE;YAClC,aAAa,KAAK,aAAa,CAAC,OAAO,CAAC,EAC1C;QACA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"comment-handler.js","sourceRoot":"","sources":["../../../../src/formatter/print/comment-handler.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { AstPath } from "prettier";
2
- import { Node } from "../../core/index.js";
2
+ import { Node } from "../../core/types.js";
3
3
  import { TypeSpecPrettierOptions } from "./types.js";
4
4
  /**
5
5
  * Check if the current path should be wrapped in parentheses
@@ -1,4 +1,4 @@
1
- import { SyntaxKind } from "../../core/index.js";
1
+ import { SyntaxKind } from "../../core/types.js";
2
2
  /**
3
3
  * Check if the current path should be wrapped in parentheses
4
4
  * @param path Prettier print path.
@@ -1,10 +1,11 @@
1
1
  import prettier, { AstPath, Doc, Printer } from "prettier";
2
- import { AliasStatementNode, ArrayExpressionNode, AugmentDecoratorStatementNode, Comment, DecoratorDeclarationStatementNode, DecoratorExpressionNode, DirectiveExpressionNode, EnumMemberNode, EnumStatementNode, FunctionDeclarationStatementNode, InterfaceStatementNode, IntersectionExpressionNode, MemberExpressionNode, ModelExpressionNode, ModelPropertyNode, ModelStatementNode, Node, OperationSignatureDeclarationNode, OperationSignatureReferenceNode, OperationStatementNode, ProjectionArithmeticExpressionNode, ProjectionBlockExpressionNode, ProjectionCallExpressionNode, ProjectionEqualityExpressionNode, ProjectionLambdaExpressionNode, ProjectionLambdaParameterDeclarationNode, ProjectionLogicalExpressionNode, ProjectionMemberExpressionNode, ProjectionModelExpressionNode, ProjectionModelPropertyNode, ProjectionRelationalExpressionNode, ProjectionTupleExpressionNode, ProjectionUnaryExpressionNode, ReturnExpressionNode, ScalarStatementNode, TupleExpressionNode, TypeReferenceNode, UnionExpressionNode, UnionStatementNode, UnionVariantNode, ValueOfExpressionNode } from "../../core/types.js";
2
+ import { AliasStatementNode, ArrayExpressionNode, AugmentDecoratorStatementNode, Comment, DecoratorDeclarationStatementNode, DecoratorExpressionNode, DirectiveExpressionNode, EnumMemberNode, EnumStatementNode, FunctionDeclarationStatementNode, InterfaceStatementNode, IntersectionExpressionNode, MemberExpressionNode, ModelExpressionNode, ModelPropertyNode, ModelStatementNode, Node, OperationSignatureDeclarationNode, OperationSignatureReferenceNode, OperationStatementNode, ProjectionArithmeticExpressionNode, ProjectionBlockExpressionNode, ProjectionCallExpressionNode, ProjectionEqualityExpressionNode, ProjectionLambdaExpressionNode, ProjectionLambdaParameterDeclarationNode, ProjectionLogicalExpressionNode, ProjectionMemberExpressionNode, ProjectionModelExpressionNode, ProjectionModelPropertyNode, ProjectionRelationalExpressionNode, ProjectionTupleExpressionNode, ProjectionUnaryExpressionNode, ReturnExpressionNode, ScalarStatementNode, TupleExpressionNode, TypeReferenceNode, TypeSpecScriptNode, UnionExpressionNode, UnionStatementNode, UnionVariantNode, ValueOfExpressionNode } from "../../core/types.js";
3
3
  import { FlattenedNamespaceStatementNode } from "../types.js";
4
4
  import { DecorableNode, PrettierChildPrint, TypeSpecPrettierOptions } from "./types.js";
5
5
  export declare const typespecPrinter: Printer<Node>;
6
6
  export declare function printTypeSpec(path: AstPath<Node>, options: TypeSpecPrettierOptions, print: PrettierChildPrint): prettier.Doc;
7
7
  export declare function printNode(path: AstPath<Node>, options: TypeSpecPrettierOptions, print: PrettierChildPrint): prettier.Doc;
8
+ export declare function printTypeSpecScript(path: AstPath<TypeSpecScriptNode>, options: TypeSpecPrettierOptions, print: PrettierChildPrint): Doc;
8
9
  export declare function printAliasStatement(path: AstPath<AliasStatementNode>, options: TypeSpecPrettierOptions, print: PrettierChildPrint): prettier.doc.builders.Doc[];
9
10
  export declare function canAttachComment(node: Node): boolean;
10
11
  export declare function printComment(commentPath: AstPath<Node | Comment>, options: TypeSpecPrettierOptions): Doc;
@@ -16,6 +17,7 @@ export declare function printDecorators(path: AstPath<DecorableNode>, options: o
16
17
  };
17
18
  export declare function printDecorator(path: AstPath<DecoratorExpressionNode>, options: TypeSpecPrettierOptions, print: PrettierChildPrint): prettier.doc.builders.Doc[];
18
19
  export declare function printAugmentDecorator(path: AstPath<AugmentDecoratorStatementNode>, options: TypeSpecPrettierOptions, print: PrettierChildPrint): prettier.doc.builders.Doc[];
20
+ export declare function printDocComments(path: AstPath<Node>, options: object, print: PrettierChildPrint): prettier.doc.builders.Group | "";
19
21
  export declare function printDirectives(path: AstPath<Node>, options: object, print: PrettierChildPrint): prettier.doc.builders.Group | "";
20
22
  export declare function printDirective(path: AstPath<DirectiveExpressionNode>, options: TypeSpecPrettierOptions, print: PrettierChildPrint): prettier.doc.builders.Doc[];
21
23
  export declare function printDirectiveArgs(path: AstPath<DirectiveExpressionNode>, options: object, print: PrettierChildPrint): prettier.doc.builders.Concat | "";
@@ -1 +1 @@
1
- {"version":3,"file":"printer.d.ts","sourceRoot":"","sources":["../../../../src/formatter/print/printer.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAI3D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,6BAA6B,EAG7B,OAAO,EACP,iCAAiC,EACjC,uBAAuB,EACvB,uBAAuB,EACvB,cAAc,EAEd,iBAAiB,EACjB,gCAAgC,EAGhC,sBAAsB,EACtB,0BAA0B,EAE1B,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EAEjB,kBAAkB,EAClB,IAAI,EAGJ,iCAAiC,EACjC,+BAA+B,EAC/B,sBAAsB,EACtB,kCAAkC,EAClC,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAGhC,8BAA8B,EAC9B,wCAAwC,EACxC,+BAA+B,EAC/B,8BAA8B,EAC9B,6BAA6B,EAC7B,2BAA2B,EAI3B,kCAAkC,EAElC,6BAA6B,EAC7B,6BAA6B,EAC7B,oBAAoB,EACpB,mBAAmB,EAMnB,mBAAmB,EACnB,iBAAiB,EAEjB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAOxF,eAAO,MAAM,eAAe,EAAE,OAAO,CAAC,IAAI,CAKzC,CAAC;AAEF,wBAAgB,aAAa,CAE3B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EACnB,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,GACxB,QAAQ,CAAC,GAAG,CAad;AAOD,wBAAgB,SAAS,CAEvB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EACnB,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,GACxB,QAAQ,CAAC,GAAG,CA8Od;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACjC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAK1B;AAuBD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAQpD;AAED,wBAAgB,YAAY,CAC1B,WAAW,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,EACpC,OAAO,EAAE,uBAAuB,GAC/B,GAAG,CAYL;AAwCD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,EAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,EACzB,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,GACpC;IAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAclD;AAWD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,CAAC,uBAAuB,CAAC,EACtC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAI1B;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,CAAC,6BAA6B,CAAC,EAC5C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAI1B;AAsBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,oCAS9F;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,CAAC,uBAAuB,CAAC,EACtC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAI1B;AA+CD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,CAAC,uBAAuB,CAAC,EACtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,qCAY1B;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAChC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAK1B;AA0BD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,EAC7B,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAS1B;AAUD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACjC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAM1B;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACjC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,sCAmB1B;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAC/B,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAM1B;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACrC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAgB1B;AAgBD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACrC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,sCAiC1B;AA6BD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,CAAC,0BAA0B,CAAC,EACzC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,+BAwB1B;AAMD,wBAAgB,UAAU,CACxB,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAClC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,GACxB,GAAG,CAEL;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,OAAO,CAAC,mBAAmB,GAAG,6BAA6B,CAAC,EAClE,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,GACxB,GAAG,CAYL;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,GACxB,GAAG,CAGL;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,CAAC,mBAAmB,GAAG,6BAA6B,CAAC,EAClE,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAiB1B;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACjC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAoB1B;AA4DD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,CAAC,iBAAiB,GAAG,2BAA2B,CAAC,EAC9D,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAuB1B;AAMD,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,UAYjC;AAiCD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAClC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAiB1B;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,CAAC,+BAA+B,CAAC,EAC9C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAiB1B;AAED,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,OAAO,CAAC,iCAAiC,CAAC,EAChD,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAG1B;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,OAAO,CAAC,+BAA+B,CAAC,EAC9C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAG1B;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACrC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAgB1B;AAED,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,IAAI,EACnD,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,MAAM,CAAC,+BA0BlB;AAYD,wBAAgB,UAAU,CACxB,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAClC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,8DAoB1B;AASD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,EACzC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,GACxB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAI3B;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAC7C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,GACxB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAG3B;AAoFD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,CAAC,iCAAiC,GAAG,gCAAgC,CAAC,EACnF,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,GACxB,QAAQ,CAAC,GAAG,CAOd;AA6ID,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,OAAO,CAAC,6BAA6B,CAAC,EAC5C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,mFAY1B;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,OAAO,CAAC,8BAA8B,CAAC,EAC7C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAI1B;AAED,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,OAAO,CACT,+BAA+B,GAC/B,kCAAkC,GAClC,gCAAgC,GAChC,kCAAkC,CACrC,EACD,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAI1B;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,OAAO,CAAC,6BAA6B,CAAC,EAC5C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAG1B;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,OAAO,CAAC,4BAA4B,CAAC,EAC3C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAW1B;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,OAAO,CAAC,8BAA8B,CAAC,EAC7C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAS1B;AAED,wBAAgB,yCAAyC,CACvD,IAAI,EAAE,OAAO,CAAC,wCAAwC,CAAC,EACvD,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,6BAG1B;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACnC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAG1B"}
1
+ {"version":3,"file":"printer.d.ts","sourceRoot":"","sources":["../../../../src/formatter/print/printer.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAI3D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,6BAA6B,EAG7B,OAAO,EACP,iCAAiC,EACjC,uBAAuB,EACvB,uBAAuB,EAEvB,cAAc,EAEd,iBAAiB,EACjB,gCAAgC,EAGhC,sBAAsB,EACtB,0BAA0B,EAE1B,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EAEjB,kBAAkB,EAClB,IAAI,EAGJ,iCAAiC,EACjC,+BAA+B,EAC/B,sBAAsB,EACtB,kCAAkC,EAClC,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAGhC,8BAA8B,EAC9B,wCAAwC,EACxC,+BAA+B,EAC/B,8BAA8B,EAC9B,6BAA6B,EAC7B,2BAA2B,EAI3B,kCAAkC,EAElC,6BAA6B,EAC7B,6BAA6B,EAC7B,oBAAoB,EACpB,mBAAmB,EAMnB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAgBxF,eAAO,MAAM,eAAe,EAAE,OAAO,CAAC,IAAI,CAKzC,CAAC;AAEF,wBAAgB,aAAa,CAE3B,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EACnB,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,GACxB,QAAQ,CAAC,GAAG,CAcd;AAOD,wBAAgB,SAAS,CAEvB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EACnB,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,GACxB,QAAQ,CAAC,GAAG,CA6Od;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACjC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,GACxB,GAAG,CASL;AACD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACjC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAK1B;AAuBD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAepD;AAED,wBAAgB,YAAY,CAC1B,WAAW,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,EACpC,OAAO,EAAE,uBAAuB,GAC/B,GAAG,CAYL;AAqDD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,EAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,EACzB,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,GACpC;IAAE,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAalD;AAwBD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,CAAC,uBAAuB,CAAC,EACtC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAI1B;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,CAAC,6BAA6B,CAAC,EAC5C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAI1B;AAsBD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,oCAQ/F;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,oCAS9F;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,CAAC,uBAAuB,CAAC,EACtC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAI1B;AA+CD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,CAAC,uBAAuB,CAAC,EACtC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,qCAY1B;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAChC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAK1B;AA0BD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,EAC7B,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAW1B;AAUD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACjC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAM1B;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACjC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,sCAmB1B;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAC/B,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAQ1B;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACrC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAgB1B;AAgBD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACrC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,sCAiC1B;AA6BD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,OAAO,CAAC,0BAA0B,CAAC,EACzC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,+BAwB1B;AAMD,wBAAgB,UAAU,CACxB,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAClC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,GACxB,GAAG,CAEL;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,OAAO,CAAC,mBAAmB,GAAG,6BAA6B,CAAC,EAClE,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,GACxB,GAAG,CAYL;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,GACxB,GAAG,CAIL;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,CAAC,mBAAmB,GAAG,6BAA6B,CAAC,EAClE,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAa1B;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,EACjC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAoB1B;AA0HD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,OAAO,CAAC,iBAAiB,GAAG,2BAA2B,CAAC,EAC9D,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAe1B;AAMD,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,UAYjC;AAiCD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAClC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAiB1B;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,CAAC,+BAA+B,CAAC,EAC9C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAiB1B;AAED,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,OAAO,CAAC,iCAAiC,CAAC,EAChD,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAG1B;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,OAAO,CAAC,+BAA+B,CAAC,EAC9C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAG1B;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,CAAC,sBAAsB,CAAC,EACrC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAgB1B;AAED,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,IAAI,EACnD,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,MAAM,CAAC,+BA0BlB;AAYD,wBAAgB,UAAU,CACxB,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,EAClC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,kBAAkB,8DAoB1B;AASD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,iBAAiB,CAAC,EACzC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,GACxB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAI3B;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAC7C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,GACxB,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAG3B;AAoFD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,CAAC,iCAAiC,GAAG,gCAAgC,CAAC,EACnF,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,GACxB,QAAQ,CAAC,GAAG,CAOd;AA6ID,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,OAAO,CAAC,6BAA6B,CAAC,EAC5C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,mFAY1B;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,OAAO,CAAC,8BAA8B,CAAC,EAC7C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAI1B;AAED,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,OAAO,CACT,+BAA+B,GAC/B,kCAAkC,GAClC,gCAAgC,GAChC,kCAAkC,CACrC,EACD,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAI1B;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,OAAO,CAAC,6BAA6B,CAAC,EAC5C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAG1B;AAED,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,OAAO,CAAC,4BAA4B,CAAC,EAC3C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAW1B;AAED,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,OAAO,CAAC,8BAA8B,CAAC,EAC7C,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAS1B;AAED,wBAAgB,yCAAyC,CACvD,IAAI,EAAE,OAAO,CAAC,wCAAwC,CAAC,EACvD,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,6BAG1B;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,EACnC,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE,kBAAkB,+BAG1B"}
@@ -7,6 +7,14 @@ import { commentHandler } from "./comment-handler.js";
7
7
  import { needsParens } from "./needs-parens.js";
8
8
  const { align, breakParent, group, hardline, ifBreak, indent, join, line, softline } = prettier.doc.builders;
9
9
  const { isNextLineEmpty } = prettier.util;
10
+ /**
11
+ * If the decorators for that node should try to be kept inline.
12
+ */
13
+ const DecoratorsTryInline = {
14
+ modelProperty: true,
15
+ enumMember: true,
16
+ unionVariant: true,
17
+ };
10
18
  export const typespecPrinter = {
11
19
  print: printTypeSpec,
12
20
  canAttachComment: canAttachComment,
@@ -17,10 +25,11 @@ export function printTypeSpec(
17
25
  // Path to the AST node to print
18
26
  path, options, print) {
19
27
  const node = path.getValue();
28
+ const docs = printDocComments(path, options, print);
20
29
  const directives = shouldPrintDirective(node) ? printDirectives(path, options, print) : "";
21
30
  const printedNode = printNode(path, options, print);
22
31
  const value = needsParens(path, options) ? ["(", printedNode, ")"] : printedNode;
23
- const parts = [directives, value];
32
+ const parts = [docs, directives, value];
24
33
  if (node.kind === SyntaxKind.TypeSpecScript) {
25
34
  // For TypeSpecScript(root of typespec document) we had a new line at the end.
26
35
  // This must be done here so the hardline entry can be the last item of the doc array returned by the printer
@@ -37,13 +46,10 @@ export function printNode(
37
46
  // Path to the AST node to print
38
47
  path, options, print) {
39
48
  const node = path.getValue();
40
- printDirectives(path, options, print);
41
49
  switch (node.kind) {
42
50
  // Root
43
51
  case SyntaxKind.TypeSpecScript:
44
- return [
45
- printStatementSequence(path, options, print, "statements"),
46
- ];
52
+ return printTypeSpecScript(path, options, print);
47
53
  // Statements
48
54
  case SyntaxKind.ImportStatement:
49
55
  return [`import "${node.path.value}";`];
@@ -182,6 +188,7 @@ path, options, print) {
182
188
  case SyntaxKind.Return:
183
189
  return printReturnExpression(path, options, print);
184
190
  case SyntaxKind.Doc:
191
+ return printDoc(path, options, print);
185
192
  case SyntaxKind.DocText:
186
193
  case SyntaxKind.DocParamTag:
187
194
  case SyntaxKind.DocTemplateTag:
@@ -190,8 +197,9 @@ path, options, print) {
190
197
  // https://github.com/microsoft/typespec/issues/1319 Tracks pretty-printing doc comments.
191
198
  compilerAssert(false, "Currently, doc comments are only handled as regular comments and we do not opt in to parsing them so we shouldn't reach here.");
192
199
  return "";
193
- case SyntaxKind.JsSourceFile:
194
200
  case SyntaxKind.EmptyStatement:
201
+ return "";
202
+ case SyntaxKind.JsSourceFile:
195
203
  case SyntaxKind.InvalidStatement:
196
204
  return getRawText(node, options);
197
205
  default:
@@ -202,6 +210,16 @@ path, options, print) {
202
210
  return getRawText(node, options);
203
211
  }
204
212
  }
213
+ export function printTypeSpecScript(path, options, print) {
214
+ const node = path.getValue();
215
+ const nodeHasComments = hasComments(node, CommentCheckFlags.Dangling);
216
+ const body = [];
217
+ if (nodeHasComments) {
218
+ body.push(printDanglingComments(path, options, { sameIndent: true }));
219
+ }
220
+ body.push(printStatementSequence(path, options, print, "statements"));
221
+ return body;
222
+ }
205
223
  export function printAliasStatement(path, options, print) {
206
224
  const id = path.call(print, "id");
207
225
  const template = printTemplateParameters(path, options, print, "templateParameters");
@@ -227,6 +245,13 @@ export function canAttachComment(node) {
227
245
  return Boolean(kind &&
228
246
  kind !== SyntaxKind.LineComment &&
229
247
  kind !== SyntaxKind.BlockComment &&
248
+ kind !== SyntaxKind.EmptyStatement &&
249
+ kind !== SyntaxKind.Doc &&
250
+ kind !== SyntaxKind.DocParamTag &&
251
+ kind !== SyntaxKind.DocReturnsTag &&
252
+ kind !== SyntaxKind.DocTemplateTag &&
253
+ kind !== SyntaxKind.DocText &&
254
+ kind !== SyntaxKind.DocUnknownTag &&
230
255
  !(node.flags & 8 /* NodeFlags.Synthetic */));
231
256
  }
232
257
  export function printComment(commentPath, options) {
@@ -244,11 +269,10 @@ export function printComment(commentPath, options) {
244
269
  function printBlockComment(commentPath, options) {
245
270
  const comment = commentPath.getValue();
246
271
  const rawComment = options.originalText.slice(comment.pos + 2, comment.end - 2);
247
- if (isIndentableBlockComment(rawComment)) {
248
- const printed = printIndentableBlockComment(rawComment);
249
- return printed;
250
- }
251
- return ["/*", rawComment, "*/"];
272
+ const printed = isIndentableBlockComment(rawComment)
273
+ ? printIndentableBlockCommentContent(rawComment)
274
+ : rawComment;
275
+ return ["/*", printed, "*/"];
252
276
  }
253
277
  function isIndentableBlockComment(rawComment) {
254
278
  // If the comment has multiple lines and every line starts with a star
@@ -258,28 +282,42 @@ function isIndentableBlockComment(rawComment) {
258
282
  const lines = `*${rawComment}*`.split("\n");
259
283
  return lines.length > 1 && lines.every((line) => line.trim()[0] === "*");
260
284
  }
261
- function printIndentableBlockComment(rawComment) {
285
+ function printIndentableBlockCommentContent(rawComment) {
262
286
  const lines = rawComment.split("\n");
263
287
  return [
264
- "/*",
265
288
  join(hardline, lines.map((line, index) => index === 0
266
289
  ? line.trimEnd()
267
290
  : " " + (index < lines.length - 1 ? line.trim() : line.trimStart()))),
268
- "*/",
269
291
  ];
270
292
  }
293
+ /** Print a doc comment. */
294
+ function printDoc(path, options, print) {
295
+ const node = path.getValue();
296
+ const rawComment = options.originalText.slice(node.pos + 3, node.end - 2);
297
+ const printed = isIndentableBlockComment(rawComment)
298
+ ? printIndentableBlockCommentContent(rawComment)
299
+ : rawComment.includes("\n")
300
+ ? rawComment
301
+ : ` ${rawComment.trim()} `;
302
+ return ["/**", printed, "*/"];
303
+ }
271
304
  export function printDecorators(path, options, print, { tryInline }) {
272
305
  const node = path.getValue();
273
306
  if (node.decorators.length === 0) {
274
307
  return { decorators: "", multiline: false };
275
308
  }
276
- const shouldBreak = !tryInline || node.decorators.length >= 3 || hasNewlineBetweenOrAfterDecorators(node, options);
309
+ const shouldBreak = shouldDecoratorBreakLine(path, options, { tryInline });
277
310
  const decorators = path.map((x) => [print(x), ifBreak(line, " ")], "decorators");
278
311
  return {
279
312
  decorators: group([shouldBreak ? breakParent : "", decorators]),
280
313
  multiline: shouldBreak,
281
314
  };
282
315
  }
316
+ /** Check if the decorators of the given node should be broken in sparate line */
317
+ function shouldDecoratorBreakLine(path, options, { tryInline }) {
318
+ const node = path.getValue();
319
+ return (!tryInline || node.decorators.length >= 3 || hasNewlineBetweenOrAfterDecorators(node, options));
320
+ }
283
321
  /**
284
322
  * Check if there is already new lines in between the decorators of the node.
285
323
  */
@@ -307,6 +345,14 @@ function printAugmentDecoratorArgs(path, options, print) {
307
345
  ")",
308
346
  ];
309
347
  }
348
+ export function printDocComments(path, options, print) {
349
+ const node = path.getValue();
350
+ if (node.docs === undefined || node.docs.length === 0) {
351
+ return "";
352
+ }
353
+ const docs = path.map((x) => [print(x), line], "docs");
354
+ return group([...docs, breakParent]);
355
+ }
310
356
  export function printDirectives(path, options, print) {
311
357
  const node = path.getValue();
312
358
  if (node.directives === undefined || node.directives.length === 0) {
@@ -378,7 +424,9 @@ export function printEnumMember(path, options, print) {
378
424
  const node = path.getValue();
379
425
  const id = path.call(print, "id");
380
426
  const value = node.value ? [": ", path.call(print, "value")] : "";
381
- const { decorators, multiline } = printDecorators(path, options, print, { tryInline: true });
427
+ const { decorators, multiline } = printDecorators(path, options, print, {
428
+ tryInline: DecoratorsTryInline.enumMember,
429
+ });
382
430
  const propertyIndex = path.stack[path.stack.length - 2];
383
431
  const isNotFirst = typeof propertyIndex === "number" && propertyIndex > 0;
384
432
  return [multiline && isNotFirst ? hardline : "", decorators, id, value];
@@ -410,7 +458,9 @@ export function printUnionVariantsBlock(path, options, print) {
410
458
  export function printUnionVariant(path, options, print) {
411
459
  const id = path.call(print, "id");
412
460
  const value = [": ", path.call(print, "value")];
413
- const { decorators } = printDecorators(path, options, print, { tryInline: true });
461
+ const { decorators } = printDecorators(path, options, print, {
462
+ tryInline: DecoratorsTryInline.unionVariant,
463
+ });
414
464
  return [decorators, id, value];
415
465
  }
416
466
  export function printInterfaceStatement(path, options, print) {
@@ -534,18 +584,19 @@ export function printTuple(path, options, print) {
534
584
  }
535
585
  export function printMemberExpression(path, options, print) {
536
586
  const node = path.getValue();
537
- return [node.base ? [path.call(print, "base"), "."] : "", path.call(print, "id")];
587
+ return [node.base ? [path.call(print, "base"), node.selector] : "", path.call(print, "id")];
538
588
  }
539
589
  export function printModelExpression(path, options, print) {
540
590
  const inBlock = isModelExpressionInBlock(path);
591
+ const node = path.getValue();
541
592
  if (inBlock) {
542
593
  return group(printModelPropertiesBlock(path, options, print));
543
594
  }
544
595
  else {
545
- return group([
546
- indent(join(", ", path.map((arg) => [softline, print(arg)], "properties"))),
547
- softline,
548
- ]);
596
+ const properties = node.properties.length === 0
597
+ ? ""
598
+ : indent(joinPropertiesInBlock(path, options, print, ifBreak(",", ", "), softline));
599
+ return group([properties, softline]);
549
600
  }
550
601
  }
551
602
  export function printModelStatement(path, options, print) {
@@ -579,16 +630,54 @@ function printModelPropertiesBlock(path, options, print) {
579
630
  const tryInline = ((_a = path.getParentNode()) === null || _a === void 0 ? void 0 : _a.kind) === SyntaxKind.TemplateParameterDeclaration;
580
631
  const lineDoc = tryInline ? softline : hardline;
581
632
  const seperator = isModelAValue(path) ? "," : ";";
582
- const body = [
583
- lineDoc,
584
- join([seperator, lineDoc], path.map((x) => [print(x)], "properties")),
585
- hasProperties ? ifBreak(seperator) : "",
586
- ];
633
+ const body = [joinPropertiesInBlock(path, options, print, seperator, lineDoc)];
587
634
  if (nodeHasComments) {
588
635
  body.push(printDanglingComments(path, options, { sameIndent: true }));
589
636
  }
590
637
  return group(["{", indent(body), lineDoc, "}"]);
591
638
  }
639
+ function joinPropertiesInBlock(path, options, print, separator, regularLine) {
640
+ const doc = [regularLine];
641
+ const propertyContainerNode = path.getValue();
642
+ let newLineBeforeNextProp = false;
643
+ path.each((item, propertyIndex) => {
644
+ const isFirst = propertyIndex === 0;
645
+ const isLast = propertyIndex === propertyContainerNode.properties.length - 1;
646
+ const shouldWrapInNewLines = shouldWrapPropertyInNewLines(item, options);
647
+ if ((newLineBeforeNextProp || shouldWrapInNewLines) && !isFirst) {
648
+ doc.push(hardline);
649
+ newLineBeforeNextProp = false;
650
+ }
651
+ doc.push(print(item));
652
+ if (isLast) {
653
+ doc.push(ifBreak(separator));
654
+ }
655
+ else {
656
+ doc.push(separator);
657
+ doc.push(regularLine);
658
+ if (shouldWrapInNewLines) {
659
+ newLineBeforeNextProp = true;
660
+ }
661
+ }
662
+ }, "properties");
663
+ return doc;
664
+ }
665
+ /**
666
+ * Check if property item (PropertyNode, SpreadProperty) should be wrapped in new lines.
667
+ * It can be wrapped for the following reasons:
668
+ * - has decorators on lines above
669
+ * - has leading comments
670
+ */
671
+ function shouldWrapPropertyInNewLines(path, options) {
672
+ var _a;
673
+ const node = path.getValue();
674
+ return (((node.kind === SyntaxKind.ModelProperty || node.kind === SyntaxKind.ProjectionModelProperty) &&
675
+ shouldDecoratorBreakLine(path, options, {
676
+ tryInline: DecoratorsTryInline.modelProperty,
677
+ })) ||
678
+ hasComments(node, CommentCheckFlags.Leading) ||
679
+ (node.docs && ((_a = node.docs) === null || _a === void 0 ? void 0 : _a.length) > 0));
680
+ }
592
681
  /**
593
682
  * Figure out if this model is being used as a definition or value.
594
683
  * @returns true if the model is used as a value(e.g. decorator value), false if it is used as a model definition.
@@ -610,14 +699,11 @@ function isModelAValue(path) {
610
699
  }
611
700
  export function printModelProperty(path, options, print) {
612
701
  const node = path.getValue();
613
- const propertyIndex = path.stack[path.stack.length - 2];
614
- const isNotFirst = typeof propertyIndex === "number" && propertyIndex > 0;
615
- const { decorators, multiline } = printDecorators(path, options, print, {
616
- tryInline: true,
702
+ const { decorators } = printDecorators(path, options, print, {
703
+ tryInline: DecoratorsTryInline.modelProperty,
617
704
  });
618
705
  const id = printIdentifier(node.id, options);
619
706
  return [
620
- multiline && isNotFirst ? hardline : "",
621
707
  printDirectives(path, options, print),
622
708
  decorators,
623
709
  id,