Skip to content

Commit e6bee8c

Browse files
committed
fix: only check engine-mismatch in package.json
1 parent a33a14b commit e6bee8c

5 files changed

Lines changed: 16 additions & 6 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,7 +1,7 @@
11
import { PACKAGE_JSON_BASENAME } from '#constants'
22
import { logger } from '#state'
3+
import { readPackageManifest } from '#utils/file'
34
import { npmxFileUrl } from '#utils/links'
4-
import { resolvePackageJson } from '#utils/resolve'
55
import { env, Uri, window } from 'vscode'
66
import { findUp } from 'vscode-find-up'
77

@@ -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 resolvePackageJson(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/diagnostics/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { checkUpgrade } from './rules/upgrade'
2121
import { checkVulnerability } from './rules/vulnerability'
2222

2323
export interface DiagnosticContext {
24+
uri: Uri
2425
dep: DependencyInfo
2526
name: string
2627
pkg: PackageInfo
@@ -123,7 +124,7 @@ export function useDiagnostics() {
123124
: null
124125

125126
for (const rule of rules) {
126-
runRule(rule, { dep, name, pkg, parsed, exactVersion, engines })
127+
runRule(rule, { uri: document.uri, dep, name, pkg, parsed, exactVersion, engines })
127128
}
128129
} catch (err) {
129130
logger.warn(`[diagnostics] fail to check ${dep.name}: ${err}`)

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
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'
56
import Range from 'semver/classes/range'
@@ -46,7 +47,9 @@ export function resolveEngineMismatches(
4647
return mismatches
4748
}
4849

49-
export const checkEngineMismatch: DiagnosticRule = ({ dep, name, pkg, parsed, exactVersion, engines }) => {
50+
export const checkEngineMismatch: DiagnosticRule = ({ uri, dep, name, pkg, parsed, exactVersion, engines }) => {
51+
if (!isPackageManifestPath(uri))
52+
return
5053
if (!parsed || !exactVersion || !engines)
5154
return
5255

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import type { Uri } from 'vscode'
2+
import { PACKAGE_JSON_BASENAME } from '#constants'
23
import { workspace } from 'vscode'
34

5+
export function isPackageManifestPath(uri: Uri) {
6+
return uri.path.endsWith(`/${PACKAGE_JSON_BASENAME}`)
7+
}
8+
49
/** A parsed `package.json` manifest file. */
510
interface PackageManifest {
611
/** Package name. */
@@ -16,7 +21,7 @@ interface PackageManifest {
1621
* @returns A promise that resolves to the parsed manifest,
1722
* or `undefined` if the file is invalid or missing required fields.
1823
*/
19-
export async function resolvePackageJson(pkgJsonUri: Uri): Promise<PackageManifest | undefined> {
24+
export async function readPackageManifest(pkgJsonUri: Uri): Promise<PackageManifest | undefined> {
2025
try {
2126
const content = await workspace.fs.readFile(pkgJsonUri)
2227
const manifest = JSON.parse(new TextDecoder().decode(content)) as PackageManifest

tests/diagnostics/context.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type { Engines } from 'fast-npm-meta'
44
import type { DiagnosticContext } from '../../src/providers/diagnostics'
55
import { resolveExactVersion, resolvePackageName } from '#utils/package'
66
import { isSupportedProtocol, parseVersion } from '#utils/version'
7+
import { Uri } from 'vscode'
78

89
interface CreateContextOptions {
910
name: string
@@ -24,5 +25,5 @@ export function createContext(options: CreateContextOptions): DiagnosticContext
2425
const exactVersion = parsed && isSupportedProtocol(parsed.protocol)
2526
? resolveExactVersion(pkg, parsed.version)
2627
: null
27-
return { dep, name: resolvePackageName(name, parsed), pkg, parsed, exactVersion, engines }
28+
return { uri: Uri.file('package.json'), dep, name: resolvePackageName(name, parsed), pkg, parsed, exactVersion, engines }
2829
}

0 commit comments

Comments
 (0)