Skip to content

Commit 4c39071

Browse files
committed
feat: use reactive config for providers
1 parent 577e018 commit 4c39071

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

src/index.ts

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import {
55
PNPM_WORKSPACE_PATTERN,
66
VERSION_TRIGGER_CHARACTERS,
77
} from '#constants'
8-
import { defineExtension } from 'reactive-vscode'
9-
import { languages } from 'vscode'
8+
import { defineExtension, watchEffect } from 'reactive-vscode'
9+
import { Disposable, languages } from 'vscode'
1010
import { PackageJsonExtractor } from './extractors/package-json'
1111
import { PnpmWorkspaceYamlExtractor } from './extractors/pnpm-workspace-yaml'
1212
import { displayName, version } from './generated-meta'
@@ -15,14 +15,17 @@ import { registerDiagnosticCollection } from './providers/diagnostics'
1515
import { NpmxHoverProvider } from './providers/hover/npmx'
1616
import { config, logger } from './state'
1717

18-
export const { activate, deactivate } = defineExtension((ctx) => {
18+
export const { activate, deactivate } = defineExtension(() => {
1919
logger.info(`${displayName} Activated, v${version}`)
2020

2121
const packageJsonExtractor = new PackageJsonExtractor()
2222
const pnpmWorkspaceYamlExtractor = new PnpmWorkspaceYamlExtractor()
2323

24-
if (config.hover.enabled) {
25-
ctx.subscriptions.push(
24+
watchEffect((onCleanup) => {
25+
if (!config.hover.enabled)
26+
return
27+
28+
const disposables = [
2629
languages.registerHoverProvider(
2730
{ pattern: PACKAGE_JSON_PATTERN },
2831
new NpmxHoverProvider(packageJsonExtractor),
@@ -31,11 +34,16 @@ export const { activate, deactivate } = defineExtension((ctx) => {
3134
{ pattern: PNPM_WORKSPACE_PATTERN },
3235
new NpmxHoverProvider(pnpmWorkspaceYamlExtractor),
3336
),
34-
)
35-
}
37+
]
38+
39+
onCleanup(() => Disposable.from(...disposables).dispose())
40+
})
3641

37-
if (config.completion.version !== 'off') {
38-
ctx.subscriptions.push(
42+
watchEffect((onCleanup) => {
43+
if (config.completion.version === 'off')
44+
return
45+
46+
const disposables = [
3947
languages.registerCompletionItemProvider(
4048
{ pattern: PACKAGE_JSON_PATTERN },
4149
new VersionCompletionItemProvider(packageJsonExtractor),
@@ -46,8 +54,10 @@ export const { activate, deactivate } = defineExtension((ctx) => {
4654
new VersionCompletionItemProvider(pnpmWorkspaceYamlExtractor),
4755
...VERSION_TRIGGER_CHARACTERS,
4856
),
49-
)
50-
}
57+
]
58+
59+
onCleanup(() => Disposable.from(...disposables).dispose())
60+
})
5161

5262
registerDiagnosticCollection({
5363
[PACKAGE_JSON_BASENAME]: packageJsonExtractor,

src/providers/diagnostics/index.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import type { Diagnostic, TextDocument } from 'vscode'
55
import { basename } from 'node:path'
66
import { config, logger } from '#state'
77
import { getPackageInfo } from '#utils/api/package'
8-
import { useActiveTextEditor, useDocumentText, watch } from 'reactive-vscode'
8+
import { computed, useActiveTextEditor, useDocumentText, watch } from 'reactive-vscode'
99
import { languages } from 'vscode'
1010
import { displayName } from '../../generated-meta'
1111
import { checkDeprecation } from './rules/deprecation'
@@ -17,7 +17,7 @@ export interface NodeDiagnosticInfo extends Pick<Diagnostic, 'message' | 'severi
1717
}
1818
export type DiagnosticRule = (dep: DependencyInfo, pkg: ResolvedPackument) => Awaitable<NodeDiagnosticInfo | undefined>
1919

20-
function getEnabledRules(): DiagnosticRule[] {
20+
const enabledRules = computed<DiagnosticRule[]>(() => {
2121
const rules: DiagnosticRule[] = []
2222
if (config.diagnostics.deprecation)
2323
rules.push(checkDeprecation)
@@ -26,7 +26,7 @@ function getEnabledRules(): DiagnosticRule[] {
2626
if (config.diagnostics.vulnerability)
2727
rules.push(checkVulnerability)
2828
return rules
29-
}
29+
})
3030

3131
export function registerDiagnosticCollection(mapping: Record<string, Extractor | undefined>) {
3232
const diagnosticCollection = languages.createDiagnosticCollection(displayName)
@@ -49,7 +49,7 @@ export function registerDiagnosticCollection(mapping: Record<string, Extractor |
4949
try {
5050
const pkg = await getPackageInfo(dep.name)
5151

52-
for (const rule of getEnabledRules()) {
52+
for (const rule of enabledRules.value) {
5353
const diagnostic = await rule(dep, pkg)
5454

5555
if (diagnostic) {

0 commit comments

Comments
 (0)