@typespec/compiler 1.0.0-rc.2-dev.10 → 1.0.0-rc.2-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": "1.0.0-rc.2-dev.10",
3
- "commit": "55835ce7bafdb6c36fbd9802d30d69c2561e4026"
2
+ "version": "1.0.0-rc.2-dev.13",
3
+ "commit": "db65b12a5240b9bc3cf1f78fa604dc68e420e88c"
4
4
  };
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../../src/core/cli/actions/format.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AACD,wBAAsB,YAAY,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,iBAyBzE"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../../src/core/cli/actions/format.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,UAAU,iBAMzE"}
@@ -1,30 +1,77 @@
1
+ import pc from "picocolors";
1
2
  import { logDiagnostics } from "../../diagnostics.js";
2
- import { findUnformattedTypeSpecFiles, formatTypeSpecFiles } from "../../formatter-fs.js";
3
+ import { checkFilesFormat, formatFiles } from "../../formatter-fs.js";
3
4
  export async function formatAction(host, args) {
4
5
  if (args["check"]) {
5
- const unformatted = await findUnformattedTypeSpecFiles(args["include"], {
6
+ await check(host, args);
7
+ }
8
+ else {
9
+ await format(host, args);
10
+ }
11
+ }
12
+ async function check(host, args) {
13
+ await host.logger.trackAction("Checking format", "", async (task) => {
14
+ const result = await checkFilesFormat(args["include"], {
6
15
  exclude: args["exclude"],
7
- debug: args.debug,
8
16
  });
9
- if (unformatted.length > 0) {
10
- // eslint-disable-next-line no-console
11
- console.log(`Found ${unformatted.length} unformatted files:`);
12
- for (const file of unformatted) {
13
- // eslint-disable-next-line no-console
14
- console.log(` - ${file}`);
15
- }
17
+ if (result.errored.length > 0) {
18
+ logDiagnostics(result.errored.map((x) => x[1]), host.logSink);
19
+ }
20
+ if (result.needsFormat.length > 0 || result.errored.length > 0) {
21
+ const msg = [
22
+ needsFormatText(result.needsFormat),
23
+ result.errored.length > 0 ? errorText(result.errored) : undefined,
24
+ formattedText(result.formatted),
25
+ result.ignored.length > 0 ? ignoredText(result.ignored) : undefined,
26
+ ];
27
+ task.warn(msg.filter((x) => x).join(", "));
16
28
  process.exit(1);
17
29
  }
18
- }
19
- else {
20
- const [_, diagnostics] = await formatTypeSpecFiles(args["include"], {
30
+ else {
31
+ const msg = [
32
+ formattedText(result.formatted),
33
+ result.ignored.length > 0 ? ignoredText(result.ignored) : undefined,
34
+ ];
35
+ task.succeed(msg.filter((x) => x).join(", "));
36
+ }
37
+ });
38
+ }
39
+ async function format(host, args) {
40
+ await host.logger.trackAction("Formatting", "", async (task) => {
41
+ const result = await formatFiles(args["include"], {
21
42
  exclude: args["exclude"],
22
- debug: args.debug,
23
43
  });
24
- if (diagnostics.length > 0) {
25
- logDiagnostics(diagnostics, host.logSink);
44
+ const msg = [
45
+ result.formatted.length > 0 ? formattedText(result.formatted) : undefined,
46
+ result.alreadyFormatted.length > 0 ? unchangedText(result.alreadyFormatted) : undefined,
47
+ result.ignored.length > 0 ? ignoredText(result.ignored) : undefined,
48
+ result.errored.length > 0 ? errorText(result.errored) : undefined,
49
+ ]
50
+ .filter((x) => x)
51
+ .join(", ");
52
+ if (result.errored.length > 0) {
53
+ logDiagnostics(result.errored.map((x) => x[1]), host.logSink);
54
+ task.warn(msg);
26
55
  process.exit(1);
27
56
  }
28
- }
57
+ else {
58
+ task.succeed(msg);
59
+ }
60
+ });
61
+ }
62
+ function formattedText(files) {
63
+ return pc.green(`${files.length} formatted`);
64
+ }
65
+ function unchangedText(files) {
66
+ return pc.green(`${files.length} unchanged`);
67
+ }
68
+ function needsFormatText(files) {
69
+ return pc.yellow(`${files.length} need format`);
70
+ }
71
+ function ignoredText(files) {
72
+ return pc.gray(`${files.length} ignored`);
73
+ }
74
+ function errorText(errored) {
75
+ return pc.red(`${errored.length} error${errored.length > 1 ? "s" : ""}`);
29
76
  }
30
77
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../../src/core/cli/actions/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAS1F,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAqB,EAAE,IAAgB;IACxE,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClB,MAAM,WAAW,GAAG,MAAM,4BAA4B,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACtE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,SAAS,WAAW,CAAC,MAAM,qBAAqB,CAAC,CAAC;YAC9D,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;gBAC/B,sCAAsC;gBACtC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAClE,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../../src/core/cli/actions/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAWtE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAqB,EAAE,IAAgB;IACxE,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAClB,MAAM,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,IAAqB,EAAE,IAAgB;IAC1D,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACrD,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;SACzB,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,cAAc,CACZ,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/B,IAAI,CAAC,OAAO,CACb,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,MAAM,GAAG,GAAG;gBACV,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC;gBACnC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;gBACjE,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;aACpE,CAAC;YAEF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG;gBACV,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;aACpE,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAqB,EAAE,IAAgB;IAC3D,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC7D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YAChD,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;SACzB,CAAC,CAAC;QACH,MAAM,GAAG,GAAG;YACV,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YACzE,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS;YACvF,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YACnE,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;SAClE;aACE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aAChB,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,cAAc,CACZ,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/B,IAAI,CAAC,OAAO,CACb,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAwB;IAC7C,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,YAAY,CAAC,CAAC;AAC/C,CAAC;AACD,SAAS,aAAa,CAAC,KAAwB;IAC7C,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,YAAY,CAAC,CAAC;AAC/C,CAAC;AACD,SAAS,eAAe,CAAC,KAAwB;IAC/C,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,cAAc,CAAC,CAAC;AAClD,CAAC;AACD,SAAS,WAAW,CAAC,KAAwB;IAC3C,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC;AAC5C,CAAC;AACD,SAAS,SAAS,CAAC,OAAwC;IACzD,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,SAAS,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3E,CAAC"}
@@ -1,29 +1,73 @@
1
1
  import { Diagnostic } from "./types.js";
2
2
  export interface TypeSpecFormatOptions {
3
3
  exclude?: string[];
4
- debug?: boolean;
5
4
  }
5
+ /** The paths of which are either relative or absolute based on the original file path patterns. */
6
6
  export interface TypeSpecFormatResult {
7
- /**
8
- * The list of files which were formatted successfully, the paths of which are either relative or absolute based on the original file path patterns.
9
- */
10
- formattedFiles: string[];
7
+ /** Files which were formatted successfully, */
8
+ readonly formatted: string[];
9
+ /** Files which had a valid format already. */
10
+ readonly alreadyFormatted: string[];
11
+ /** Files that were included in the filter but are not in the scope of the typespec formatter. */
12
+ readonly ignored: string[];
13
+ /** Files with errors */
14
+ readonly errored: [string, Diagnostic][];
11
15
  }
12
16
  /**
13
- * Format all the TypeSpec files.
17
+ * Format all the TypeSpec project files(.tsp, tspconfig.yaml).
14
18
  * @param patterns List of wildcard pattern searching for TypeSpec files.
15
19
  * @returns list of files which failed to format.
16
20
  */
17
- export declare function formatTypeSpecFiles(patterns: string[], { exclude, debug }: TypeSpecFormatOptions): Promise<[TypeSpecFormatResult, readonly Diagnostic[]]>;
21
+ export declare function formatFiles(patterns: string[], { exclude }: TypeSpecFormatOptions): Promise<TypeSpecFormatResult>;
22
+ export interface CheckFilesFormatResult {
23
+ readonly formatted: string[];
24
+ readonly needsFormat: string[];
25
+ readonly ignored: string[];
26
+ readonly errored: [string, Diagnostic][];
27
+ }
18
28
  /**
19
- * Find all the unformatted files.
20
- * @returns list of files not formatted.
29
+ * Check the format of the files in the given pattern.
21
30
  */
22
- export declare function findUnformattedTypeSpecFiles(patterns: string[], { exclude, debug }: TypeSpecFormatOptions): Promise<string[]>;
23
- export declare function formatTypeSpecFile(filename: string): Promise<void>;
31
+ export declare function checkFilesFormat(patterns: string[], { exclude }: TypeSpecFormatOptions): Promise<CheckFilesFormatResult>;
32
+ export type FormatFileResult =
33
+ /** File formatted successfully. */
34
+ {
35
+ kind: "formatted";
36
+ }
37
+ /** File was already formatted. */
38
+ | {
39
+ kind: "already-formatted";
40
+ }
41
+ /** File is not in a format that can be formatted by TypeSpec */
42
+ | {
43
+ kind: "ignored";
44
+ }
45
+ /** Error occurred, probably a parsing error. */
46
+ | {
47
+ kind: "error";
48
+ diagnostic: Diagnostic;
49
+ };
50
+ export declare function formatFile(filename: string): Promise<FormatFileResult>;
51
+ export type CheckFormatResult =
52
+ /** File formatted successfully. */
53
+ {
54
+ kind: "formatted";
55
+ }
56
+ /** File needs format */
57
+ | {
58
+ kind: "needs-format";
59
+ }
60
+ /** File is not in a format that can be formatted by TypeSpec */
61
+ | {
62
+ kind: "ignored";
63
+ }
64
+ /** Error occurred, probably a parsing error. */
65
+ | {
66
+ kind: "error";
67
+ diagnostic: Diagnostic;
68
+ };
24
69
  /**
25
70
  * Check the given TypeSpec file is correctly formatted.
26
- * @returns true if code is formatted correctly.
27
71
  */
28
- export declare function checkFormatTypeSpecFile(filename: string): Promise<boolean>;
72
+ export declare function checkFileFormat(filename: string): Promise<CheckFormatResult>;
29
73
  //# sourceMappingURL=formatter-fs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter-fs.d.ts","sourceRoot":"","sources":["../../../src/core/formatter-fs.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAY,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAAE,EAClB,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,qBAAqB,GACxC,OAAO,CAAC,CAAC,oBAAoB,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC,CAyBxD;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAAE,EAClB,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,qBAAqB,GACxC,OAAO,CAAC,MAAM,EAAE,CAAC,CAoBnB;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,iBAKxD;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIhF"}
1
+ {"version":3,"file":"formatter-fs.d.ts","sourceRoot":"","sources":["../../../src/core/formatter-fs.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAY,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,oGAAoG;AACpG,MAAM,WAAW,oBAAoB;IACnC,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IACpC,iGAAiG;IACjG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,wBAAwB;IACxB,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;CAC1C;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAAE,EAClB,EAAE,OAAO,EAAE,EAAE,qBAAqB,GACjC,OAAO,CAAC,oBAAoB,CAAC,CAyB/B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;CAC1C;AACD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAAE,EAClB,EAAE,OAAO,EAAE,EAAE,qBAAqB,GACjC,OAAO,CAAC,sBAAsB,CAAC,CAyBjC;AAED,MAAM,MAAM,gBAAgB;AAC1B,mCAAmC;AACjC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE;AACvB,kCAAkC;GAChC;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE;AAC/B,gEAAgE;GAC9D;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;AACrB,gDAAgD;GAC9C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAE9C,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4B5E;AAED,MAAM,MAAM,iBAAiB;AAC3B,mCAAmC;AACjC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE;AACvB,wBAAwB;GACtB;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE;AAC1B,gEAAgE;GAC9D;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE;AACrB,gDAAgD;GAC9C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC;AAE9C;;GAEG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwBlF"}
@@ -2,81 +2,128 @@ import { readFile, writeFile } from "fs/promises";
2
2
  import { globby } from "globby";
3
3
  import { resolveConfig } from "prettier";
4
4
  import { PrettierParserError } from "../formatter/parser.js";
5
- import { checkFormatTypeSpec, formatTypeSpec } from "./formatter.js";
5
+ import { checkFormat, format, getFormatterFromFilename } from "./formatter.js";
6
6
  import { createDiagnostic } from "./messages.js";
7
7
  import { normalizePath } from "./path-utils.js";
8
8
  import { NoTarget } from "./types.js";
9
9
  /**
10
- * Format all the TypeSpec files.
10
+ * Format all the TypeSpec project files(.tsp, tspconfig.yaml).
11
11
  * @param patterns List of wildcard pattern searching for TypeSpec files.
12
12
  * @returns list of files which failed to format.
13
13
  */
14
- export async function formatTypeSpecFiles(patterns, { exclude, debug }) {
14
+ export async function formatFiles(patterns, { exclude }) {
15
15
  const files = await findFiles(patterns, exclude);
16
- const diagnostics = [];
17
- const formattedFiles = [];
16
+ const errored = [];
17
+ const formatted = [];
18
+ const alreadyFormatted = [];
19
+ const ignored = [];
18
20
  for (const file of files) {
19
- try {
20
- await formatTypeSpecFile(file);
21
- formattedFiles.push(file);
22
- }
23
- catch (e) {
24
- if (e instanceof PrettierParserError) {
25
- const details = debug ? e.message : "";
26
- diagnostics.push(createDiagnostic({
27
- code: "format-failed",
28
- format: { file, details },
29
- target: NoTarget,
30
- }));
31
- }
32
- else {
33
- throw e;
34
- }
21
+ const result = await formatFile(file);
22
+ switch (result.kind) {
23
+ case "formatted":
24
+ formatted.push(file);
25
+ break;
26
+ case "already-formatted":
27
+ alreadyFormatted.push(file);
28
+ break;
29
+ case "ignored":
30
+ ignored.push(file);
31
+ break;
32
+ case "error":
33
+ errored.push([file, result.diagnostic]);
34
+ break;
35
35
  }
36
36
  }
37
- return [{ formattedFiles }, diagnostics];
37
+ return { formatted, ignored, errored, alreadyFormatted };
38
38
  }
39
39
  /**
40
- * Find all the unformatted files.
41
- * @returns list of files not formatted.
40
+ * Check the format of the files in the given pattern.
42
41
  */
43
- export async function findUnformattedTypeSpecFiles(patterns, { exclude, debug }) {
42
+ export async function checkFilesFormat(patterns, { exclude }) {
44
43
  const files = await findFiles(patterns, exclude);
45
- const unformatted = [];
44
+ const errored = [];
45
+ const formatted = [];
46
+ const needsFormat = [];
47
+ const ignored = [];
46
48
  for (const file of files) {
47
- try {
48
- if (!(await checkFormatTypeSpecFile(file))) {
49
- unformatted.push(file);
50
- }
51
- }
52
- catch (e) {
53
- if (e instanceof PrettierParserError) {
54
- const details = debug ? e.message : "";
55
- // eslint-disable-next-line no-console
56
- console.error(`File '${file}' failed to format. ${details}`);
57
- unformatted.push(file);
58
- }
59
- else {
60
- throw e;
61
- }
49
+ const result = await checkFileFormat(file);
50
+ switch (result.kind) {
51
+ case "formatted":
52
+ formatted.push(file);
53
+ break;
54
+ case "needs-format":
55
+ formatted.push(file);
56
+ break;
57
+ case "ignored":
58
+ ignored.push(file);
59
+ break;
60
+ case "error":
61
+ errored.push([file, result.diagnostic]);
62
+ break;
62
63
  }
63
64
  }
64
- return unformatted;
65
+ return { formatted, needsFormat, ignored, errored };
65
66
  }
66
- export async function formatTypeSpecFile(filename) {
67
+ export async function formatFile(filename) {
67
68
  const content = await readFile(filename, "utf-8");
68
69
  const prettierConfig = await resolveConfig(filename);
69
- const formattedContent = await formatTypeSpec(content, prettierConfig ?? {});
70
- await writeFile(filename, formattedContent);
70
+ const formatter = getFormatterFromFilename(filename);
71
+ if (formatter === undefined) {
72
+ return { kind: "ignored" };
73
+ }
74
+ try {
75
+ const formattedContent = await format(content, formatter, prettierConfig ?? {});
76
+ if (formattedContent === content) {
77
+ return { kind: "already-formatted" };
78
+ }
79
+ await writeFile(filename, formattedContent);
80
+ return { kind: "formatted" };
81
+ }
82
+ catch (e) {
83
+ if (e instanceof PrettierParserError) {
84
+ return {
85
+ kind: "error",
86
+ diagnostic: createDiagnostic({
87
+ code: "format-failed",
88
+ format: { file: filename, details: e.message },
89
+ target: NoTarget,
90
+ }),
91
+ };
92
+ }
93
+ else {
94
+ throw e;
95
+ }
96
+ }
71
97
  }
72
98
  /**
73
99
  * Check the given TypeSpec file is correctly formatted.
74
- * @returns true if code is formatted correctly.
75
100
  */
76
- export async function checkFormatTypeSpecFile(filename) {
101
+ export async function checkFileFormat(filename) {
77
102
  const content = await readFile(filename, "utf-8");
78
103
  const prettierConfig = await resolveConfig(filename);
79
- return await checkFormatTypeSpec(content, prettierConfig ?? {});
104
+ const formatter = getFormatterFromFilename(filename);
105
+ if (formatter === undefined) {
106
+ return { kind: "ignored" };
107
+ }
108
+ try {
109
+ const formatted = await checkFormat(content, formatter, prettierConfig ?? {});
110
+ return { kind: formatted ? "formatted" : "needs-format" };
111
+ }
112
+ catch (e) {
113
+ if (e instanceof PrettierParserError) {
114
+ return {
115
+ kind: "error",
116
+ diagnostic: createDiagnostic({
117
+ code: "format-failed",
118
+ format: { file: filename, details: e.message },
119
+ target: NoTarget,
120
+ }),
121
+ };
122
+ }
123
+ else {
124
+ throw e;
125
+ }
126
+ }
80
127
  }
81
128
  async function findFiles(include, ignore = []) {
82
129
  const patterns = [
@@ -1 +1 @@
1
- {"version":3,"file":"formatter-fs.js","sourceRoot":"","sources":["../../../src/core/formatter-fs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatter-fs.js","sourceRoot":"","sources":["../../../src/core/formatter-fs.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,34 @@
1
1
  import type { Options } from "prettier";
2
+ export type Formatter = "typespec" | "tspconfig";
3
+ /**
4
+ * Get the formatter name for the given filename
5
+ * @param filename The filename to check
6
+ */
7
+ export declare function getFormatterFromFilename(filename: string): Formatter | undefined;
8
+ /**
9
+ * Format the code with the given formatter
10
+ * @param code The code to format
11
+ * @param formatter The formatter to use
12
+ * @param prettierConfig Optional config for prettier
13
+ * @returns The formatted code
14
+ * @throws PrettierParserError if the code is not valid
15
+ */
16
+ export declare function format(code: string, formatter: Formatter, prettierConfig?: Options): Promise<string>;
17
+ /**
18
+ * Check the given code is correctly formatted with the given formatter
19
+ * @param code The code to check the format of
20
+ * @param formatter The formatter to use
21
+ * @param prettierConfig Optional config for prettier
22
+ * @returns true if the code is formatted correctly
23
+ * @throws PrettierParserError if the code is not valid
24
+ */
25
+ export declare function checkFormat(code: string, formatter: Formatter, prettierConfig?: Options): Promise<boolean>;
26
+ /**
27
+ * Format TypeSpec code
28
+ * @param code Code to format
29
+ * @param prettierConfig Optional config for prettier.
30
+ * @returns Formatted code
31
+ */
2
32
  export declare function formatTypeSpec(code: string, prettierConfig?: Options): Promise<string>;
3
33
  /**
4
34
  * Check the given is correctly formatted.
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../../src/core/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAIxC,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ5F;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,OAAO,CAAC,CAMlB"}
1
+ {"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../../src/core/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAMxC,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAUhF;AAED;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,SAAS,EACpB,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,SAAS,EACpB,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,OAAO,CAAC,CAElB;AAwBD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ5F;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,cAAc,CAAC,EAAE,OAAO,GACvB,OAAO,CAAC,OAAO,CAAC,CAMlB"}
@@ -1,7 +1,68 @@
1
- import { check, format } from "prettier/standalone";
1
+ import YamlPlugin from "prettier/plugins/yaml.js";
2
+ import { check, format as prettierFormat } from "prettier/standalone";
2
3
  import * as typespecPrettierPlugin from "../formatter/index.js";
4
+ import { getAnyExtensionFromPath } from "./path-utils.js";
5
+ /**
6
+ * Get the formatter name for the given filename
7
+ * @param filename The filename to check
8
+ */
9
+ export function getFormatterFromFilename(filename) {
10
+ const ext = getAnyExtensionFromPath(filename);
11
+ if (filename.endsWith("tspconfig.yaml")) {
12
+ return "tspconfig";
13
+ }
14
+ switch (ext) {
15
+ case ".tsp":
16
+ return "typespec";
17
+ }
18
+ return undefined;
19
+ }
20
+ /**
21
+ * Format the code with the given formatter
22
+ * @param code The code to format
23
+ * @param formatter The formatter to use
24
+ * @param prettierConfig Optional config for prettier
25
+ * @returns The formatted code
26
+ * @throws PrettierParserError if the code is not valid
27
+ */
28
+ export async function format(code, formatter, prettierConfig) {
29
+ return runFormatter(prettierFormat, code, formatter, prettierConfig);
30
+ }
31
+ /**
32
+ * Check the given code is correctly formatted with the given formatter
33
+ * @param code The code to check the format of
34
+ * @param formatter The formatter to use
35
+ * @param prettierConfig Optional config for prettier
36
+ * @returns true if the code is formatted correctly
37
+ * @throws PrettierParserError if the code is not valid
38
+ */
39
+ export async function checkFormat(code, formatter, prettierConfig) {
40
+ return runFormatter(check, code, formatter, prettierConfig);
41
+ }
42
+ async function runFormatter(fn, code, formatter, prettierConfig) {
43
+ switch (formatter) {
44
+ case "typespec":
45
+ return fn(code, {
46
+ ...prettierConfig,
47
+ parser: "typespec",
48
+ plugins: [typespecPrettierPlugin],
49
+ });
50
+ case "tspconfig":
51
+ return await fn(code, {
52
+ ...prettierConfig,
53
+ parser: "yaml",
54
+ plugins: [YamlPlugin],
55
+ });
56
+ }
57
+ }
58
+ /**
59
+ * Format TypeSpec code
60
+ * @param code Code to format
61
+ * @param prettierConfig Optional config for prettier.
62
+ * @returns Formatted code
63
+ */
3
64
  export async function formatTypeSpec(code, prettierConfig) {
4
- const output = await format(code, {
65
+ const output = await prettierFormat(code, {
5
66
  ...prettierConfig,
6
67
  parser: "typespec",
7
68
  plugins: [typespecPrettierPlugin],
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../src/core/formatter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,sBAAsB,MAAM,uBAAuB,CAAC;AAEhE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,cAAwB;IACzE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE;QAChC,GAAG,cAAc;QACjB,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,CAAC,sBAAsB,CAAC;KAClC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,cAAwB;IAExB,OAAO,KAAK,CAAC,IAAI,EAAE;QACjB,GAAG,cAAc;QACjB,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,CAAC,sBAAsB,CAAC;KAClC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../../src/core/formatter.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,sBAAsB,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAI1D;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAAgB;IACvD,MAAM,GAAG,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,UAAU,CAAC;IACtB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,IAAY,EACZ,SAAoB,EACpB,cAAwB;IAExB,OAAO,YAAY,CAAC,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AACvE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,SAAoB,EACpB,cAAwB;IAExB,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,EAAmD,EACnD,IAAY,EACZ,SAAoB,EACpB,cAAwB;IAExB,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,EAAE,CAAC,IAAI,EAAE;gBACd,GAAG,cAAc;gBACjB,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,CAAC,sBAAsB,CAAC;aAClC,CAAC,CAAC;QACL,KAAK,WAAW;YACd,OAAO,MAAM,EAAE,CAAC,IAAI,EAAE;gBACpB,GAAG,cAAc;gBACjB,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,CAAC,UAAU,CAAC;aACtB,CAAC,CAAC;IACP,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,cAAwB;IACzE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE;QACxC,GAAG,cAAc;QACjB,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,CAAC,sBAAsB,CAAC;KAClC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,cAAwB;IAExB,OAAO,KAAK,CAAC,IAAI,EAAE;QACjB,GAAG,cAAc;QACjB,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,CAAC,sBAAsB,CAAC;KAClC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typespec/compiler",
3
- "version": "1.0.0-rc.2-dev.10",
3
+ "version": "1.0.0-rc.2-dev.13",
4
4
  "description": "TypeSpec Compiler Preview",
5
5
  "author": "Microsoft Corporation",
6
6
  "license": "MIT",
@@ -101,8 +101,8 @@
101
101
  "@types/semver": "^7.5.8",
102
102
  "@types/yargs": "~17.0.33",
103
103
  "@typespec/internal-build-utils": "^0.69.0 || >=0.70.0-dev <0.70.0",
104
- "@vitest/coverage-v8": "^3.0.9",
105
- "@vitest/ui": "^3.0.9",
104
+ "@vitest/coverage-v8": "^3.1.2",
105
+ "@vitest/ui": "^3.1.2",
106
106
  "c8": "^10.1.3",
107
107
  "grammarkdown": "~3.3.2",
108
108
  "pathe": "^2.0.3",
@@ -110,7 +110,7 @@
110
110
  "source-map-support": "~0.5.21",
111
111
  "tmlanguage-generator": "^0.6.1 || >=0.7.0-dev <0.7.0",
112
112
  "typescript": "~5.8.2",
113
- "vitest": "^3.0.9",
113
+ "vitest": "^3.1.2",
114
114
  "vscode-oniguruma": "~2.0.1",
115
115
  "vscode-textmate": "~9.2.0"
116
116
  },