eslint-plugin-jsdoc 55.3.0 → 56.0.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 (156) hide show
  1. package/dist/cjs/WarnSettings.d.ts +16 -0
  2. package/dist/cjs/WarnSettings.js +30 -0
  3. package/dist/cjs/alignTransform.d.ts +33 -0
  4. package/dist/cjs/alignTransform.js +285 -0
  5. package/dist/cjs/defaultTagOrder.d.ts +4 -0
  6. package/dist/cjs/defaultTagOrder.js +152 -0
  7. package/dist/cjs/exportParser.d.ts +40 -0
  8. package/dist/cjs/exportParser.js +754 -0
  9. package/dist/cjs/getDefaultTagStructureForMode.d.ts +10 -0
  10. package/dist/cjs/getDefaultTagStructureForMode.js +840 -0
  11. package/dist/cjs/getJsdocProcessorPlugin.cjs +4 -0
  12. package/dist/cjs/getJsdocProcessorPlugin.d.cts +1 -0
  13. package/dist/cjs/getJsdocProcessorPlugin.d.ts +66 -0
  14. package/dist/cjs/getJsdocProcessorPlugin.js +553 -0
  15. package/dist/cjs/index-cjs.d.ts +16 -0
  16. package/dist/cjs/index-cjs.js +492 -0
  17. package/dist/cjs/index.cjs.cjs +6 -0
  18. package/dist/cjs/index.cjs.d.cts +2 -0
  19. package/dist/cjs/iterateJsdoc.cjs +38 -0
  20. package/dist/cjs/iterateJsdoc.d.cts +2 -0
  21. package/dist/cjs/iterateJsdoc.d.ts +462 -0
  22. package/dist/cjs/iterateJsdoc.js +1981 -0
  23. package/dist/cjs/jsdocUtils.d.ts +454 -0
  24. package/dist/cjs/jsdocUtils.js +1470 -0
  25. package/dist/cjs/rules/checkAccess.d.ts +2 -0
  26. package/dist/cjs/rules/checkAccess.js +35 -0
  27. package/dist/cjs/rules/checkAlignment.d.ts +2 -0
  28. package/dist/cjs/rules/checkAlignment.js +63 -0
  29. package/dist/cjs/rules/checkExamples.d.ts +3 -0
  30. package/dist/cjs/rules/checkExamples.js +486 -0
  31. package/dist/cjs/rules/checkIndentation.d.ts +2 -0
  32. package/dist/cjs/rules/checkIndentation.js +66 -0
  33. package/dist/cjs/rules/checkLineAlignment.d.ts +9 -0
  34. package/dist/cjs/rules/checkLineAlignment.js +297 -0
  35. package/dist/cjs/rules/checkParamNames.d.ts +2 -0
  36. package/dist/cjs/rules/checkParamNames.js +320 -0
  37. package/dist/cjs/rules/checkPropertyNames.d.ts +2 -0
  38. package/dist/cjs/rules/checkPropertyNames.js +105 -0
  39. package/dist/cjs/rules/checkSyntax.d.ts +2 -0
  40. package/dist/cjs/rules/checkSyntax.js +27 -0
  41. package/dist/cjs/rules/checkTagNames.d.ts +2 -0
  42. package/dist/cjs/rules/checkTagNames.js +252 -0
  43. package/dist/cjs/rules/checkTemplateNames.d.ts +2 -0
  44. package/dist/cjs/rules/checkTemplateNames.js +189 -0
  45. package/dist/cjs/rules/checkTypes.d.ts +2 -0
  46. package/dist/cjs/rules/checkTypes.js +421 -0
  47. package/dist/cjs/rules/checkValues.d.ts +2 -0
  48. package/dist/cjs/rules/checkValues.js +163 -0
  49. package/dist/cjs/rules/convertToJsdocComments.d.ts +251 -0
  50. package/dist/cjs/rules/convertToJsdocComments.js +313 -0
  51. package/dist/cjs/rules/emptyTags.d.ts +2 -0
  52. package/dist/cjs/rules/emptyTags.js +79 -0
  53. package/dist/cjs/rules/implementsOnClasses.d.ts +2 -0
  54. package/dist/cjs/rules/implementsOnClasses.js +63 -0
  55. package/dist/cjs/rules/importsAsDependencies.d.ts +2 -0
  56. package/dist/cjs/rules/importsAsDependencies.js +105 -0
  57. package/dist/cjs/rules/informativeDocs.d.ts +2 -0
  58. package/dist/cjs/rules/informativeDocs.js +153 -0
  59. package/dist/cjs/rules/linesBeforeBlock.d.ts +2 -0
  60. package/dist/cjs/rules/linesBeforeBlock.js +106 -0
  61. package/dist/cjs/rules/matchDescription.d.ts +2 -0
  62. package/dist/cjs/rules/matchDescription.js +240 -0
  63. package/dist/cjs/rules/matchName.d.ts +2 -0
  64. package/dist/cjs/rules/matchName.js +122 -0
  65. package/dist/cjs/rules/multilineBlocks.d.ts +2 -0
  66. package/dist/cjs/rules/multilineBlocks.js +339 -0
  67. package/dist/cjs/rules/noBadBlocks.d.ts +2 -0
  68. package/dist/cjs/rules/noBadBlocks.js +88 -0
  69. package/dist/cjs/rules/noBlankBlockDescriptions.d.ts +2 -0
  70. package/dist/cjs/rules/noBlankBlockDescriptions.js +56 -0
  71. package/dist/cjs/rules/noBlankBlocks.d.ts +2 -0
  72. package/dist/cjs/rules/noBlankBlocks.js +41 -0
  73. package/dist/cjs/rules/noDefaults.d.ts +2 -0
  74. package/dist/cjs/rules/noDefaults.js +84 -0
  75. package/dist/cjs/rules/noMissingSyntax.d.ts +9 -0
  76. package/dist/cjs/rules/noMissingSyntax.js +164 -0
  77. package/dist/cjs/rules/noMultiAsterisks.d.ts +2 -0
  78. package/dist/cjs/rules/noMultiAsterisks.js +83 -0
  79. package/dist/cjs/rules/noRestrictedSyntax.d.ts +2 -0
  80. package/dist/cjs/rules/noRestrictedSyntax.js +75 -0
  81. package/dist/cjs/rules/noTypes.d.ts +2 -0
  82. package/dist/cjs/rules/noTypes.js +88 -0
  83. package/dist/cjs/rules/noUndefinedTypes.d.ts +2 -0
  84. package/dist/cjs/rules/noUndefinedTypes.js +451 -0
  85. package/dist/cjs/rules/requireAsteriskPrefix.d.ts +2 -0
  86. package/dist/cjs/rules/requireAsteriskPrefix.js +144 -0
  87. package/dist/cjs/rules/requireDescription.d.ts +2 -0
  88. package/dist/cjs/rules/requireDescription.js +136 -0
  89. package/dist/cjs/rules/requireDescriptionCompleteSentence.d.ts +2 -0
  90. package/dist/cjs/rules/requireDescriptionCompleteSentence.js +258 -0
  91. package/dist/cjs/rules/requireExample.d.ts +2 -0
  92. package/dist/cjs/rules/requireExample.js +103 -0
  93. package/dist/cjs/rules/requireFileOverview.d.ts +2 -0
  94. package/dist/cjs/rules/requireFileOverview.js +117 -0
  95. package/dist/cjs/rules/requireHyphenBeforeParamDescription.d.ts +2 -0
  96. package/dist/cjs/rules/requireHyphenBeforeParamDescription.js +144 -0
  97. package/dist/cjs/rules/requireJsdoc.d.ts +25 -0
  98. package/dist/cjs/rules/requireJsdoc.js +629 -0
  99. package/dist/cjs/rules/requireParam.d.ts +3 -0
  100. package/dist/cjs/rules/requireParam.js +480 -0
  101. package/dist/cjs/rules/requireParamDescription.d.ts +2 -0
  102. package/dist/cjs/rules/requireParamDescription.js +77 -0
  103. package/dist/cjs/rules/requireParamName.d.ts +2 -0
  104. package/dist/cjs/rules/requireParamName.js +52 -0
  105. package/dist/cjs/rules/requireParamType.d.ts +2 -0
  106. package/dist/cjs/rules/requireParamType.js +77 -0
  107. package/dist/cjs/rules/requireProperty.d.ts +2 -0
  108. package/dist/cjs/rules/requireProperty.js +44 -0
  109. package/dist/cjs/rules/requirePropertyDescription.d.ts +2 -0
  110. package/dist/cjs/rules/requirePropertyDescription.js +22 -0
  111. package/dist/cjs/rules/requirePropertyName.d.ts +2 -0
  112. package/dist/cjs/rules/requirePropertyName.js +22 -0
  113. package/dist/cjs/rules/requirePropertyType.d.ts +2 -0
  114. package/dist/cjs/rules/requirePropertyType.js +22 -0
  115. package/dist/cjs/rules/requireReturns.d.ts +2 -0
  116. package/dist/cjs/rules/requireReturns.js +197 -0
  117. package/dist/cjs/rules/requireReturnsCheck.d.ts +2 -0
  118. package/dist/cjs/rules/requireReturnsCheck.js +108 -0
  119. package/dist/cjs/rules/requireReturnsDescription.d.ts +2 -0
  120. package/dist/cjs/rules/requireReturnsDescription.js +58 -0
  121. package/dist/cjs/rules/requireReturnsType.d.ts +2 -0
  122. package/dist/cjs/rules/requireReturnsType.js +52 -0
  123. package/dist/cjs/rules/requireTemplate.d.ts +2 -0
  124. package/dist/cjs/rules/requireTemplate.js +173 -0
  125. package/dist/cjs/rules/requireThrows.d.ts +2 -0
  126. package/dist/cjs/rules/requireThrows.js +101 -0
  127. package/dist/cjs/rules/requireYields.d.ts +2 -0
  128. package/dist/cjs/rules/requireYields.js +172 -0
  129. package/dist/cjs/rules/requireYieldsCheck.d.ts +2 -0
  130. package/dist/cjs/rules/requireYieldsCheck.js +164 -0
  131. package/dist/cjs/rules/sortTags.d.ts +2 -0
  132. package/dist/cjs/rules/sortTags.js +392 -0
  133. package/dist/cjs/rules/tagLines.d.ts +2 -0
  134. package/dist/cjs/rules/tagLines.js +259 -0
  135. package/dist/cjs/rules/textEscaping.d.ts +2 -0
  136. package/dist/cjs/rules/textEscaping.js +125 -0
  137. package/dist/cjs/rules/typeFormatting.d.ts +2 -0
  138. package/dist/cjs/rules/typeFormatting.js +328 -0
  139. package/dist/cjs/rules/validTypes.d.ts +2 -0
  140. package/dist/cjs/rules/validTypes.js +333 -0
  141. package/dist/cjs/tagNames.d.ts +15 -0
  142. package/dist/cjs/tagNames.js +209 -0
  143. package/dist/cjs/utils/hasReturnValue.d.ts +19 -0
  144. package/dist/cjs/utils/hasReturnValue.js +469 -0
  145. package/dist/getJsdocProcessorPlugin.cts +3 -0
  146. package/dist/index.cjs.cts +3 -0
  147. package/dist/iterateJsdoc.cts +6 -0
  148. package/dist/rules/typeFormatting.cjs +82 -38
  149. package/dist/rules/typeFormatting.cjs.map +1 -1
  150. package/dist/rules.d.ts +4 -7
  151. package/package.json +24 -13
  152. package/src/getJsdocProcessorPlugin.cts +3 -0
  153. package/src/index.cjs.cts +3 -0
  154. package/src/iterateJsdoc.cts +6 -0
  155. package/src/rules/typeFormatting.js +104 -40
  156. package/src/rules.d.ts +4 -7
