Skip to content

Commit 500c263

Browse files
authored
Merge branch 'master' into fix-hide-lsp-popup
2 parents 29d9395 + 8eace68 commit 500c263

File tree

8 files changed

+1131
-180
lines changed

8 files changed

+1131
-180
lines changed

.vscode-test.mjs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { defineConfig } from '@vscode/test-cli';
2+
3+
export default defineConfig({
4+
files: 'out/test/**/*.test.js',
5+
workspaceFolder: 'src/test'
6+
});

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## [unreleased]
44

5+
- Update vscode-languageclient to support debugger inline values
56
- Do not popup warning dialog on LSP errors
67

78
## [1.6.0] - 2024-12-05

package-lock.json

Lines changed: 1045 additions & 114 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"eslint": "eslint \"src/**/*.ts\"",
2525
"prettier": "prettier \"**/{*.json,*.yml,.*.yml,*.ts,.prettierrc,*.md}\" --write --list-different",
2626
"prettier-check": "npm run prettier -- --write=false",
27-
"test": "node ./out/test/runTests.js"
27+
"test": "vscode-test"
2828
},
2929
"activationEvents": [
3030
"onLanguage:php",
@@ -141,10 +141,11 @@
141141
"@types/vscode": "^1.61.0",
142142
"@typescript-eslint/eslint-plugin": "^8.0.0",
143143
"@typescript-eslint/parser": "^8.0.0",
144+
"@vscode/test-cli": "^0.0.10",
144145
"@vscode/test-electron": "^2.1.3",
145146
"@vscode/vsce": "^3.0.0",
146147
"eslint": "^8.51.0",
147-
"eslint-config-prettier": "^9.0.0",
148+
"eslint-config-prettier": "^10.0.0",
148149
"eslint-plugin-jsdoc": "^50.0.0",
149150
"glob": "^11.0.0",
150151
"mocha": "^11.0.0",
@@ -157,7 +158,7 @@
157158
"typescript": "^5.0.0"
158159
},
159160
"dependencies": {
160-
"vscode-languageclient": "^6.1.3"
161+
"vscode-languageclient": "^9.0"
161162
},
162163
"repository": {
163164
"type": "git",

src/extension.ts

Lines changed: 74 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ import {
44
LanguageClientOptions,
55
StreamInfo,
66
RevealOutputChannelOn,
7-
} from 'vscode-languageclient'
7+
} from 'vscode-languageclient/node'
88
import { EvaluatableExpressionRequest } from './protocol'
99

10+
import { spawn } from 'child_process'
11+
1012
import * as vscode from 'vscode'
1113
import { join } from 'path'
1214
import * as net from 'net'
@@ -29,7 +31,7 @@ interface PhpactorConfig {
2931
launchServerArgs: string[]
3032
}
3133

32-
export function activate(context: vscode.ExtensionContext): void {
34+
export async function activate(context: vscode.ExtensionContext): Promise<void> {
3335
if (!checkPlatform()) {
3436
return
3537
}
@@ -56,7 +58,7 @@ export function activate(context: vscode.ExtensionContext): void {
5658
if (enable === false) return
5759

5860
languageClient = createClient(config)
59-
languageClient.start()
61+
await languageClient.start()
6062

6163
context.subscriptions.push(
6264
vscode.languages.registerEvaluatableExpressionProvider('php', {
@@ -98,7 +100,10 @@ function checkPlatform(): boolean {
98100

99101
function getServerOptions(config: PhpactorConfig): ServerOptions {
100102
let serverOptions
101-
if (!config.remote.enabled) {
103+
if (!config.remote.enabled && process.platform === 'win32') {
104+
// PHP on windows has problems with STDIO so we need special handling
105+
serverOptions = getWindowsServerOptions(config)
106+
} else if (!config.remote.enabled) {
102107
// launch language server via stdio
103108
serverOptions = <ServerOptions>{
104109
run: {
@@ -139,6 +144,71 @@ function getServerOptions(config: PhpactorConfig): ServerOptions {
139144
return serverOptions
140145
}
141146

147+
function getWindowsServerOptions(config: PhpactorConfig): ServerOptions {
148+
// Find a free port, start PHPActor and connect to it
149+
const serverOptions = async () => {
150+
const findPort = new Promise<number>(resolve => {
151+
const server = net.createServer()
152+
server.listen(0, '127.0.0.1', () => {
153+
const freePort = (server.address()! as net.AddressInfo).port
154+
server.close()
155+
resolve(freePort)
156+
})
157+
})
158+
159+
const freePort = await findPort
160+
161+
const startServer = new Promise<void>((resolve, reject) => {
162+
const childProcess = spawn(
163+
config.executablePath,
164+
[config.path, 'language-server', `--address=127.0.0.1:${freePort}`, ...config.launchServerArgs],
165+
166+
{
167+
env: {
168+
...process.env,
169+
XDEBUG_MODE: 'debug',
170+
PHPACTOR_ALLOW_XDEBUG: '1',
171+
},
172+
}
173+
)
174+
175+
childProcess.stderr.on('data', (chunk: Buffer) => {
176+
const str = chunk.toString()
177+
languageClient.outputChannel.appendLine(str)
178+
179+
// when we get the first line, the server is running
180+
resolve()
181+
})
182+
childProcess.on('exit', (code, signal) => {
183+
languageClient.outputChannel.appendLine(
184+
`Language server exited ` + (signal ? `from signal ${signal}` : `with exit code ${code}`)
185+
)
186+
if (code !== 0) {
187+
languageClient.outputChannel.show()
188+
}
189+
190+
reject(new Error('Language Server exited'))
191+
})
192+
})
193+
194+
await startServer
195+
196+
const socket = net.connect({
197+
host: '127.0.0.1',
198+
port: freePort,
199+
})
200+
201+
const result = <StreamInfo>{
202+
writer: socket,
203+
reader: socket,
204+
}
205+
206+
return result
207+
}
208+
209+
return serverOptions
210+
}
211+
142212
function createClient(config: PhpactorConfig): LanguageClient {
143213
const serverOptions = getServerOptions(config)
144214

src/protocol.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
/* eslint @typescript-eslint/no-namespace: 0 */
33
import { Range } from 'vscode'
44
// import { Range } from 'vscode-languageserver-types'
5-
import { ProtocolRequestType } from 'vscode-languageserver-protocol/lib/messages'
5+
import { ProtocolRequestType } from 'vscode-languageserver-protocol/lib/common/messages'
66
import {
77
TextDocumentPositionParams,
88
TextDocumentRegistrationOptions,

src/test/runTests.ts

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/test/suite/index.ts

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)