Skip to content

Commit 2e9c4fd

Browse files
committed
feat: use HoverProvider instead of DocumentLinkProvider to avoid style conflicts
1 parent 977d8d0 commit 2e9c4fd

3 files changed

Lines changed: 37 additions & 30 deletions

File tree

src/index.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { YamlExtractor } from './extractors/yaml'
1212
import { displayName, version } from './generated-meta'
1313
import { VersionCompletionItemProvider } from './providers/completion-item/version'
1414
import { registerDiagnosticCollection } from './providers/diagnostics'
15-
import { NpmxDocumentLinkProvider } from './providers/document-link/npmx'
15+
import { NpmxHoverProvider } from './providers/hover/npmx'
1616
import { config, logger } from './state'
1717

1818
export const { activate, deactivate } = defineExtension((ctx) => {
@@ -22,13 +22,13 @@ export const { activate, deactivate } = defineExtension((ctx) => {
2222
const yamlExtractor = new YamlExtractor()
2323

2424
ctx.subscriptions.push(
25-
languages.registerDocumentLinkProvider(
25+
languages.registerHoverProvider(
2626
{ pattern: PACKAGE_JSON_PATTERN },
27-
new NpmxDocumentLinkProvider(jsonExtractor),
27+
new NpmxHoverProvider(jsonExtractor),
2828
),
29-
languages.registerDocumentLinkProvider(
29+
languages.registerHoverProvider(
3030
{ pattern: PNPM_WORKSPACE_PATTERN },
31-
new NpmxDocumentLinkProvider(yamlExtractor),
31+
new NpmxHoverProvider(yamlExtractor),
3232
),
3333
)
3434

src/providers/document-link/npmx.ts

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/providers/hover/npmx.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import type { Extractor } from '#types/extractor'
2+
import type { HoverProvider, Position, TextDocument } from 'vscode'
3+
import { encodePackageName } from '#utils/npm'
4+
import { Hover, MarkdownString } from 'vscode'
5+
6+
export class NpmxHoverProvider<T extends Extractor> implements HoverProvider {
7+
extractor: T
8+
9+
constructor(extractor: T) {
10+
this.extractor = extractor
11+
}
12+
13+
provideHover(document: TextDocument, position: Position) {
14+
const root = this.extractor.parse(document)
15+
if (!root)
16+
return
17+
18+
const offset = document.offsetAt(position)
19+
const info = this.extractor.getDependencyInfoByOffset(root, offset)
20+
if (!info)
21+
return
22+
23+
const { name } = info
24+
25+
const md = new MarkdownString('')
26+
md.isTrusted = true
27+
28+
md.appendMarkdown(`[View on npmx](https://npmx.dev/package/${encodePackageName(name)}) \n`)
29+
30+
return new Hover(md)
31+
}
32+
}

0 commit comments

Comments
 (0)