@@ -19,10 +19,13 @@ export default iterateJsdoc(({
19
19
  genericDot = false,
20
20
  objectFieldIndent = '',
21
21
  objectFieldQuote = null,
22
- objectFieldSeparator = null,
22
+ objectFieldSeparator = 'comma',
23
+ objectFieldSeparatorTrailingPunctuation = false,
23
24
  propertyQuotes = null,
24
25
  separatorForSingleObjectField = false,
25
26
  stringQuotes = 'single',
27
+ typeBracketSpacing = '',
28
+ unionSpacing = ' ',
26
29
  } = context.options[0] || {};
27
30
 
28
31
  const {
@@ -54,7 +57,10 @@ export default iterateJsdoc(({
54
57
  return tokens.name || tokens.description;
55
58
  });
56
59
 
57
- const nameAndDesc = tag.source.slice(beginNameOrDescIdx);
60
+ const nameAndDesc = beginNameOrDescIdx === -1 ?
61
+ null :
62
+ tag.source.slice(beginNameOrDescIdx);
63
+
58
64
  const initialNumber = tag.source[0].number;
59
65
  const src = [
60
66
  // Get inevitably present tag from first `tag.source`
@@ -69,7 +75,7 @@ export default iterateJsdoc(({
69
75
  postName: '',
70
76
  postType: '',
71
77
  } : {}),
72
- type: '{' + firstTypeLine + (!typeLines.length && lastTypeLine === undefined ? '}' : ''),
78
+ type: '{' + typeBracketSpacing + firstTypeLine + (!typeLines.length && lastTypeLine === undefined ? typeBracketSpacing + '}' : ''),
73
79
  },
74
80
  },
75
81
  // Get any intervening type lines
@@ -97,14 +103,14 @@ export default iterateJsdoc(({
97
103
  // Merge any final type line and name and description
98
104
  if (
99
105
  // Name and description may be already included if present with the tag
100
- beginNameOrDescIdx > 0
106
+ nameAndDesc && beginNameOrDescIdx > 0
101
107
  ) {
102
108
  src.push({
103
109
  number: src.length + 1,
104
110
  source: '',
105
111
  tokens: {
106
112
  ...nameAndDesc[0].tokens,
107
- type: lastTypeLine + '}',
113
+ type: lastTypeLine + typeBracketSpacing + '}',
108
114
  },
109
115
  });
110
116
 
@@ -125,7 +131,7 @@ export default iterateJsdoc(({
125
131
  }),
126
132
  );
127
133
  }
128
- } else {
134
+ } else if (nameAndDesc) {
129
135
  if (lastTypeLine) {
130
136
  src.push({
131
137
  number: src.length + 1,
@@ -136,7 +142,7 @@ export default iterateJsdoc(({
136
142
  postTag: '',
137
143
  start: indent + ' ',
138
144
  tag: '',
139
- type: lastTypeLine + '}',
145
+ type: lastTypeLine + typeBracketSpacing + '}',
140
146
  },
141
147
  });
142
148
  }
@@ -171,6 +177,14 @@ export default iterateJsdoc(({
171
177
  return tg;
172
178
  });
173
179
 
180
+ const initialEndSource = jsdoc.source.find(({
181
+ tokens: {
182
+ end,
183
+ },
184
+ }) => {
185
+ return end;
186
+ });
187
+
174
188
  jsdoc.source = [
175
189
  ...jsdoc.source.slice(0, firstTagIdx),
176
190
  ...jsdoc.tags.flatMap(({
@@ -179,24 +193,34 @@ export default iterateJsdoc(({
179
193
  return source;
180
194
  }),
181
195
  ];
196
+
197
+ if (initialEndSource && !jsdoc.source.at(-1)?.tokens?.end) {
198
+ jsdoc.source.push(initialEndSource);
199
+ }
182
200
  };
183
201
 
184
202
  /** @type {string[]} */
185
203
  const errorMessages = [];
186
- let needToReport = false;
204
+
205
+ if (typeBracketSpacing && (!tag.type.startsWith(typeBracketSpacing) || !tag.type.endsWith(typeBracketSpacing))) {
206
+ errorMessages.push(`Must have initial and final "${typeBracketSpacing}" spacing`);
207
+ } else if (!typeBracketSpacing && ((/^\s/v).test(tag.type) || (/\s$/v).test(tag.type))) {
208
+ errorMessages.push('Must have no initial spacing');
209
+ }
210
+
211
+ // eslint-disable-next-line complexity -- Todo
187
212
  traverse(parsedType, (nde) => {
188
- let typeFound = true;
189
213
  let errorMessage = '';
190
- const initialType = stringify(
191
- /** @type {import('jsdoc-type-pratt-parser').RootResult} */ (nde),
192
- );
214
+
193
215
  switch (nde.type) {
194
216
  case 'JsdocTypeGeneric': {
195
217
  const typeNode = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (nde);
196
218
  if ('value' in typeNode.left && typeNode.left.value === 'Array') {
197
- typeNode.meta.brackets = arrayBrackets;
198
- errorMessage = `Array bracket style should be ${arrayBrackets}`;
199
- } else {
219
+ if (typeNode.meta.brackets !== arrayBrackets) {
220
+ typeNode.meta.brackets = arrayBrackets;
221
+ errorMessage = `Array bracket style should be ${arrayBrackets}`;
222
+ }
223
+ } else if (typeNode.meta.dot !== genericDot) {
200
224
  typeNode.meta.dot = genericDot;
201
225
  errorMessage = `Dot usage should be ${genericDot}`;
202
226
  }
@@ -206,22 +230,31 @@ export default iterateJsdoc(({
206
230
 
207
231
  case 'JsdocTypeObject': {
208
232
  const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (nde);
209
- typeNode.meta.separator = objectFieldSeparator ?? undefined;
210
- typeNode.meta.separatorForSingleObjectField = separatorForSingleObjectField;
211
- typeNode.meta.propertyIndent = objectFieldIndent;
212
- errorMessage = `Inconsistent ${objectFieldSeparator} usage`;
233
+ if (
234
+ /* c8 ignore next -- Guard */
235
+ (typeNode.meta.separator ?? 'comma') !== objectFieldSeparator ||
236
+ (typeNode.meta.separatorForSingleObjectField ?? false) !== separatorForSingleObjectField ||
237
+ (typeNode.meta.propertyIndent ?? '') !== objectFieldIndent ||
238
+ (typeNode.meta.trailingPunctuation ?? false) !== objectFieldSeparatorTrailingPunctuation
239
+ ) {
240
+ typeNode.meta.separator = objectFieldSeparator;
241
+ typeNode.meta.separatorForSingleObjectField = separatorForSingleObjectField;
242
+ typeNode.meta.propertyIndent = objectFieldIndent;
243
+ typeNode.meta.trailingPunctuation = objectFieldSeparatorTrailingPunctuation;
244
+ errorMessage = `Inconsistent ${objectFieldSeparator} separator usage`;
245
+ }
246
+
213
247
  break;
214
248
  }
215
249
 
216
250
  case 'JsdocTypeObjectField': {
217
251
  const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectFieldResult} */ (nde);
218
- if (objectFieldQuote ||
219
- (typeof typeNode.key === 'string' && !(/\s/v).test(typeNode.key))
252
+ if ((objectFieldQuote ||
253
+ (typeof typeNode.key === 'string' && !(/\s/v).test(typeNode.key))) &&
254
+ typeNode.meta.quote !== (objectFieldQuote ?? undefined)
220
255
  ) {
221
256
  typeNode.meta.quote = objectFieldQuote ?? undefined;
222
257
  errorMessage = `Inconsistent object field quotes ${objectFieldQuote}`;
223
- } else {
224
- typeFound = false;
225
258
  }
226
259
 
227
260
  break;
@@ -230,13 +263,12 @@ export default iterateJsdoc(({
230
263
  case 'JsdocTypeProperty': {
231
264
  const typeNode = /** @type {import('jsdoc-type-pratt-parser').PropertyResult} */ (nde);
232
265
 
233
- if (propertyQuotes ||
234
- (typeof typeNode.value === 'string' && !(/\s/v).test(typeNode.value))
266
+ if ((propertyQuotes ||
267
+ (typeof typeNode.value === 'string' && !(/\s/v).test(typeNode.value))) &&
268
+ typeNode.meta.quote !== (propertyQuotes ?? undefined)
235
269
  ) {
236
270
  typeNode.meta.quote = propertyQuotes ?? undefined;
237
271
  errorMessage = `Inconsistent ${propertyQuotes} property quotes usage`;
238
- } else {
239
- typeFound = false;
240
272
  }
241
273
 
242
274
  break;
@@ -244,40 +276,64 @@ export default iterateJsdoc(({
244
276
 
245
277
  case 'JsdocTypeStringValue': {
246
278
  const typeNode = /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */ (nde);
247
- typeNode.meta.quote = stringQuotes;
248
- errorMessage = `Inconsistent ${stringQuotes} string quotes usage`;
279
+ if (typeNode.meta.quote !== stringQuotes) {
280
+ typeNode.meta.quote = stringQuotes;
281
+ errorMessage = `Inconsistent ${stringQuotes} string quotes usage`;
282
+ }
283
+
284
+ break;
285
+ }
286
+
287
+ case 'JsdocTypeUnion': {
288
+ const typeNode = /** @type {import('jsdoc-type-pratt-parser').UnionResult} */ (nde);
289
+ /* c8 ignore next -- Guard */
290
+ if ((typeNode.meta?.spacing ?? ' ') !== unionSpacing) {
291
+ typeNode.meta = {
292
+ spacing: unionSpacing,
293
+ };
294
+ errorMessage = `Inconsistent "${unionSpacing}" union spacing usage`;
295
+ }
296
+
249
297
  break;
250
298
  }
251
299
 
252
300
  default:
253
- typeFound = false;
254
301
  break;
255
302
  }
256
303
 
257
- if (typeFound) {
258
- const convertedType = stringify(/** @type {import('jsdoc-type-pratt-parser').RootResult} */ (nde));
259
- if (initialType !== convertedType) {
260
- needToReport = true;
261
- errorMessages.push(errorMessage);
262
- }
304
+ if (errorMessage) {
305
+ errorMessages.push(errorMessage);
263
306
  }
264
307
  });
265
308
 
266
- if (needToReport) {
309
+ const differentResult = tag.type !==
310
+ typeBracketSpacing + stringify(parsedType) + typeBracketSpacing;
311
+
312
+ if (errorMessages.length && differentResult) {
267
313
  for (const errorMessage of errorMessages) {
268
314
  utils.reportJSDoc(
269
- errorMessage, tag, enableFixer ? fix : null, true,
315
+ errorMessage, tag, enableFixer ? fix : null,
270
316
  );
271
317
  }
318
+ // Stringification may have been equal previously (and thus no error reported)
319
+ // because the stringification doesn't preserve everything
320
+ } else if (differentResult) {
321
+ utils.reportJSDoc(
322
+ 'There was an error with type formatting', tag, enableFixer ? fix : null,
323
+ );
272
324
  }
273
325
  };
274
326
 
275
327
  const tags = utils.getPresentTags([
276
328
  'param',
277
329
  'returns',
330
+ 'type',
331
+ 'typedef',
278
332
  ]);
279
333
  for (const tag of tags) {
280
- checkTypeFormats(tag);
334
+ if (tag.type) {
335
+ checkTypeFormats(tag);
336
+ }
281
337
  }
282
338
  }, {
283
339
  iterateAllJsdocs: true,
@@ -320,9 +376,11 @@ export default iterateJsdoc(({
320
376
  'linebreak',
321
377
  'semicolon',
322
378
  'semicolon-and-linebreak',
323
- null,
324
379
  ],
325
380
  },
381
+ objectFieldSeparatorTrailingPunctuation: {
382
+ type: 'boolean',
383
+ },
326
384
  propertyQuotes: {
327
385
  enum: [
328
386
  'double',
@@ -339,6 +397,12 @@ export default iterateJsdoc(({
339
397
  'single',
340
398
  ],
341
399
  },
400
+ typeBracketSpacing: {
401
+ type: 'string',
402
+ },
403
+ unionSpacing: {
404
+ type: 'string',
405
+ },
342
406
  },
343
407
  type: 'object',
344
408
  },
package/src/rules.d.ts CHANGED
@@ -765,16 +765,13 @@ export interface Rules {
765
765
  genericDot?: boolean;
766
766
  objectFieldIndent?: string;
767
767
  objectFieldQuote?: "double" | "single" | null;
768
- objectFieldSeparator?:
769
- | "comma"
770
- | "comma-and-linebreak"
771
- | "linebreak"
772
- | "semicolon"
773
- | "semicolon-and-linebreak"
774
- | null;
768
+ objectFieldSeparator?: "comma" | "comma-and-linebreak" | "linebreak" | "semicolon" | "semicolon-and-linebreak";
769
+ objectFieldSeparatorTrailingPunctuation?: boolean;
775
770
  propertyQuotes?: "double" | "single" | null;
776
771
  separatorForSingleObjectField?: boolean;
777
772
  stringQuotes?: "double" | "single";
773
+ typeBracketSpacing?: string;
774
+ unionSpacing?: string;
778
775
  }
779
776
  ];
780
777