JSDoc File Links
Cmd/Ctrl-click markdown file links in JSDoc and other comments — without opening the hover popup first.
| Href |
Resolved from |
./file.ts / ../file.ts |
Current file’s directory (unchanged) |
packages/backend/api/.../file.ts |
Workspace folder roots (first match that exists) |
/abs/path.ts, ~/file.ts, file:///… |
Absolute / home / file URI |
Example:
/**
* Relative (still works):
* [getExpenseReport](https://github.com/Memeplexx/jsdoc-file-links/blob/HEAD/../../../../../backend/api/.../get-expense-report.service.ts)
*
* Workspace-root (via the `root` folder in a multi-root workspace):
* [getExpenseReport](https://github.com/Memeplexx/jsdoc-file-links/blob/HEAD/packages/backend/api/.../get-expense-report.service.ts)
*
* With symbol jump:
* [getExpenseReport](https://github.com/Memeplexx/jsdoc-file-links/blob/HEAD/packages/backend/api/.../get-expense-report.service.ts#getExpenseReport)
*/
./ and ../ are never resolved through workspace roots — document-relative syntax stays exactly as before.
Features
- Detects
[label](https://github.com/Memeplexx/jsdoc-file-links/blob/HEAD/path) inside // and /* … */ comments
- Skips strings so code like
"[x](https://github.com/Memeplexx/jsdoc-file-links/blob/HEAD/y.ts)" is not linkified
- Skips
http(s):, mailto:, and other URL schemes
- Only underlines targets that exist on disk (configurable)
- Works in TypeScript, TSX, JavaScript, and JSX
Fragments
| Href |
Behavior |
./file.ts |
Open the file |
./file.ts#getExpenseReport |
Open and jump to that symbol |
./file.ts#L12 |
Open at line 12 |
./file.ts#L12C4 |
Open at line 12, column 4 |
Smart landing (optional)
When a JSDoc sits on an object property:
/**
* [NextWeeksComponent](https://github.com/Memeplexx/jsdoc-file-links/blob/HEAD/packages/frontend/.../next-weeks.component.ts)
*/
getPlannerWeeks: { ... }
…clicks try, in order:
- Declaration of
getPlannerWeeks (backend export function)
- Call site
.getPlannerWeeks( (frontend API usage)
- Label
NextWeeksComponent (component class fallback)
With jsdocFileLinks.useLabelAsSymbol enabled, step 3 is included. Off by default for the label; the property-key steps always run when a context key is detected.
Install
cd ~/Documents/vscodeplugins/jsdoc-file-links
npm install
npm run install-extension
Then Developer: Reload Window.
Settings
| Setting |
Default |
Description |
jsdocFileLinks.enabled |
true |
Master switch |
jsdocFileLinks.requireExistingFile |
true |
Only linkify paths that exist |
jsdocFileLinks.useLabelAsSymbol |
false |
Use the link label as a symbol when there is no #fragment |
Develop
npm test
npm run install-extension
License
MIT