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
39 changes: 18 additions & 21 deletions data/dev/sl-lua-defs.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,27 +35,6 @@
"name": "number"
}
},
{
"name": "DetectedEvent",
"definition": {
"kind": "table",
"properties": [
{
"name": "valid",
"type": "boolean"
},
{
"name": "index",
"type": "number"
},
{
"name": "can_change_damage",
"type": "boolean"
}
],
"methods": [ ]
}
},
{
"name": "DetectedEventName",
"definition": {
Expand Down Expand Up @@ -538,6 +517,24 @@
"comment": "negate a vector"
}
]
},
{
"name": "DetectedEvent",
"properties": [
{
"name": "valid",
"type": "boolean"
},
{
"name": "index",
"type": "number"
},
{
"name": "can_change_damage",
"type": "boolean"
}
],
"methods": [ ]
}
],
"globalVariables": [
Expand Down
39 changes: 18 additions & 21 deletions data/syntax_def_default.json
Original file line number Diff line number Diff line change
Expand Up @@ -15385,6 +15385,24 @@
"type": "number"
}
]
},
{
"methods": [],
"properties": [
{
"name": "valid",
"type": "boolean"
},
{
"name": "index",
"type": "number"
},
{
"name": "can_change_damage",
"type": "boolean"
}
],
"name": "DetectedEvent"
}
],
"globalFunctions": [
Expand Down Expand Up @@ -16091,27 +16109,6 @@
},
"name": "lljson_constant"
},
{
"definition": {
"kind": "table",
"methods": [],
"properties": [
{
"name": "valid",
"type": "boolean"
},
{
"name": "index",
"type": "number"
},
{
"name": "can_change_damage",
"type": "boolean"
}
]
},
"name": "DetectedEvent"
},
{
"definition": {
"kind": "literal-union",
Expand Down
18 changes: 12 additions & 6 deletions src/shared/languagetransformer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* Copyright (C) 2025, Linden Research, Inc.
*/
import { LSLFunction, LSLKeywords } from './lslkeywords';
import { ConstantDeclaration, FunctionSignature, LiteralUnionType, LuaTypeDefinitions, ModuleDeclaration, Parameter, TableType, TypeAlias } from './luadefsinterface';
import { ClassDeclaration, ConstantDeclaration, FunctionSignature, LiteralUnionType, LuaTypeDefinitions, ModuleDeclaration, Parameter, TableType, TypeAlias } from './luadefsinterface';

Check warning on line 6 in src/shared/languagetransformer.ts

View workflow job for this annotation

GitHub Actions / test (24.x)

'TableType' is defined but never used

export class LanguageTransformer {
public static processCombinedDefinitions(lslDefs: LSLKeywords, luaDefs: LuaTypeDefinitions): void {
Expand All @@ -22,19 +22,18 @@
}

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

if (!lslDefs.functions) {
return;
}

if (detected_event) {
let def = detected_event.definition as TableType;
if (!def.methods) {
def.methods = [];
if (!detected_event.methods) {
detected_event.methods = [];
}
}
const detected_methods = detected_event ? (detected_event.definition as TableType).methods : undefined;
const detected_methods = detected_event ? detected_event.methods : undefined;

let ll_module: ModuleDeclaration = {
name: "ll",
Expand Down Expand Up @@ -189,6 +188,13 @@
return luaDefs.typeAliases.find((alias) => alias.name === name);
}

private static findClass(luaDefs: LuaTypeDefinitions, name:string) : ClassDeclaration | undefined {
if(!luaDefs.classes) {
return undefined;
}
return luaDefs.classes.find((cls) => cls.name === name);
}

private static isDetectedFunction(lslFunc: string): boolean {
return (lslFunc === "llAdjustDamage" || lslFunc.startsWith("llDetected"));
}
Expand Down
2 changes: 1 addition & 1 deletion src/shared/luadefsgenerator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ export class LuauDefsGenerator {
private generateClasses(classes: ClassDeclaration[]): string {
return classes.map(cls => {
const lines: string[] = [];
lines.push(`declare class ${cls.name}`);
lines.push(`declare extern type ${cls.name} with`);

// Properties
if (cls.properties && cls.properties.length > 0) {
Expand Down
8 changes: 4 additions & 4 deletions src/test/suite/selene-config.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -224,8 +224,8 @@ suite('LuauDefsGenerator and DocsJsonGenerator Tests', () => {
const generator = new LuauDefsGenerator();
const result = generator.generate(defs);

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

assert.ok(result.includes('declare class TestClass'), 'Should generate TestClass');
assert.ok(result.includes('declare extern type TestClass with'), 'Should generate TestClass');
assert.ok(result.includes('overloadedMethod'), 'Should include overloaded method');
});

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

// Should have all categories
assert.ok(result.includes('type numeric ='), 'Should have alias');
assert.ok(result.includes('declare class Vector'), 'Should have class');
assert.ok(result.includes('declare extern type Vector with'), 'Should have class');
assert.ok(result.includes('declare math:'), 'Should have module');
assert.ok(result.includes('declare function globalHelper'), 'Should have global function');
assert.ok(result.includes('declare MAX_VALUE'), 'Should have constant');
Expand Down
Loading