@typespec/compiler 1.13.0-dev.14 → 1.13.0-dev.15
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
|
@@ -11,7 +11,36 @@ export interface LinterRuleTestExpect<T extends Record<string, Entity> = any> {
|
|
|
11
11
|
applyCodeFix(codeFixId: string): ApplyCodeFixExpect;
|
|
12
12
|
}
|
|
13
13
|
export interface ApplyCodeFixExpect {
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Assert the content of the file(s) after the code fix is applied.
|
|
16
|
+
* @param code Expected content. Pass a `string` for single-file assertions (main.tsp),
|
|
17
|
+
* or a `Record<string, string>` to assert on specific files (partial match — only the
|
|
18
|
+
* specified files are checked).
|
|
19
|
+
*
|
|
20
|
+
* @example Single file
|
|
21
|
+
*
|
|
22
|
+
* ```ts
|
|
23
|
+
* await ruleTester
|
|
24
|
+
* .expect(`model Foo { name: string; }`)
|
|
25
|
+
* .applyCodeFix("rename-model")
|
|
26
|
+
* .toEqual(`model Bar { name: string; }`);
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @example Multiple files (e.g. code fix writes augment decorators to a separate file)
|
|
30
|
+
*
|
|
31
|
+
* ```ts
|
|
32
|
+
* await ruleTester
|
|
33
|
+
* .expect({
|
|
34
|
+
* "main.tsp": `import "./client.tsp";\nmodel Foo { name: string; }`,
|
|
35
|
+
* "client.tsp": ``,
|
|
36
|
+
* })
|
|
37
|
+
* .applyCodeFix("add-client-override")
|
|
38
|
+
* .toEqual({
|
|
39
|
+
* "client.tsp": `@@override(Foo.name, "clientName");\n`,
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
toEqual(code: string | Record<string, string>): Promise<void>;
|
|
15
44
|
}
|
|
16
45
|
export declare function createLinterRuleTester(runner: BasicTestRunner | TesterInstance, ruleDef: LinterRuleDefinition<string, DiagnosticMessages>, libraryName: string): LinterRuleTester;
|
|
17
46
|
//# sourceMappingURL=rule-tester.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-tester.d.ts","sourceRoot":"","sources":["../../../src/testing/rule-tester.ts"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"rule-tester.d.ts","sourceRoot":"","sources":["../../../src/testing/rule-tester.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,kBAAkB,EAClB,MAAM,EACN,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAA4C,MAAM,aAAa,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CACJ,CAAC,SAAS,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAE/F,IAAI,EAAE,CAAC,GACN,oBAAoB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG;IAC1E,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,iBAAiB,CACf,WAAW,EACP,eAAe,GACf,eAAe,EAAE,GACjB,CAAC,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,eAAe,GAAG,eAAe,EAAE,CAAC,GACvE,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,CAAC;CACrD;AAED,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,eAAe,GAAG,cAAc,EACxC,OAAO,EAAE,oBAAoB,CAAC,MAAM,EAAE,kBAAkB,CAAC,EACzD,WAAW,EAAE,MAAM,GAClB,gBAAgB,CAmJlB"}
|
|
@@ -39,6 +39,14 @@ export function createLinterRuleTester(runner, ruleDef, libraryName) {
|
|
|
39
39
|
const [_, diagnostics] = await compileAndDiagnose(code);
|
|
40
40
|
const codefix = diagnostics[0].codefixes?.find((x) => x.id === fixId);
|
|
41
41
|
ok(codefix, `Codefix with id "${fixId}" not found.`);
|
|
42
|
+
if (typeof expectedCode === "string") {
|
|
43
|
+
await assertSingleFileCodeFix(codefix, expectedCode);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
await assertMultiFileCodeFix(codefix, expectedCode);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async function assertSingleFileCodeFix(codefix, expectedCode) {
|
|
42
50
|
let content;
|
|
43
51
|
const host = {
|
|
44
52
|
...runner.program.host,
|
|
@@ -53,6 +61,31 @@ export function createLinterRuleTester(runner, ruleDef, libraryName) {
|
|
|
53
61
|
const offset = fs.get(resolveVirtualPath("./main.tsp"))?.indexOf(code);
|
|
54
62
|
strictEqual(trimBlankLines(content.slice(offset)), trimBlankLines(expectedCode));
|
|
55
63
|
}
|
|
64
|
+
async function assertMultiFileCodeFix(codefix, expectedFiles) {
|
|
65
|
+
const writtenFiles = new Map();
|
|
66
|
+
const host = {
|
|
67
|
+
...runner.program.host,
|
|
68
|
+
writeFile: (name, newContent) => {
|
|
69
|
+
writtenFiles.set(name, newContent);
|
|
70
|
+
return Promise.resolve();
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
await applyCodeFixReal(host, codefix);
|
|
74
|
+
ok(writtenFiles.size > 0, "No content was written to the host.");
|
|
75
|
+
const fs = "keys" in runner.fs ? runner.fs : runner.fs.fs;
|
|
76
|
+
for (const [filename, expected] of Object.entries(expectedFiles)) {
|
|
77
|
+
const virtualPath = resolveVirtualPath(filename);
|
|
78
|
+
const written = writtenFiles.get(virtualPath);
|
|
79
|
+
ok(written !== undefined, `Expected file "${filename}" to be written by the code fix but it was not. Written files: ${[...writtenFiles.keys()].join(", ")}`);
|
|
80
|
+
const inputCode = typeof code === "string" ? code : code[filename];
|
|
81
|
+
const originalContent = fs.get(virtualPath);
|
|
82
|
+
const offset = typeof inputCode === "string" && originalContent
|
|
83
|
+
? originalContent.indexOf(inputCode)
|
|
84
|
+
: undefined;
|
|
85
|
+
const actual = offset !== undefined && offset >= 0 ? written.slice(offset) : written;
|
|
86
|
+
strictEqual(trimBlankLines(actual), trimBlankLines(expected));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
56
89
|
}
|
|
57
90
|
}
|
|
58
91
|
async function compileAndDiagnose(code) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-tester.js","sourceRoot":"","sources":["../../../src/testing/rule-tester.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"rule-tester.js","sourceRoot":"","sources":["../../../src/testing/rule-tester.ts"],"names":[],"mappings":"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"}
|