Skip to content

Commit

Permalink
fix(cli): preserve comments in doc tests (#26828)
Browse files Browse the repository at this point in the history
This commit makes comments in code snippets in JSDoc or markdown
preserved when they are executed as tests. In particular, this is needed
to get TypeScript special comments such as `@ts-ignore` or
`@ts-expect-error` to work correctly.

Fixes #26728
  • Loading branch information
magurotuna authored Nov 14, 2024
1 parent 6b5cb41 commit 15fae19
Show file tree
Hide file tree
Showing 7 changed files with 101 additions and 1 deletion.
57 changes: 56 additions & 1 deletion cli/util/extract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -586,7 +586,10 @@ fn generate_pseudo_file(
wrap_kind,
}));

let source = deno_ast::swc::codegen::to_code(&transformed);
let source = deno_ast::swc::codegen::to_code_with_comments(
Some(&parsed.comments().as_single_threaded()),
&transformed,
);

log::debug!("{}:\n{}", file.specifier, source);

Expand Down Expand Up @@ -1165,6 +1168,33 @@ Deno.test("file:///main.ts$3-6.ts", async ()=>{
media_type: MediaType::TypeScript,
}],
},
// https://github.com/denoland/deno/issues/26728
Test {
input: Input {
source: r#"
/**
* ```ts
* // @ts-expect-error: can only add numbers
* add('1', '2');
* ```
*/
export function add(first: number, second: number) {
return first + second;
}
"#,
specifier: "file:///main.ts",
},
expected: vec![Expected {
source: r#"import { add } from "file:///main.ts";
Deno.test("file:///main.ts$3-7.ts", async ()=>{
// @ts-expect-error: can only add numbers
add('1', '2');
});
"#,
specifier: "file:///main.ts$3-7.ts",
media_type: MediaType::TypeScript,
}],
},
];

for test in tests {
Expand Down Expand Up @@ -1376,6 +1406,31 @@ console.log(Foo);
media_type: MediaType::TypeScript,
}],
},
// https://github.com/denoland/deno/issues/26728
Test {
input: Input {
source: r#"
/**
* ```ts
* // @ts-expect-error: can only add numbers
* add('1', '2');
* ```
*/
export function add(first: number, second: number) {
return first + second;
}
"#,
specifier: "file:///main.ts",
},
expected: vec![Expected {
source: r#"import { add } from "file:///main.ts";
// @ts-expect-error: can only add numbers
add('1', '2');
"#,
specifier: "file:///main.ts$3-7.ts",
media_type: MediaType::TypeScript,
}],
},
];

for test in tests {
Expand Down
5 changes: 5 additions & 0 deletions tests/specs/test/doc_ts_expect_error/__test__.jsonc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"args": "test --doc mod.ts",
"exitCode": 0,
"output": "mod.out"
}
8 changes: 8 additions & 0 deletions tests/specs/test/doc_ts_expect_error/mod.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Check [WILDCARD]/mod.ts
Check [WILDCARD]/mod.ts$2-10.ts
running 0 tests from ./mod.ts
running 1 test from ./mod.ts$2-10.ts
[WILDCARD]/mod.ts$2-10.ts ... ok ([WILDCARD]ms)

ok | 1 passed | 0 failed ([WILDCARD]ms)

13 changes: 13 additions & 0 deletions tests/specs/test/doc_ts_expect_error/mod.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/**
* ```ts
* import { add } from "./mod.ts";
*
* add(1, 2);
*
* // @ts-expect-error: can only add numbers
* add('1', '2');
* ```
*/
export function add(first: number, second: number) {
return first + second;
}
5 changes: 5 additions & 0 deletions tests/specs/test/markdown_ts_expect_error/__test__.jsonc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"args": "test --doc main.md",
"exitCode": 0,
"output": "main.out"
}
8 changes: 8 additions & 0 deletions tests/specs/test/markdown_ts_expect_error/main.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Documentation

This test case checks if `@ts-expect-error` comment works as expected.

```ts
// @ts-expect-error
const a: string = 42;
```
6 changes: 6 additions & 0 deletions tests/specs/test/markdown_ts_expect_error/main.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Check [WILDCARD]/main.md$5-9.ts
running 1 test from ./main.md$5-9.ts
[WILDCARD]/main.md$5-9.ts ... ok ([WILDCARD]ms)

ok | 1 passed | 0 failed ([WILDCARD]ms)

0 comments on commit 15fae19

Please sign in to comment.