Skip to content

Commit 8742f5c

Browse files
committed
Add comment suggestions
1 parent bd35b20 commit 8742f5c

File tree

10 files changed

+955
-425
lines changed

10 files changed

+955
-425
lines changed

bun.lock

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
"chroma-js": "^3.1.2",
1313
"date-fns": "^4.1.0",
1414
"diff": "^8.0.2",
15+
"dompurify": "^3.2.6",
1516
"luxon": "^3.6.1",
17+
"marked": "^16.0.0",
1618
"runed": "^0.28.0",
1719
"shiki": "^3.4.2",
1820
"svelte-toolbelt": "^0.9.1",
@@ -30,7 +32,9 @@
3032
"@sveltejs/vite-plugin-svelte": "^5.1.0",
3133
"@tailwindcss/vite": "^4.1.8",
3234
"@types/chroma-js": "^3.1.1",
35+
"@types/dompurify": "^3.2.0",
3336
"@types/luxon": "^3.6.2",
37+
"@types/marked": "^6.0.0",
3438
"@types/wicg-file-system-access": "^2023.10.6",
3539
"eslint": "^9.28.0",
3640
"eslint-config-prettier": "^10.1.5",
@@ -365,6 +369,8 @@
365369

366370
"@types/deep-eql": ["@types/[email protected]", "", {}, "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw=="],
367371

372+
"@types/dompurify": ["@types/[email protected]", "", { "dependencies": { "dompurify": "*" } }, "sha512-Fgg31wv9QbLDA0SpTOXO3MaxySc4DKGLi8sna4/Utjo4r3ZRPdCt4UQee8BWr+Q5z21yifghREPJGYaEOEIACg=="],
373+
368374
"@types/estree": ["@types/[email protected]", "", {}, "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ=="],
369375

370376
"@types/hast": ["@types/[email protected]", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="],
@@ -373,10 +379,14 @@
373379

374380
"@types/luxon": ["@types/[email protected]", "", {}, "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw=="],
375381

382+
"@types/marked": ["@types/[email protected]", "", { "dependencies": { "marked": "*" } }, "sha512-jmjpa4BwUsmhxcfsgUit/7A9KbrC48Q0q8KvnY107ogcjGgTFDlIL3RpihNpx2Mu1hM4mdFQjoVc4O6JoGKHsA=="],
383+
376384
"@types/mdast": ["@types/[email protected]", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="],
377385

378386
"@types/node": ["@types/[email protected]", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ=="],
379387

388+
"@types/trusted-types": ["@types/[email protected]", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="],
389+
380390
"@types/unist": ["@types/[email protected]", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="],
381391

382392
"@types/webextension-polyfill": ["@types/[email protected]", "", {}, "sha512-F58aDVSeN/MjUGazXo/cPsmR76EvqQhQ1v4x23hFjUX0cfAJYE+JBWwiOGW36/VJGGxoH74sVlRIF3z7SJCKyg=="],
@@ -523,6 +533,8 @@
523533

524534
"diff": ["[email protected]", "", {}, "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg=="],
525535

536+
"dompurify": ["[email protected]", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ=="],
537+
526538
"enhanced-resolve": ["[email protected]", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg=="],
527539

528540
"es-module-lexer": ["[email protected]", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="],
@@ -691,6 +703,8 @@
691703

692704
"magic-string": ["[email protected]", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="],
693705

706+
"marked": ["[email protected]", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-MUKMXDjsD/eptB7GPzxo4xcnLS6oo7/RHimUMHEDRhUooPwmN9BEpMl7AEOJv3bmso169wHI2wUF9VQgL7zfmA=="],
707+
694708
"mdast-util-to-hast": ["[email protected]", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA=="],
695709

696710
"merge2": ["[email protected]", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="],

web/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
"@sveltejs/vite-plugin-svelte": "^5.1.0",
2828
"@tailwindcss/vite": "^4.1.8",
2929
"@types/chroma-js": "^3.1.1",
30+
"@types/dompurify": "^3.2.0",
3031
"@types/luxon": "^3.6.2",
32+
"@types/marked": "^6.0.0",
3133
"@types/wicg-file-system-access": "^2023.10.6",
3234
"eslint": "^9.28.0",
3335
"eslint-config-prettier": "^10.1.5",
@@ -50,7 +52,9 @@
5052
"chroma-js": "^3.1.2",
5153
"date-fns": "^4.1.0",
5254
"diff": "^8.0.2",
55+
"dompurify": "^3.2.6",
5356
"luxon": "^3.6.1",
57+
"marked": "^16.0.0",
5458
"runed": "^0.28.0",
5559
"shiki": "^3.4.2",
5660
"svelte-toolbelt": "^0.9.1",

web/src/lib/components/diff/CommentDisplay.svelte

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import type { GithubPRComment } from "$lib/github.svelte";
33
import { formatDistance } from "date-fns";
44
import { CommentDisplayState } from "./comment-state.svelte";
5+
import MarkdownRenderer from "./MarkdownRenderer.svelte";
56
67
interface Props {
78
comment: GithubPRComment;
@@ -10,9 +11,11 @@
1011
repo: string;
1112
onCommentUpdated?: (comment: GithubPRComment) => void;
1213
onCommentDeleted?: (commentId: number) => void;
14+
originalContentForSuggestion?: string;
15+
startLine?: number;
1316
}
1417
15-
let { comment, isReply = false, owner, repo, onCommentUpdated, onCommentDeleted }: Props = $props();
18+
let { comment, isReply = false, owner, repo, onCommentUpdated, onCommentDeleted, originalContentForSuggestion, startLine }: Props = $props();
1619
1720
const displayState = new CommentDisplayState(comment, owner, repo, onCommentUpdated, onCommentDeleted);
1821
@@ -71,7 +74,13 @@
7174

7275
{#if displayState.isEditing}
7376
<div class="edit-form">
74-
<textarea bind:value={displayState.editText} class="edit-textarea" rows="3" disabled={displayState.isSubmitting} onkeydown={displayState.handleKeyDown}></textarea>
77+
<textarea
78+
bind:value={displayState.editText}
79+
class="edit-textarea"
80+
rows="3"
81+
disabled={displayState.isSubmitting}
82+
onkeydown={displayState.handleKeyDown}
83+
></textarea>
7584
<div class="edit-actions">
7685
<div class="edit-hint">
7786
<span class="iconify octicon--info-16"></span>
@@ -92,7 +101,7 @@
92101
</div>
93102
{:else}
94103
<div class="comment-body">
95-
<p>{comment.body}</p>
104+
<MarkdownRenderer content={comment.body} originalContentForSuggestion={originalContentForSuggestion ?? ""} {startLine} />
96105
</div>
97106
{/if}
98107
</div>
@@ -307,13 +316,6 @@
307316
margin-bottom: 4px;
308317
}
309318
310-
.comment-body p {
311-
margin: 0;
312-
line-height: 1.2;
313-
white-space: pre-wrap;
314-
font-size: 0.75rem;
315-
}
316-
317319
.github-link {
318320
display: flex;
319321
justify-content: flex-end;

0 commit comments

Comments
 (0)