From f2d45c3824201095df48511caa8463ec014601e8 Mon Sep 17 00:00:00 2001 From: nitodeco Date: Thu, 5 Feb 2026 02:22:15 +0100 Subject: [PATCH 1/5] feat: exclude deprecated versions from autocomplete --- src/providers/completion-item/version.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/providers/completion-item/version.ts b/src/providers/completion-item/version.ts index 19cff1f..dd47ace 100644 --- a/src/providers/completion-item/version.ts +++ b/src/providers/completion-item/version.ts @@ -41,6 +41,9 @@ export class VersionCompletionItemProvider implements Compl for (const semver in pkg.versionsMeta) { const meta = pkg.versionsMeta[semver] + if (meta.deprecated) + continue + if (config.completion.version === 'provenance-only' && !meta.provenance) continue From 3a72862973b352c48f4566748f815162905011b9 Mon Sep 17 00:00:00 2001 From: nitodeco Date: Thu, 5 Feb 2026 02:32:11 +0100 Subject: [PATCH 2/5] feat: add config to show prerelease versions --- README.md | 15 ++++++++------- package.json | 5 +++++ src/constants.ts | 1 + src/providers/completion-item/version.ts | 6 +++++- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 0b2f695..2fc9ef7 100644 --- a/README.md +++ b/README.md @@ -32,13 +32,14 @@ -| Key | Description | Type | Default | -| -------------------------------- | ----------------------------------------------------- | --------- | ------------------- | -| `npmx.hover.enabled` | Enable hover information for packages | `boolean` | `true` | -| `npmx.completion.version` | Version completion behavior | `string` | `"provenance-only"` | -| `npmx.diagnostics.deprecation` | Show warnings for deprecated packages | `boolean` | `true` | -| `npmx.diagnostics.replacement` | Show suggestions for package replacements | `boolean` | `true` | -| `npmx.diagnostics.vulnerability` | Show warnings for packages with known vulnerabilities | `boolean` | `true` | +| Key | Description | Type | Default | +| -------------------------------- | ---------------------------------------------------------------------------- | --------- | ------------------- | +| `npmx.hover.enabled` | Enable hover information for packages | `boolean` | `true` | +| `npmx.completion.version` | Version completion behavior | `string` | `"provenance-only"` | +| `npmx.completion.showPrerelease` | Show prerelease versions (alpha, beta, rc, canary) in completion suggestions | `boolean` | `false` | +| `npmx.diagnostics.deprecation` | Show warnings for deprecated packages | `boolean` | `true` | +| `npmx.diagnostics.replacement` | Show suggestions for package replacements | `boolean` | `true` | +| `npmx.diagnostics.vulnerability` | Show warnings for packages with known vulnerabilities | `boolean` | `true` | diff --git a/package.json b/package.json index fda4ffd..cbdf42a 100644 --- a/package.json +++ b/package.json @@ -60,6 +60,11 @@ "default": "provenance-only", "description": "Version completion behavior" }, + "npmx.completion.showPrerelease": { + "type": "boolean", + "default": false, + "description": "Show prerelease versions (alpha, beta, rc, canary) in completion suggestions" + }, "npmx.diagnostics.deprecation": { "type": "boolean", "default": true, diff --git a/src/constants.ts b/src/constants.ts index ddeedac..46d51f5 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -5,6 +5,7 @@ export const PACKAGE_JSON_PATTERN = `**/${PACKAGE_JSON_BASENAME}` export const PNPM_WORKSPACE_PATTERN = `**/${PNPM_WORKSPACE_BASENAME}` export const VERSION_TRIGGER_CHARACTERS = [':', '^', '~', '.', ...Array.from({ length: 10 }).map((_, i) => `${i}`)] +export const PRERELEASE_PATTERN = /-(?:alpha|beta|rc|canary)/i export const CACHE_TTL_ONE_DAY = 1000 * 60 * 60 * 24 diff --git a/src/providers/completion-item/version.ts b/src/providers/completion-item/version.ts index dd47ace..7d475bc 100644 --- a/src/providers/completion-item/version.ts +++ b/src/providers/completion-item/version.ts @@ -1,5 +1,6 @@ import type { Extractor } from '#types/extractor' import type { CompletionItemProvider, Position, TextDocument } from 'vscode' +import { PRERELEASE_PATTERN } from '#constants' import { config } from '#state' import { getPackageInfo } from '#utils/api/package' import { formatVersion, parseVersion } from '#utils/package' @@ -41,7 +42,10 @@ export class VersionCompletionItemProvider implements Compl for (const semver in pkg.versionsMeta) { const meta = pkg.versionsMeta[semver] - if (meta.deprecated) + if (meta.deprecated != null) + continue + + if (!config.completion.showPrerelease && PRERELEASE_PATTERN.test(version)) continue if (config.completion.version === 'provenance-only' && !meta.provenance) From b89f59208e930b78d5d0db9709cc0d73dd031e2d Mon Sep 17 00:00:00 2001 From: nitodeco Date: Thu, 5 Feb 2026 12:14:09 +0100 Subject: [PATCH 3/5] refactor: inverse prerelease completion flag --- README.md | 16 ++++++++-------- package.json | 12 ++++++++---- src/providers/completion-item/version.ts | 2 +- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 2fc9ef7..1003404 100644 --- a/README.md +++ b/README.md @@ -32,14 +32,14 @@ -| Key | Description | Type | Default | -| -------------------------------- | ---------------------------------------------------------------------------- | --------- | ------------------- | -| `npmx.hover.enabled` | Enable hover information for packages | `boolean` | `true` | -| `npmx.completion.version` | Version completion behavior | `string` | `"provenance-only"` | -| `npmx.completion.showPrerelease` | Show prerelease versions (alpha, beta, rc, canary) in completion suggestions | `boolean` | `false` | -| `npmx.diagnostics.deprecation` | Show warnings for deprecated packages | `boolean` | `true` | -| `npmx.diagnostics.replacement` | Show suggestions for package replacements | `boolean` | `true` | -| `npmx.diagnostics.vulnerability` | Show warnings for packages with known vulnerabilities | `boolean` | `true` | +| Key | Description | Type | Default | +| ----------------------------------- | --------------------------------------------------------------------------------- | --------- | ------------------- | +| `npmx.hover.enabled` | Enable hover information for packages | `boolean` | `true` | +| `npmx.completion.version` | Version completion behavior | `string` | `"provenance-only"` | +| `npmx.completion.excludePrerelease` | Exclude prerelease versions (alpha, beta, rc, canary) from completion suggestions | `boolean` | `true` | +| `npmx.diagnostics.deprecation` | Show warnings for deprecated packages | `boolean` | `true` | +| `npmx.diagnostics.replacement` | Show suggestions for package replacements | `boolean` | `true` | +| `npmx.diagnostics.vulnerability` | Show warnings for packages with known vulnerabilities | `boolean` | `true` | diff --git a/package.json b/package.json index cbdf42a..7ee4077 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,11 @@ }, "npmx.completion.version": { "type": "string", - "enum": ["all", "provenance-only", "off"], + "enum": [ + "all", + "provenance-only", + "off" + ], "enumDescriptions": [ "Show all versions", "Show only versions with provenance", @@ -60,10 +64,10 @@ "default": "provenance-only", "description": "Version completion behavior" }, - "npmx.completion.showPrerelease": { + "npmx.completion.excludePrerelease": { "type": "boolean", - "default": false, - "description": "Show prerelease versions (alpha, beta, rc, canary) in completion suggestions" + "default": true, + "description": "Exclude prerelease versions (alpha, beta, rc, canary) from completion suggestions" }, "npmx.diagnostics.deprecation": { "type": "boolean", diff --git a/src/providers/completion-item/version.ts b/src/providers/completion-item/version.ts index 7d475bc..d48d970 100644 --- a/src/providers/completion-item/version.ts +++ b/src/providers/completion-item/version.ts @@ -45,7 +45,7 @@ export class VersionCompletionItemProvider implements Compl if (meta.deprecated != null) continue - if (!config.completion.showPrerelease && PRERELEASE_PATTERN.test(version)) + if (config.completion.excludePrerelease && PRERELEASE_PATTERN.test(version)) continue if (config.completion.version === 'provenance-only' && !meta.provenance) From 892e0a25eb916c62472ed3ad341e13106255601a Mon Sep 17 00:00:00 2001 From: nitodeco Date: Thu, 5 Feb 2026 14:32:35 +0100 Subject: [PATCH 4/5] fix: test prerelease pattern on correct version --- src/providers/completion-item/version.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/providers/completion-item/version.ts b/src/providers/completion-item/version.ts index d48d970..d01006f 100644 --- a/src/providers/completion-item/version.ts +++ b/src/providers/completion-item/version.ts @@ -45,7 +45,7 @@ export class VersionCompletionItemProvider implements Compl if (meta.deprecated != null) continue - if (config.completion.excludePrerelease && PRERELEASE_PATTERN.test(version)) + if (config.completion.excludePrerelease && PRERELEASE_PATTERN.test(semver)) continue if (config.completion.version === 'provenance-only' && !meta.provenance) From 2eabca64b086b403c4551b2a66288341d4012cc8 Mon Sep 17 00:00:00 2001 From: nitodeco Date: Thu, 5 Feb 2026 16:26:23 +0100 Subject: [PATCH 5/5] refactor: use more permissive prerelease pattern --- src/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/constants.ts b/src/constants.ts index 46d51f5..384f32a 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -5,7 +5,7 @@ export const PACKAGE_JSON_PATTERN = `**/${PACKAGE_JSON_BASENAME}` export const PNPM_WORKSPACE_PATTERN = `**/${PNPM_WORKSPACE_BASENAME}` export const VERSION_TRIGGER_CHARACTERS = [':', '^', '~', '.', ...Array.from({ length: 10 }).map((_, i) => `${i}`)] -export const PRERELEASE_PATTERN = /-(?:alpha|beta|rc|canary)/i +export const PRERELEASE_PATTERN = /-.+/ export const CACHE_TTL_ONE_DAY = 1000 * 60 * 60 * 24