Skip to content

Commit 07aaf1a

Browse files
committed
[ fix ] Ensure WASM ALS config replies include commandLineOptions
1 parent b34a0f3 commit 07aaf1a

File tree

4 files changed

+81
-1
lines changed

4 files changed

+81
-1
lines changed

lib/js/src/Connection/Protocol/Connection__Protocol__LSP.bs.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/js/src/Connection/Protocol/Connection__Protocol__LSP__Binding.bs.js

Lines changed: 40 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Connection/Protocol/Connection__Protocol__LSP.res

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,8 @@ module Module: Module = {
158158
)
159159
}
160160

161+
clientOptions->Binding.LanguageClientOptions.setConfigurationMiddleware
162+
161163
// Create the language client
162164
let languageClient = Binding.LanguageClient.make(id, name, serverOptions, clientOptions)
163165

src/Connection/Protocol/Connection__Protocol__LSP__Binding.res

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,44 @@ module LanguageClientOptions = {
127127
uriConverters: uriConverters
128128
}
129129
}")
130+
131+
let setConfigurationMiddleware: t => unit = %raw("function (options) {
132+
if (!options || typeof options !== 'object') {
133+
return;
134+
}
135+
136+
const safeArray = (value) => Array.isArray(value) ? value.filter((item) => typeof item === 'string') : [];
137+
138+
const readCommandLineOptions = () => {
139+
try {
140+
const vscode = require('vscode');
141+
const config = vscode.workspace.getConfiguration('agdaMode');
142+
const raw = config.get('connection.commandLineOptions');
143+
if (typeof raw === 'string') {
144+
return raw.trim().length === 0 ? [] : raw.trim().split(/\s+/);
145+
}
146+
if (Array.isArray(raw)) {
147+
return safeArray(raw);
148+
}
149+
} catch (_) {
150+
// ignore and fall back to empty array
151+
}
152+
return [];
153+
};
154+
155+
const createPayload = () => ({ commandLineOptions: readCommandLineOptions() });
156+
157+
options.middleware = options.middleware || {};
158+
options.middleware.workspace = options.middleware.workspace || {};
159+
options.middleware.workspace.configuration = (params) => {
160+
const count = params && Array.isArray(params.items) ? params.items.length : 1;
161+
const results = [];
162+
for (let i = 0; i < count; i += 1) {
163+
results.push(createPayload());
164+
}
165+
return Promise.resolve(results);
166+
};
167+
}")
130168
}
131169

132170
type executableOptions = {

0 commit comments

Comments
 (0)