Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions extensions/vscode/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -209,9 +209,7 @@
"npmx-language-core": "workspace:*",
"npmx-language-server": "workspace:*",
"npmx-shared": "workspace:*",
"ocache": "catalog:inline",
"reactive-vscode": "catalog:inline",
"semver": "catalog:inline",
"vscode-ext-gen": "catalog:dev",
"vscode-find-up": "catalog:inline"
}
Expand Down
17 changes: 3 additions & 14 deletions extensions/vscode/src/client.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import type { DocumentFilter } from '@volar/vscode'
import type { GetPackageManagerRequest } from 'npmx-shared/protocol'
import { SUPPORTED_DOCUMENT_PATTERN } from '#utils/constants'
import { middleware } from '@volar/vscode'
import { LanguageClient, TransportKind } from '@volar/vscode/node'
import { displayName, extensionId } from 'npmx-shared/meta'
import { GET_PACKAGE_MANAGER_METHOD } from 'npmx-shared/protocol'
import { commands, Hover, MarkdownString, Uri } from 'vscode'
import { Hover, MarkdownString } from 'vscode'
import { registerRequests } from './request'

const SUPPORTED_LANGUAGES = [
'javascript',
Expand Down Expand Up @@ -74,17 +73,7 @@ export function launch(serverPath: string) {
},
)

client.onRequest(
GET_PACKAGE_MANAGER_METHOD,
async (params: GetPackageManagerRequest.ParamsType): Promise<GetPackageManagerRequest.ResponseType> => {
try {
const result = await commands.executeCommand<GetPackageManagerRequest.ResponseType>('npm.packageManager', Uri.parse(params.uri))
return result || 'npm'
} catch {
return 'npm'
}
},
)
registerRequests(client)

return { client, ready: client.start() }
}
52 changes: 0 additions & 52 deletions extensions/vscode/src/composables/workspace-context.ts

This file was deleted.

71 changes: 0 additions & 71 deletions extensions/vscode/src/core/workspace.ts

This file was deleted.

