Skip to content

Commit c24bca6

Browse files
authored
refactor: extract providers into composables (#69)
1 parent 5ccb356 commit c24bca6

4 files changed

Lines changed: 67 additions & 46 deletions

File tree

src/index.ts

Lines changed: 8 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,22 @@
1-
import { VERSION_TRIGGER_CHARACTERS } from '#constants'
2-
import { defineExtension, useCommands, watchEffect } from 'reactive-vscode'
3-
import { Disposable, languages } from 'vscode'
1+
import { defineExtension, useCommands } from 'reactive-vscode'
42
import { openFileInNpmx } from './commands/open-file-in-npmx'
53
import { openInBrowser } from './commands/open-in-browser'
6-
import { extractorEntries } from './extractors'
74
import { commands, displayName, version } from './generated-meta'
85
import { useCodeActions } from './providers/code-actions'
9-
import { VersionCompletionItemProvider } from './providers/completion-item/version'
6+
import { useCompletionItem } from './providers/completion-item'
107
import { useDiagnostics } from './providers/diagnostics'
11-
import { NpmxDocumentLinkProvider } from './providers/document-link/npmx'
12-
import { NpmxHoverProvider } from './providers/hover/npmx'
13-
import { config, logger } from './state'
8+
import { useDocumentLink } from './providers/document-link'
9+
import { useHover } from './providers/hover'
10+
import { logger } from './state'
1411

1512
export const { activate, deactivate } = defineExtension(() => {
1613
logger.info(`${displayName} Activated, v${version}`)
1714

18-
watchEffect((onCleanup) => {
19-
if (!config.hover.enabled)
20-
return
21-
22-
const disposables = extractorEntries.map(({ pattern, extractor }) =>
23-
languages.registerHoverProvider({ pattern }, new NpmxHoverProvider(extractor)),
24-
)
25-
26-
onCleanup(() => Disposable.from(...disposables).dispose())
27-
})
28-
29-
watchEffect((onCleanup) => {
30-
if (config.completion.version === 'off')
31-
return
32-
33-
const disposables = extractorEntries.map(({ pattern, extractor }) =>
34-
languages.registerCompletionItemProvider(
35-
{ pattern },
36-
new VersionCompletionItemProvider(extractor),
37-
...VERSION_TRIGGER_CHARACTERS,
38-
),
39-
)
40-
41-
onCleanup(() => Disposable.from(...disposables).dispose())
42-
})
43-
44-
watchEffect((onCleanup) => {
45-
if (config.packageLinks === 'off')
46-
return
47-
48-
const disposables = extractorEntries.map(({ pattern, extractor }) =>
49-
languages.registerDocumentLinkProvider({ pattern }, new NpmxDocumentLinkProvider(extractor)),
50-
)
51-
52-
onCleanup(() => Disposable.from(...disposables).dispose())
53-
})
54-
15+
useHover()
16+
useCompletionItem()
5517
useDiagnostics()
56-
5718
useCodeActions()
19+
useDocumentLink()
5820

5921
useCommands({
6022
[commands.openInBrowser]: openInBrowser,
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { VERSION_TRIGGER_CHARACTERS } from '#constants'
2+
import { extractorEntries } from '#extractors'
3+
import { config } from '#state'
4+
import { watchEffect } from 'reactive-vscode'
5+
import { Disposable, languages } from 'vscode'
6+
import { VersionCompletionItemProvider } from './version'
7+
8+
export function useCompletionItem() {
9+
watchEffect((onCleanup) => {
10+
if (config.completion.version === 'off')
11+
return
12+
13+
const disposables = extractorEntries.map(({ pattern, extractor }) =>
14+
languages.registerCompletionItemProvider(
15+
{ pattern },
16+
new VersionCompletionItemProvider(extractor),
17+
...VERSION_TRIGGER_CHARACTERS,
18+
),
19+
)
20+
21+
onCleanup(() => Disposable.from(...disposables).dispose())
22+
})
23+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { extractorEntries } from '#extractors'
2+
import { config } from '#state'
3+
import { watchEffect } from 'reactive-vscode'
4+
import { Disposable, languages } from 'vscode'
5+
import { NpmxDocumentLinkProvider } from './npmx'
6+
7+
export function useDocumentLink() {
8+
watchEffect((onCleanup) => {
9+
if (config.packageLinks === 'off')
10+
return
11+
12+
const disposables = extractorEntries.map(({ pattern, extractor }) =>
13+
languages.registerDocumentLinkProvider({ pattern }, new NpmxDocumentLinkProvider(extractor)),
14+
)
15+
16+
onCleanup(() => Disposable.from(...disposables).dispose())
17+
})
18+
}

src/providers/hover/index.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { extractorEntries } from '#extractors'
2+
import { config } from '#state'
3+
import { watchEffect } from 'reactive-vscode'
4+
import { Disposable, languages } from 'vscode'
5+
import { NpmxHoverProvider } from './npmx'
6+
7+
export function useHover() {
8+
watchEffect((onCleanup) => {
9+
if (!config.hover.enabled)
10+
return
11+
12+
const disposables = extractorEntries.map(({ pattern, extractor }) =>
13+
languages.registerHoverProvider({ pattern }, new NpmxHoverProvider(extractor)),
14+
)
15+
16+
onCleanup(() => Disposable.from(...disposables).dispose())
17+
})
18+
}

0 commit comments

Comments
 (0)