Skip to content

Commit 6d71296

Browse files
committed
fix: rare git integration error
fix: introduce workaround for json no diagnostics microsoft/vscode-languageserver-node#1252
1 parent bf9460a commit 6d71296

10 files changed

+47
-22
lines changed

src/autoInstall.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ export const registerLockfilesWatcher = () => {
130130
}).catch(() => null)
131131
}
132132

133-
for (const { action, uri } of recentLockfileChanges as any[]) void handleLockfileChangeUI(action, uri)
133+
for (const { action, uri } of recentLockfileChanges ?? []) void handleLockfileChangeUI(action, uri)
134134
})
135135
})()
136136
}

src/commands-core/npmScripts.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import vscode from 'vscode'
2-
import { readPackageJsonWithMetadata } from './packageJson'
2+
import { readPackageJsonWithMetadata, showPackageJson } from './packageJson'
33

44
type PromiseType<T> = T extends Promise<infer U> ? U : never
55

@@ -22,7 +22,7 @@ export const launchNpmTask = async (getNpmScript: (params: PromiseType<ReturnTyp
2222
// TODO command title
2323
// TODO change to define `start` script
2424
const action = await vscode.window.showErrorMessage('No `scripts` defined in package.json', 'Open package.json')
25-
// if (action) vscode.workspace.openTextDocument(vscode.Uri.file(join(workspacePath, 'package.json')))
25+
if (action) await showPackageJson(workspaceUri)
2626

2727
return
2828
}

src/commands-core/packageJson.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import { posix } from 'path'
33
import * as vscode from 'vscode'
44
import { PackageJson } from 'type-fest'
5-
import { showQuickPick, VSCodeQuickPickItem } from 'vscode-framework'
5+
import { getExtensionSetting, showQuickPick, VSCodeQuickPickItem } from 'vscode-framework'
66
import { noCase } from 'change-case'
77
import { fsExists, getCurrentWorkspaceRoot } from '@zardoy/vscode-utils/build/fs'
88
import { joinPackageJson, supportedFileSchemes } from './util'
@@ -194,3 +194,22 @@ export const throwIfNoPackageJson = async (uriDir: vscode.Uri, needsWrite: boole
194194
throw new Error('No package.json found. Run `init` first')
195195
}
196196
}
197+
198+
export const showPackageJson = async (uri: vscode.Uri, isDir = true) => {
199+
if (isDir) uri = joinPackageJson(uri)
200+
if (uri.scheme === 'file' && getExtensionSetting('useNoJsonDiagnosticsWorkaround')) {
201+
await vscode.commands.executeCommand('workbench.action.quickOpen', uri.fsPath)
202+
await new Promise(resolve => {
203+
setTimeout(resolve, 25)
204+
})
205+
await new Promise<void>(resolve => {
206+
const { dispose } = vscode.window.onDidChangeActiveTextEditor(() => {
207+
resolve()
208+
dispose()
209+
})
210+
void vscode.commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem')
211+
})
212+
} else {
213+
await vscode.window.showTextDocument(uri)
214+
}
215+
}

src/commands-core/packageManager.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,7 @@ const handleRunningTask = (command: string, args: string[], shortTitle: string)
221221
return undefined
222222
}
223223

