Skip to content

Commit 953e3bc

Browse files
authored
Receive defines from haxe on server start (#145)
* Receive defines from haxe on server start * Update haxe version and add reserved flag * Reserved does not need to be null safe * Set defines to null (default) on server start
1 parent 51c4f8e commit 953e3bc

File tree

4 files changed

+42
-3
lines changed

4 files changed

+42
-3
lines changed

.github/workflows/main-vanilla.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
# TODO: fix tests on windows and enable again
1111
# os: [ubuntu-latest, macos-13, windows-latest]
1212
os: [ubuntu-latest, macos-13]
13-
haxe: [latest, "5.0.0-preview.1"]
13+
haxe: [latest, "2025-08-04_development_8d19bc5"]
1414
runs-on: ${{ matrix.os }}
1515
steps:
1616
- uses: actions/checkout@v2

.haxerc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"version": "5.0.0-preview.1",
2+
"version": "8d19bc5",
33
"resolveLibs": "scoped"
44
}

src/haxeLanguageServer/Context.hx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,15 @@ class Context {
333333
displayOffsetConverter = DisplayOffsetConverter.create(haxeServer.haxeVersion);
334334
handleRegistration(DisplayMethods.GotoTypeDefinition, TypeDefinitionRequest.type, {documentSelector: haxeSelector});
335335
handleRegistration(DisplayMethods.GotoImplementation, ImplementationRequest.type, {documentSelector: haxeSelector});
336+
haxeLanguageServer.features.hxml.data.Defines.setDefines(null);
337+
if (haxeServer.haxeVersion.major >= 5) {
338+
callHaxeMethod(DisplayMethods.Defines, {compiler: true, user: true}, null, function(defines) {
339+
haxeLanguageServer.features.hxml.data.Defines.setDefines(defines);
340+
return null;
341+
}, function(error) {
342+
trace("Error when getting defines " + error);
343+
});
344+
}
336345
}
337346

338347
function handleRegistration<HP, HR, P, R, PR, E, RO>(displayMethod:HaxeRequestMethod<HP, HR>, lspMethod:ProtocolRequestType<P, R, PR, E, RO>,

src/haxeLanguageServer/features/hxml/data/Defines.hx

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,8 +346,38 @@ private final DefineEnums:Map<String, EnumValues> = [
346346
"MessageLogFormat" => [{name: "classic"}, {name: "pretty"}, {name: "indent"}],
347347
];
348348

349+
private var allDefines:Null<Array<DefineData>>;
350+
351+
function setDefines(defines:Null<Array<haxe.display.Display.Define>>) {
352+
if (defines == null) {
353+
allDefines = null;
354+
return;
355+
}
356+
function defToName(define:String) {
357+
var parts = define.replace("-", "_").split("_");
358+
for (i in 0...parts.length) {
359+
parts[i] = parts[i].capitalize();
360+
}
361+
return parts.join("");
362+
}
363+
allDefines = [];
364+
for (d in defines) {
365+
allDefines.push({
366+
name: defToName(d.name),
367+
define: d.name,
368+
doc: d.doc.or(""),
369+
platforms: [for (pl in d.platforms) '$pl'],
370+
params: d.parameters.length == 0 ? null : d.parameters,
371+
links: d.links,
372+
reserved: d.reserved,
373+
origin: d.origin,
374+
});
375+
}
376+
}
377+
349378
function getDefines(includeReserved:Bool):ReadOnlyArray<Define> {
350-
final allDefines = Defines.concat(RemovedDefines.copy());
379+
if (allDefines == null)
380+
allDefines = Defines.concat(RemovedDefines.copy());
351381
return if (includeReserved) allDefines else allDefines.filter(define -> define.reserved != true);
352382
}
353383

0 commit comments

Comments
 (0)