Skip to content

Commit 53036de

Browse files
committed
Merge branch 'main' into resolve
# Conflicts: # src/commands/open-file-in-npmx.ts # src/constants.ts # src/providers/completion-item/index.ts # src/providers/completion-item/version.ts # src/providers/diagnostics/index.ts # src/providers/diagnostics/rules/engine-mismatch.ts # src/utils/document.ts # src/utils/file.ts # src/utils/resolve.ts # tests/diagnostics/context.ts
2 parents 938bba3 + e6bee8c commit 53036de

7 files changed

Lines changed: 18 additions & 15 deletions

File tree

src/commands/open-file-in-npmx.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { PACKAGE_JSON_BASENAME } from '#constants'
22
import { logger } from '#state'
3-
import { getPackageManifest } from '#utils/document'
3+
import { readPackageManifest } from '#utils/file'
44
import { npmxFileUrl } from '#utils/links'
55
import { env, Uri, window } from 'vscode'
66
import { findUp } from 'vscode-find-up'
@@ -27,7 +27,7 @@ export async function openFileInNpmx(fileUri?: Uri) {
2727
const pkgJsonUri = await findUp(PACKAGE_JSON_BASENAME, {
2828
cwd: uri,
2929
})
30-
const manifest = pkgJsonUri ? await getPackageManifest(pkgJsonUri) : undefined
30+
const manifest = pkgJsonUri ? await readPackageManifest(pkgJsonUri) : undefined
3131
if (!pkgJsonUri || !manifest) {
3232
logger.warn(`Could not resolve npmx url: ${uri.toString()}`)
3333
window.showWarningMessage(`npmx: Could not find package.json for ${uri.toString()}`)

src/providers/completion-item/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export function useCompletionItem() {
1414
const disposable = languages.registerCompletionItemProvider(
1515
{ pattern: SUPPORTED_DOCUMENT_PATTERN },
1616
new VersionCompletionItemProvider(),
17-
...VERSION_TRIGGER_CHARACTERS,
17+
...VersionCompletionItemProvider.triggers,
1818
)
1919

2020
onCleanup(() => disposable.dispose())

src/providers/completion-item/version.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import { getResolvedDependencyByOffset } from '#utils/workspace'
77
import { CompletionItem, CompletionItemKind } from 'vscode'
88

99
export class VersionCompletionItemProvider implements CompletionItemProvider {
10+
static triggers = [':', '^', '~', '.', ...Array.from({ length: 10 }).map((_, i) => `${i}`)]
11+
1012
async provideCompletionItems(document: TextDocument, position: Position) {
1113
const offset = document.offsetAt(position)
1214
const info = await getResolvedDependencyByOffset(document.uri, offset)

src/providers/diagnostics/rules/engine-mismatch.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import type { Engines } from 'fast-npm-meta'
22
import type { DiagnosticRule } from '..'
3+
import { isPackageManifestPath } from '#utils/file'
34
import { npmxPackageUrl } from '#utils/links'
45
import { formatPackageId } from '#utils/package'
5-
import { getWorkspaceContext, isPackageManifestPath } from '#utils/workspace'
6+
import { getWorkspaceContext } from '#utils/workspace'
67
import Range from 'semver/classes/range'
78
import intersects from 'semver/ranges/intersects'
89
import subset from 'semver/ranges/subset'
@@ -48,7 +49,7 @@ export function resolveEngineMismatches(
4849
}
4950

5051
export const checkEngineMismatch: DiagnosticRule = async ({ uri, dep, pkg }) => {
51-
if (!isPackageManifestPath(uri.path))
52+
if (!isPackageManifestPath(uri))
5253
return
5354

5455
const resolvedVersion = await dep.resolvedVersion()
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
11
import type { PackageManifestInfo } from '#types/extractor'
22
import type { Uri } from 'vscode'
3+
import { PACKAGE_JSON_BASENAME } from '#constants'
34
import { workspace } from 'vscode'
45

56
export async function getDocumentText(uri: Uri) {
67
const document = await workspace.openTextDocument(uri)
78
return document.getText()
89
}
910

11+
export function isPackageManifestPath(uri: Uri) {
12+
return uri.path.endsWith(`/${PACKAGE_JSON_BASENAME}`)
13+
}
1014
/**
1115
* Reads and parses a `package.json` file.
1216
*
1317
* @param pkgJsonUri The URI of the `package.json` file.
1418
* @returns A promise that resolves to the parsed manifest,
1519
* or `undefined` if the file is invalid or missing required fields.
1620
*/
17-
export async function getPackageManifest(pkgJsonUri: Uri): Promise<PackageManifestInfo | undefined> {
21+
export async function readPackageManifest(pkgJsonUri: Uri): Promise<PackageManifestInfo | undefined> {
1822
try {
1923
const content = await workspace.fs.readFile(pkgJsonUri)
2024
const manifest = JSON.parse(new TextDecoder().decode(content)) as PackageManifestInfo

src/utils/package-manager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ import type { WorkspaceFolder } from 'vscode'
33
import { packageManifestExtractorEntry, workspaceCatalogExtractorEntries } from '#extractors'
44
import { Uri } from 'vscode'
55
import { accessOk } from 'vscode-find-up'
6-
import { getPackageManifest } from './document'
6+
import { readPackageManifest } from './file'
77
import { parsePackageId } from './package'
88

99
export async function detectPackageManager(folder: WorkspaceFolder): Promise<PackageManager> {
1010
const rootPackageUri = Uri.joinPath(folder.uri, packageManifestExtractorEntry.basename)
1111

1212
if (await accessOk(rootPackageUri)) {
13-
const rootPackage = await getPackageManifest(rootPackageUri)
13+
const rootPackage = await readPackageManifest(rootPackageUri)
1414
if (rootPackage?.packageManager) {
1515
const { name: packageManager } = parsePackageId(rootPackage.packageManager)
1616
if (packageManager)

src/utils/workspace.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,13 @@ import { memoize } from '#utils/memoize'
1111
import { resolveExactVersion } from '#utils/package'
1212
import { detectPackageManager } from '#utils/package-manager'
1313
import { Uri, workspace } from 'vscode'
14-
import { getDocumentText } from './document'
14+
import { getDocumentText, isPackageManifestPath } from './file'
1515
import { lazyInit } from './shared'
1616

1717
type WithResolvedDependencyInfo<T> = Omit<T, 'dependencies'> & {
1818
dependencies: ResolvedDependencyInfo[]
1919
}
2020

21-
export function isPackageManifestPath(path: string) {
22-
return path.endsWith(`/${packageManifestExtractorEntry.basename}`)
23-
}
24-
2521
class WorkspaceContext {
2622
folder: WorkspaceFolder
2723
packageManager: PackageManager = 'npm'
@@ -85,7 +81,7 @@ class WorkspaceContext {
8581
Uri,
8682
Promise<WithResolvedDependencyInfo<PackageManifestInfo> | undefined>
8783
>(async (uri) => {
88-
if (!isPackageManifestPath(uri.path))
84+
if (!isPackageManifestPath(uri))
8985
return
9086

9187
logger.info(`[workspace-context] load package manifest info: ${uri.path}`)
@@ -145,7 +141,7 @@ export async function getResolvedDependencies(uri: Uri): Promise<ResolvedDepende
145141
return []
146142

147143
return (
148-
isPackageManifestPath(uri.path)
144+
isPackageManifestPath(uri)
149145
? await ctx.loadPackageManifestInfo(uri)
150146
: await ctx.loadWorkspaceCatalogInfo(uri)
151147
)?.dependencies

0 commit comments

Comments
 (0)