224+
//@ts-expect-error
224225
const executeTaskShared = async (
225226
data:
226227
| 'reveal'
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import vscode from 'vscode'
22
import { fsExists } from '@zardoy/vscode-utils/build/fs'
3-
import { findUpPackageJson } from '../commands-core/packageJson'
3+
import { findUpPackageJson, showPackageJson } from '../commands-core/packageJson'
44
import { joinPackageJson, supportedFileSchemes } from '../commands-core/util'
55

66
export const openClosestPackageJson = async () => {
@@ -13,16 +13,16 @@ export const openClosestPackageJson = async () => {
1313
if (!firstWorkspace) return
1414
const uriToOpen = joinPackageJson(firstWorkspace.uri)
1515
if (!(await fsExists(uriToOpen, true))) return
16-
await vscode.window.showTextDocument(uriToOpen)
16+
await showPackageJson(uriToOpen, false)
1717
return
1818
}
1919

20-
const closestPackageJson = await findUpPackageJson(uri)
21-
if (closestPackageJson === undefined) {
20+
const closestPackageJsonDir = await findUpPackageJson(uri)
21+
if (closestPackageJsonDir === undefined) {
2222
await vscode.window.showWarningMessage('No closest package.json found')
2323
return
2424
}
2525

26-
await vscode.window.showTextDocument(joinPackageJson(closestPackageJson))
26+
await showPackageJson(closestPackageJsonDir)
2727
return undefined
2828
}

src/commands/openPackageAt.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import defaultBranch from 'default-branch'
33
import { getExtensionCommandId, getExtensionSetting, registerExtensionCommand, RegularCommands, showQuickPick } from 'vscode-framework'
44
import { getCurrentWorkspaceRoot } from '@zardoy/vscode-utils/build/fs'
55
import { noCase } from 'change-case'
6-
import { findUpNodeModules, pickInstalledDeps, readDirPackageJson } from '../commands-core/packageJson'
7-
import { joinPackageJson, supportedFileSchemes } from '../commands-core/util'
6+
import { findUpNodeModules, pickInstalledDeps, readDirPackageJson, showPackageJson } from '../commands-core/packageJson'
7+
import { supportedFileSchemes } from '../commands-core/util'
88
import { getPackageRepositoryUrl } from './npmOpenRepository'
99

1010
/** get module dir URI from closest node_modules */
@@ -93,8 +93,8 @@ export const registerOpenPackageAtCommands = () => {
9393
registerExtensionCommand('openPackagePackageJson', async ({ command: commandId }, module?: string) => {
9494
if (!module) module = await pickInstalledDeps({ commandId, multiple: false, flatTypes: false })
9595
if (module === undefined) return
96-
const packageJsonUri = joinPackageJson(await getClosestModulePath(module))
97-
await vscode.window.showTextDocument(packageJsonUri)
96+
const packageJsonUriDir = await getClosestModulePath(module)
97+
await showPackageJson(packageJsonUriDir)
9898
})
9999

100100
registerExtensionCommand('openPackageAt', async ({ command: commandId }, module?: string) => {
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
import * as vscode from 'vscode'
21
import { getCurrentWorkspaceRoot } from '@zardoy/vscode-utils/build/fs'
32
import { registerExtensionCommand } from 'vscode-framework'
4-
import { joinPackageJson } from '../commands-core/util'
3+
import { showPackageJson } from '../commands-core/packageJson'
54

65
export default () => {
76
registerExtensionCommand('openWorkspacePackageJson', async () => {
8-
const currentWorkspace = getCurrentWorkspaceRoot()
9-
await vscode.window.showTextDocument(joinPackageJson(currentWorkspace.uri))
7+
await showPackageJson(getCurrentWorkspaceRoot().uri)
108
})
119
}

src/commands/runNpmScript.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { getExtensionSetting, VSCodeQuickPickItem } from 'vscode-framework'
44
import { showQuickPick } from '@zardoy/vscode-utils/build/quickPick'
55
import delay from 'delay'
66
import { launchNpmTask } from '../commands-core/npmScripts'
7-
import { joinPackageJson } from '../commands-core/util'
7+
import { showPackageJson } from '../commands-core/packageJson'
88

99
const recentlyTouchedScripts: string[] = []
1010

@@ -55,8 +55,8 @@ export const runNpmScript = async (_, scriptArgs?: string | LaunchScriptArgs) =>
5555
iconPath: new vscode.ThemeIcon('go-to-file'),
5656
tooltip: 'Reveal script in package.json',
5757
async click() {
58-
const packageJsonUri = joinPackageJson(dir)
59-
const editor = await vscode.window.showTextDocument(packageJsonUri)
58+
await showPackageJson(dir)
59+
const editor = vscode.window.activeTextEditor!
6060
const { document } = editor
6161
const { offset, length } = findNodeAtLocation(parseTree(document.getText())!, ['scripts', scriptName])!
6262
editor.selection = new vscode.Selection(document.positionAt(offset + 1), document.positionAt(offset + 1 + length - 2))

src/configurationType.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,4 +254,6 @@ export type Configuration = {
254254
depsValueLinkAction: PackageLinkAction
255255
/** @default true */
256256
// enableTerminalLinkProvider: boolean
257+
/** @default true */
258+
useNoJsonDiagnosticsWorkaround: boolean
257259
}

src/configurationTypeCache.jsonc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// GENERATED. DON'T EDIT MANUALLY
2-
// md5hash: 727c6dc098ff2d974cc6d2d008fa6827
2+
// md5hash: 4a565685fba6c6f1922f0623441870fc
33
{
44
"type": "object",
55
"properties": {
@@ -324,6 +324,10 @@
324324
"revealInExplorer"
325325
],
326326
"type": "string"
327+
},
328+
"useNoJsonDiagnosticsWorkaround": {
329+
"default": true,
330+
"type": "boolean"
327331
}
328332
},
329333
"required": [
@@ -353,6 +357,7 @@
353357
"search.includeDeprecated",
354358
"search.provder",
355359
"statusbar.showMainScriptStatus",
356-
"useIntegratedTerminal"
360+
"useIntegratedTerminal",
361+
"useNoJsonDiagnosticsWorkaround"
357362
]
358363
}

0 commit comments

Comments
 (0)