summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Whitaker <17734409+nathanwhit@users.noreply.github.com>2024-05-21 14:04:19 -0700
committerGitHub <noreply@github.com>2024-05-21 14:04:19 -0700
commitdb82e8b557c9836481618a73cec7c014903ff256 (patch)
tree2ed36976e0ce16f8a36f26d691f0217cd4b66759
parent8698e80304815353ec52be1b16f96483ebe559a0 (diff)
fix(lsp): Fix display of JSDoc named examples (#23927)
We were wrapping the display string in an unnecessary pair of triple backticks, breaking highlighting Before: ![Screenshot 2024-05-21 at 12 16 12 PM](https://github.com/denoland/deno/assets/17734409/1cf5a3ce-56dd-443d-9d1a-bd33625ff1f2) After: ![Screenshot 2024-05-21 at 12 16 36 PM](https://github.com/denoland/deno/assets/17734409/646c4c48-9b5a-4326-bb95-b1374627d969)
-rw-r--r--cli/lsp/tsc.rs2
-rw-r--r--tests/integration/lsp_tests.rs52
2 files changed, 53 insertions, 1 deletions
diff --git a/cli/lsp/tsc.rs b/cli/lsp/tsc.rs
index b41a8fb19..97fdb9cb6 100644
--- a/cli/lsp/tsc.rs
+++ b/cli/lsp/tsc.rs
@@ -93,7 +93,7 @@ static BRACKET_ACCESSOR_RE: Lazy<Regex> =
lazy_regex!(r#"^\[['"](.+)[\['"]\]$"#);
static CAPTION_RE: Lazy<Regex> =
lazy_regex!(r"<caption>(.*?)</caption>\s*\r?\n((?:\s|\S)*)");
-static CODEBLOCK_RE: Lazy<Regex> = lazy_regex!(r"^\s*[~`]{3}");
+static CODEBLOCK_RE: Lazy<Regex> = lazy_regex!(r"^\s*[~`]{3}"m);
static EMAIL_MATCH_RE: Lazy<Regex> = lazy_regex!(r"(.+)\s<([-.\w]+@[-.\w]+)>");
static HTTP_RE: Lazy<Regex> = lazy_regex!(r#"(?i)^https?:"#);
static JSDOC_LINKS_RE: Lazy<Regex> = lazy_regex!(
diff --git a/tests/integration/lsp_tests.rs b/tests/integration/lsp_tests.rs
index ed95541d2..6a92ae00b 100644
--- a/tests/integration/lsp_tests.rs
+++ b/tests/integration/lsp_tests.rs
@@ -12979,3 +12979,55 @@ fn lsp_semantic_token_caching() {
assert_eq!(res, res_cached);
}
+
+#[test]
+fn lsp_jsdoc_named_example() {
+ let context = TestContextBuilder::new().use_temp_cwd().build();
+ let temp_dir = context.temp_dir().path();
+ let mut client = context
+ .new_lsp_command()
+ .set_root_dir(temp_dir.clone())
+ .build();
+ client.initialize_default();
+
+ let main = source_file(
+ temp_dir.join("main.ts"),
+ r#"
+ /**
+ * @example Example1
+ * ```ts
+ * foo();
+ * ```
+ */
+ export function foo(): number {
+ return 1;
+ }
+ "#,
+ );
+
+ let diagnostics = client.did_open_file(&main);
+ assert_eq!(diagnostics.all().len(), 0);
+
+ let hover = client.write_request(
+ "textDocument/hover",
+ json!({
+ "textDocument": main.identifier(),
+ "position": main.range_of_nth(1, "foo").start,
+ }),
+ );
+
+ assert_json_subset(
+ hover,
+ json!({
+ "contents": [
+ {
+ "language": "typescript",
+ "value": "function foo(): number"
+ },
+ "",
+ // The example name `Example1` should not be enclosed in backticks
+ "\n\n*@example* \nExample1\n```ts\nfoo();\n```"
+ ]
+ }),
+ );
+}