5 changes: 1 addition & 4 deletions extensions/vscode/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { useWorkspaceContext } from '#composables/workspace-context'
import { createLabsInfo } from '@volar/vscode'
import { ADD_TO_IGNORE_COMMAND } from 'npmx-shared/commands'
import { commands, displayName, version } from 'npmx-shared/meta'
Expand All @@ -18,9 +17,7 @@ export const { activate, deactivate } = defineExtension((ctx) => {
const { client } = launch(serverPath)
volarLabs.addLanguageClient(client)

useWorkspaceContext()

useDecorators()
useDecorators(client)

useCommand(ADD_TO_IGNORE_COMMAND, addToIgnore)

Expand Down
7 changes: 4 additions & 3 deletions extensions/vscode/src/providers/decorators.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import type { BaseLanguageClient } from '@volar/vscode'
import type { DecorationOptions } from 'vscode'
import { getResolvedDependencies } from '#core/workspace'
import { logger } from '#state'
import { offsetRangeToRange } from '#utils/ast'
import { getResolvedDependencies } from '#utils/request'
import { isPackageManifest } from 'npmx-language-core/utils'
import { useActiveTextEditor, useEditorDecorations, watch } from 'reactive-vscode'
import { Range } from 'vscode'

export function useDecorators() {
export function useDecorators(client: BaseLanguageClient) {
const activeEditor = useActiveTextEditor()

const { update } = useEditorDecorations(
Expand All @@ -20,7 +21,7 @@ export function useDecorators() {
return []
logger.info(`[decorators] updating ${document.uri.path}`)

const dependencies = await getResolvedDependencies(document.uri)
const dependencies = await getResolvedDependencies(client, document.uri)
if (!dependencies)
return []

Expand Down
25 changes: 25 additions & 0 deletions extensions/vscode/src/request.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import type { BaseLanguageClient } from '@volar/vscode'
import type { GetPackageManagerRequest } from 'npmx-shared/protocol'
import { RequestType } from '@volar/vscode'
import { GET_PACKAGE_MANAGER_METHOD } from 'npmx-shared/protocol'
import { commands, Uri } from 'vscode'

const getPackageManagerRequestType = new RequestType<
GetPackageManagerRequest.ParamsType,
GetPackageManagerRequest.ResponseType,
GetPackageManagerRequest.ErrorType
>(GET_PACKAGE_MANAGER_METHOD)

export function registerRequests(client: BaseLanguageClient) {
client.onRequest(
getPackageManagerRequestType,
async (params): Promise<GetPackageManagerRequest.ResponseType> => {
try {
const result = await commands.executeCommand<GetPackageManagerRequest.ResponseType>('npm.packageManager', Uri.parse(params.uri))
return result || 'npm'
} catch {
return 'npm'
}
},
)
}
21 changes: 21 additions & 0 deletions extensions/vscode/src/utils/request.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import type { BaseLanguageClient } from '@volar/vscode'
import type { GetResolvedDependenciesRequest } from 'npmx-shared/protocol'
import type { Uri } from 'vscode'
import { logger } from '#state'
import { RequestType } from '@volar/vscode'
import { GET_RESOLVED_DEPENDENCIES_METHOD } from 'npmx-shared/protocol'

const getResolvedDependenciesRequestType = new RequestType<
GetResolvedDependenciesRequest.ParamsType,
GetResolvedDependenciesRequest.ResponseType,
GetResolvedDependenciesRequest.ErrorType
>(GET_RESOLVED_DEPENDENCIES_METHOD)

export async function getResolvedDependencies(client: BaseLanguageClient, uri: Uri) {
try {
return client.sendRequest(getResolvedDependenciesRequestType, { uri: uri.toString() })
} catch (err) {
logger.error(`Failed to resolve dependencies for ${uri.toString()}: ${String(err)}`)
return []
}
}
4 changes: 1 addition & 3 deletions extensions/vscode/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,7 @@
"#state": ["./src/state.ts"],
"#api/*": ["./src/api/*"],
"#types/*": ["./src/types/*"],
"#utils/*": ["./src/utils/*"],
"#core/*": ["./src/core/*"],
"#composables/*": ["./src/composables/*"]
"#utils/*": ["./src/utils/*"]
}
},
"include": [
Expand Down
2 changes: 0 additions & 2 deletions extensions/vscode/tsdown.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ export default defineConfig({
'balanced-match',
'brace-expansion',
'minimatch',
'ocache',
'ohash',
'path-browserify',
'semver',
'typescript',
Expand Down
18 changes: 18 additions & 0 deletions packages/language-server/src/request.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import type { Connection } from '@volar/language-server'
import type { GetResolvedDependenciesRequest } from 'npmx-shared/protocol'
import type { WorkspaceState } from './workspace'
import { RequestType } from '@volar/language-server'
import { GET_RESOLVED_DEPENDENCIES_METHOD } from 'npmx-shared/protocol'

const getResolvedDependenciesRequestType = new RequestType<
GetResolvedDependenciesRequest.ParamsType,
GetResolvedDependenciesRequest.ResponseType,
GetResolvedDependenciesRequest.ErrorType
>(GET_RESOLVED_DEPENDENCIES_METHOD)

export function registerRequests(connection: Connection, workspaceState: WorkspaceState) {
connection.onRequest(
getResolvedDependenciesRequestType,
async (params): Promise<GetResolvedDependenciesRequest.ResponseType> => workspaceState.getResolvedDependencies(params.uri),
)
}
3 changes: 3 additions & 0 deletions packages/language-server/src/server.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { createConnection, createServer, createSimpleProject } from '@volar/language-server/node'
import { createNpmxLanguageServicePlugins } from 'npmx-language-service'
import { name, version } from '../package.json' with { type: 'json' }
import { registerRequests } from './request'
import { createWorkspaceState } from './workspace'

export function startServer() {
Expand Down Expand Up @@ -28,4 +29,6 @@ export function startServer() {
server.initialized()
})
connection.onShutdown(server.shutdown)

registerRequests(connection, workspaceState)
}
14 changes: 13 additions & 1 deletion packages/shared/src/protocol.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,23 @@
/* eslint-disable ts/no-namespace */

import type { DependencyInfo, PackageManager } from 'npmx-language-core/workspace'

export const GET_PACKAGE_MANAGER_METHOD = 'npmx/getPackageManager'

export namespace GetPackageManagerRequest {
export interface ParamsType {
uri: string
}
export type ResponseType = 'npm' | 'pnpm' | 'yarn'
export type ResponseType = PackageManager
export type ErrorType = never
}

export const GET_RESOLVED_DEPENDENCIES_METHOD = 'npmx/getResolvedDependencies'

export namespace GetResolvedDependenciesRequest {
export interface ParamsType {
uri: string
}
export type ResponseType = DependencyInfo[] | undefined
export type ErrorType = never
}
6 changes: 0 additions & 6 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading