Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Pasting a link whose text/html label is a shortened form of its URL plants a `[` inside the URL

未关闭 适合新手
#118 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
75/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
冷清
技术栈
javascript
领域
frontend

调研方向

从 src/paste-markdown-html.ts 的第 83-90 行附近开始,这里是 convertToMarkdown 在纯文本中定位 HTML 标签的位置。复现 issue 中的剪贴板案例,然后添加提议的修复中描述的四个回归测试,并运行现有测试套件。完成的标准是:缩短的 URL 标签能够正确替换且不会破坏 URL,同时其他情况保持当前行为不变。

由索引模型根据 Issue 内容生成。

描述

What happens

When a clipboard carries a URL as text/plain and an anchor labelled with a shortened rendering of that URL as text/html, pasting into a GitHub comment box inserts the Markdown link syntax inside the URL:

text/plain: https://github.com/owner/repo/blob/main/a.js#L7
text/html:  <a href="https://github.com/owner/repo/blob/main/a.js#L7">repo/blob/main/a.js#L7</a>

pasted:     https://github.com/owner/[repo/blob/main/a.js#L7](https://github.com/owner/repo/blob/main/a.js#L7)
expected:   [repo/blob/main/a.js#L7](https://github.com/owner/repo/blob/main/a.js#L7)

It renders as two links, one of them junk (https://github.com/owner/ on its own), and the comment has to be repaired by hand.

Reproduction

Run this in the console of any page with a GitHub comment box, press ⌘C/Ctrl+C, then paste into the box:

document.addEventListener('copy', event => {
  const url = 'https://github.com/owner/repo/blob/main/a.js#L7'
  event.clipboardData.setData('text/plain', url)
  event.clipboardData.setData('text/html', `<a href="${url}">repo/blob/main/a.js#L7</a>`)
  event.preventDefault()
}, {once: true})
Why it happens

convertToMarkdown starts from the plaintext flavour and splices [label](href) over the label at the offset where indexOf finds it:

https://github.com/github/paste-markdown/blob/main/src/paste-markdown-html.ts#L83-L90

That is correct for prose containing a link, where the plaintext is a flattening of the HTML. Here the plaintext is the URL and the label is a substring of it, so the label is found at offset 25 rather than 0 and the splice covers only the tail.

The same corruption happens when prose wraps the URL in punctuation — plaintext (https://github.com/owner/repo/blob/main/a.js#L7) yields (https://github.com/owner/[repo/…#L7](…)).

Who hits it

Any tool that writes a link to the clipboard as "URL as plaintext, shortened label as HTML" — macOS automation scripts (Hammerspoon/Alfred/Keyboard Maestro), clipboard managers, and "copy link" affordances that shorten the visible text. Labels containing a character the URL does not (repo#1234) are unaffected, because indexOf misses and the paste is left alone; every label that is a substring of its own URL is affected.

Proposed fix

#117 — replaces the whole URL when the label is a shortened rendering of it, declines rather than corrupting when the label sits inside a URL that is not its own href, and leaves every other case on the existing path. Four regression tests, all failing before the change.

主要语言
JavaScript
星标
234
派生
47
平均合并
1 天 12 小时
30 天内合并 PR
5

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

github/paste-markdown 的其他 Issue

查看 github/paste-markdown 的全部 Issue

相似的 Issue

更多 JavaScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。