Skip to content

Commit 1c9c320

Browse files
authored
Merge pull request #4 from WolfGangS/bugfix/detected-event-as-extern
Switch from class to extern syntax for luau-lsp defs and move DetecteEvent
2 parents cba0486 + 965dfad commit 1c9c320

File tree

5 files changed

+53
-53
lines changed

5 files changed

+53
-53
lines changed

data/dev/sl-lua-defs.json

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -35,27 +35,6 @@
3535
"name": "number"
3636
}
3737
},
38-
{
39-
"name": "DetectedEvent",
40-
"definition": {
41-
"kind": "table",
42-
"properties": [
43-
{
44-
"name": "valid",
45-
"type": "boolean"
46-
},
47-
{
48-
"name": "index",
49-
"type": "number"
50-
},
51-
{
52-
"name": "can_change_damage",
53-
"type": "boolean"
54-
}
55-
],
56-
"methods": [ ]
57-
}
58-
},
5938
{
6039
"name": "DetectedEventName",
6140
"definition": {
@@ -538,6 +517,24 @@
538517
"comment": "negate a vector"
539518
}
540519
]
520+
},
521+
{
522+
"name": "DetectedEvent",
523+
"properties": [
524+
{
525+
"name": "valid",
526+
"type": "boolean"
527+
},
528+
{
529+
"name": "index",
530+
"type": "number"
531+
},
532+
{
533+
"name": "can_change_damage",
534+
"type": "boolean"
535+
}
536+
],
537+
"methods": [ ]
541538
}
542539
],
543540
"globalVariables": [

data/syntax_def_default.json

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15385,6 +15385,24 @@
1538515385
"type": "number"
1538615386
}
1538715387
]
15388+
},
15389+
{
15390+
"methods": [],
15391+
"properties": [
15392+
{
15393+
"name": "valid",
15394+
"type": "boolean"
15395+
},
15396+
{
15397+
"name": "index",
15398+
"type": "number"
15399+
},
15400+
{
15401+
"name": "can_change_damage",
15402+
"type": "boolean"
15403+
}
15404+
],
15405+
"name": "DetectedEvent"
1538815406
}
1538915407
],
1539015408
"globalFunctions": [
@@ -16091,27 +16109,6 @@
1609116109
},
1609216110
"name": "lljson_constant"
1609316111
},
16094-
{
16095-
"definition": {
16096-
"kind": "table",
16097-
"methods": [],
16098-
"properties": [
16099-
{
16100-
"name": "valid",
16101-
"type": "boolean"
16102-
},
16103-
{
16104-
"name": "index",
16105-
"type": "number"
16106-
},
16107-
{
16108-
"name": "can_change_damage",
16109-
"type": "boolean"
16110-
}
16111-
]
16112-
},
16113-
"name": "DetectedEvent"
16114-
},
1611516112
{
1611616113
"definition": {
1611716114
"kind": "literal-union",

src/shared/languagetransformer.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Copyright (C) 2025, Linden Research, Inc.
44
*/
55
import { LSLFunction, LSLKeywords } from './lslkeywords';
6-
import { ConstantDeclaration, FunctionSignature, LiteralUnionType, LuaTypeDefinitions, ModuleDeclaration, Parameter, TableType, TypeAlias } from './luadefsinterface';
6+
import { ClassDeclaration, ConstantDeclaration, FunctionSignature, LiteralUnionType, LuaTypeDefinitions, ModuleDeclaration, Parameter, TableType, TypeAlias } from './luadefsinterface';
77

88
export class LanguageTransformer {
99
public static processCombinedDefinitions(lslDefs: LSLKeywords, luaDefs: LuaTypeDefinitions): void {
@@ -22,19 +22,18 @@ export class LanguageTransformer {
2222
}
2323

2424
private static processFunctions(lslDefs: LSLKeywords, luaDefs: LuaTypeDefinitions): void {
25-
const detected_event = LanguageTransformer.findTypeAlias(luaDefs, "DetectedEvent");
25+
const detected_event = LanguageTransformer.findClass(luaDefs, "DetectedEvent");
2626

2727
if (!lslDefs.functions) {
2828
return;
2929
}
3030

3131
if (detected_event) {
32-
let def = detected_event.definition as TableType;
33-
if (!def.methods) {
34-
def.methods = [];
32+
if (!detected_event.methods) {
33+
detected_event.methods = [];
3534
}
3635
}
37-
const detected_methods = detected_event ? (detected_event.definition as TableType).methods : undefined;
36+
const detected_methods = detected_event ? detected_event.methods : undefined;
3837

3938
let ll_module: ModuleDeclaration = {
4039
name: "ll",
@@ -189,6 +188,13 @@ export class LanguageTransformer {
189188
return luaDefs.typeAliases.find((alias) => alias.name === name);
190189
}
191190

191+
private static findClass(luaDefs: LuaTypeDefinitions, name:string) : ClassDeclaration | undefined {
192+
if(!luaDefs.classes) {
193+
return undefined;
194+
}
195+
return luaDefs.classes.find((cls) => cls.name === name);
196+
}
197+
192198
private static isDetectedFunction(lslFunc: string): boolean {
193199
return (lslFunc === "llAdjustDamage" || lslFunc.startsWith("llDetected"));
194200
}

src/shared/luadefsgenerator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ export class LuauDefsGenerator {
251251
private generateClasses(classes: ClassDeclaration[]): string {
252252
return classes.map(cls => {
253253
const lines: string[] = [];
254-
lines.push(`declare class ${cls.name}`);
254+
lines.push(`declare extern type ${cls.name} with`);
255255

256256
// Properties
257257
if (cls.properties && cls.properties.length > 0) {

src/test/suite/selene-config.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,8 @@ suite('LuauDefsGenerator and DocsJsonGenerator Tests', () => {
224224
const generator = new LuauDefsGenerator();
225225
const result = generator.generate(defs);
226226

227-
assert.ok(result.includes('declare class integer'), 'Should generate integer class');
228-
assert.ok(result.includes('declare class vector'), 'Should generate vector class');
227+
assert.ok(result.includes('declare extern type integer with'), 'Should generate integer class');
228+
assert.ok(result.includes('declare extern type vector with'), 'Should generate vector class');
229229
assert.ok(result.includes('__add'), 'Should generate operator methods');
230230
assert.ok(result.includes('x') && result.includes('number'), 'Should generate x property');
231231
assert.ok(result.includes('y') && result.includes('number'), 'Should generate y property');
@@ -405,7 +405,7 @@ suite('LuauDefsGenerator and DocsJsonGenerator Tests', () => {
405405
const generator = new LuauDefsGenerator();
406406
const result = generator.generate(defs);
407407

408-
assert.ok(result.includes('declare class TestClass'), 'Should generate TestClass');
408+
assert.ok(result.includes('declare extern type TestClass with'), 'Should generate TestClass');
409409
assert.ok(result.includes('overloadedMethod'), 'Should include overloaded method');
410410
});
411411

@@ -476,7 +476,7 @@ suite('LuauDefsGenerator and DocsJsonGenerator Tests', () => {
476476

477477
// Should have all categories
478478
assert.ok(result.includes('type numeric ='), 'Should have alias');
479-
assert.ok(result.includes('declare class Vector'), 'Should have class');
479+
assert.ok(result.includes('declare extern type Vector with'), 'Should have class');
480480
assert.ok(result.includes('declare math:'), 'Should have module');
481481
assert.ok(result.includes('declare function globalHelper'), 'Should have global function');
482482
assert.ok(result.includes('declare MAX_VALUE'), 'Should have constant');

0 commit comments

Comments
 (0)