Skip to content

Commit b9d5974

Browse files
committed
Fix expression documentation not displaying parameters
1 parent 74a1e11 commit b9d5974

File tree

4 files changed

+84
-43
lines changed

4 files changed

+84
-43
lines changed

GDevelop.js/scripts/generate-dts.mjs

+1
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ const extraClassAttributes = {
7979
'static Hidden = 2;',
8080
],
8181
ObjectJsImplementation: ['content: Record<string, any>;'],
82+
VectorString: ['toJSArray(): Array<string>;'],
8283
};
8384

8485
const PrimitiveTypes = new Map([

GDevelop.js/types.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ export class VectorString extends EmscriptenObject {
115115
at(index: number): string;
116116
set(index: number, str: string): void;
117117
clear(): void;
118+
toJSArray(): Array<string>;
118119
}
119120

120121
export class VectorPlatformExtension extends EmscriptenObject {

newIDE/app/scripts/lib/ExtensionReferenceGenerator.js

+55-42
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ const { generateReadMoreLink } = require('./WikiHelpLink');
44

55
// Types definitions used in this script:
66

7+
/** @typedef {import('../../../../GDevelop.js/types').PlatformExtension} PlatformExtension */
8+
/** @typedef {import('../../../../GDevelop.js/types').MapStringExpressionMetadata} MapStringExpressionMetadata */
9+
/** @typedef {import('../../../../GDevelop.js/types').ExpressionMetadata} ExpressionMetadata */
10+
/** @typedef {import('../../../../GDevelop.js/types').ObjectMetadata} ObjectMetadata */
11+
/** @typedef {import('../../../../GDevelop.js/types').BehaviorMetadata} BehaviorMetadata */
12+
713
/**
814
* @typedef {Object} RawText A text to be shown on a page
915
* @prop {string} text The text to render (in Markdown/Dokuwiki syntax)
@@ -17,23 +23,23 @@ const { generateReadMoreLink } = require('./WikiHelpLink');
1723

1824
/**
1925
* @typedef {Object} ObjectReference
20-
* @prop {any} objectMetadata The object.
26+
* @prop {ObjectMetadata} objectMetadata The object.
2127
* @prop {Array<ReferenceText>} actionsReferenceTexts Reference texts for the object actions.
2228
* @prop {Array<ReferenceText>} conditionsReferenceTexts Reference texts for the object conditions.
2329
* @prop {Array<ReferenceText>} expressionsReferenceTexts Reference texts for the object expressions.
2430
*/
2531

2632
/**
2733
* @typedef {Object} BehaviorReference
28-
* @prop {any} behaviorMetadata The behavior.
34+
* @prop {BehaviorMetadata} behaviorMetadata The behavior.
2935
* @prop {Array<ReferenceText>} actionsReferenceTexts Reference texts for the behavior actions.
3036
* @prop {Array<ReferenceText>} conditionsReferenceTexts Reference texts for the behavior conditions.
3137
* @prop {Array<ReferenceText>} expressionsReferenceTexts Reference texts for the behavior expressions.
3238
*/
3339

3440
/**
3541
* @typedef {Object} ExtensionReference
36-
* @prop {any} extension The extension.
42+
* @prop {PlatformExtension} extension The extension.
3743
* @prop {Array<ReferenceText>} freeExpressionsReferenceTexts Reference texts for free expressions.
3844
* @prop {Array<ReferenceText>} freeActionsReferenceTexts Reference texts for free actions.
3945
* @prop {Array<ReferenceText>} freeConditionsReferenceTexts Reference texts for free conditions.
@@ -252,7 +258,10 @@ const generateInstructionReferenceRowsText = ({
252258
};
253259
};
254260

255-
/** @returns {ReferenceText} */
261+
/**
262+
* @param {{ expressionType: string, expressionMetadata: ExpressionMetadata, objectMetadata?: ObjectMetadata, behaviorMetadata?: BehaviorMetadata }} options
263+
* @returns {ReferenceText}
264+
*/
256265
const generateExpressionReferenceRowsText = ({
257266
expressionType,
258267
expressionMetadata,
@@ -261,11 +270,13 @@ const generateExpressionReferenceRowsText = ({
261270
}) => {
262271
let parameterRows = [];
263272
let parameterStrings = [];
264-
mapFor(0, expressionMetadata.getParameters(), index => {
273+
mapFor(0, expressionMetadata.getParameters().getParametersCount(), index => {
265274
if ((!!objectMetadata && index < 1) || (!!behaviorMetadata && index < 2)) {
266275
return; // Skip the first (or first twos) parameters by convention.
267276
}
268-
const parameterMetadata = expressionMetadata.getParameter(index);
277+
const parameterMetadata = expressionMetadata
278+
.getParameters()
279+
.getParameterAt(index);
269280
if (parameterMetadata.isCodeOnly()) return;
270281

271282
const sanitizedDescription = sanitizeExpressionDescription(
@@ -345,7 +356,7 @@ const generateInstructionsReferenceRowsTexts = ({
345356
};
346357

347358
/**
348-
* @param {{ expressionsMetadata?: any, objectMetadata?: any, behaviorMetadata?: any }} metadata
359+
* @param {{ expressionsMetadata: MapStringExpressionMetadata, objectMetadata?: ObjectMetadata, behaviorMetadata?: BehaviorMetadata }} options
349360
* @returns {Array<ReferenceText>}
350361
*/
351362
const generateExpressionsReferenceRowsTexts = ({
@@ -387,7 +398,7 @@ const sortReferenceTexts = (referenceText1, referenceText2) => {
387398
};
388399

389400
/**
390-
* @type {any} platformExtension
401+
* @param {PlatformExtension} extension
391402
* @returns {ExtensionReference}
392403
*/
393404
const generateExtensionReference = extension => {
@@ -401,42 +412,44 @@ const generateExtensionReference = extension => {
401412

402413
// Object expressions
403414
/** @type {Array<ObjectReference>} */
404-
let objectReferences = objectTypes.map(objectType => {
405-
const objectMetadata = extension.getObjectMetadata(objectType);
406-
if (objectMetadata.isPrivate()) {
407-
return null;
408-
}
409-
const actionsReferenceTexts = generateInstructionsReferenceRowsTexts({
410-
areConditions: false,
411-
instructionsMetadata: extension.getAllActionsForObject(objectType),
412-
objectMetadata,
413-
});
414-
const conditionsReferenceTexts = generateInstructionsReferenceRowsTexts({
415-
areConditions: true,
416-
instructionsMetadata: extension.getAllConditionsForObject(objectType),
417-
objectMetadata,
418-
});
419-
const expressionsReferenceTexts = [
420-
...generateExpressionsReferenceRowsTexts({
421-
expressionsMetadata: extension.getAllExpressionsForObject(objectType),
415+
let objectReferences = objectTypes
416+
.map(objectType => {
417+
const objectMetadata = extension.getObjectMetadata(objectType);
418+
if (objectMetadata.isPrivate()) {
419+
return null;
420+
}
421+
const actionsReferenceTexts = generateInstructionsReferenceRowsTexts({
422+
areConditions: false,
423+
instructionsMetadata: extension.getAllActionsForObject(objectType),
422424
objectMetadata,
423-
}),
424-
...generateExpressionsReferenceRowsTexts({
425-
expressionsMetadata: extension.getAllStrExpressionsForObject(
426-
objectType
427-
),
425+
});
426+
const conditionsReferenceTexts = generateInstructionsReferenceRowsTexts({
427+
areConditions: true,
428+
instructionsMetadata: extension.getAllConditionsForObject(objectType),
428429
objectMetadata,
429-
}),
430-
];
431-
expressionsReferenceTexts.sort(sortReferenceTexts);
432-
433-
return {
434-
objectMetadata,
435-
actionsReferenceTexts,
436-
conditionsReferenceTexts,
437-
expressionsReferenceTexts,
438-
};
439-
}).filter(Boolean);
430+
});
431+
const expressionsReferenceTexts = [
432+
...generateExpressionsReferenceRowsTexts({
433+
expressionsMetadata: extension.getAllExpressionsForObject(objectType),
434+
objectMetadata,
435+
}),
436+
...generateExpressionsReferenceRowsTexts({
437+
expressionsMetadata: extension.getAllStrExpressionsForObject(
438+
objectType
439+
),
440+
objectMetadata,
441+
}),
442+
];
443+
expressionsReferenceTexts.sort(sortReferenceTexts);
444+
445+
return {
446+
objectMetadata,
447+
actionsReferenceTexts,
448+
conditionsReferenceTexts,
449+
expressionsReferenceTexts,
450+
};
451+
})
452+
.filter(Boolean);
440453

441454
// Behavior expressions
442455
/** @type {Array<BehaviorReference>} */

newIDE/app/src/Utils/MapFor.js

+27-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
// @flow
2-
// Note: this file does not use export/imports and use Flow comments to allow its usage from Node.js
2+
// Note: this file does not use export/imports and use Flow comments *and* JS doc to allow its usage
3+
// from both Flow (in the IDE) and TypeScript (in Node.js).
34

5+
/**
6+
* @template T
7+
* @param {number} start
8+
* @param {number} end
9+
* @param {(i: number) => T} func
10+
* @returns {Array<T>}
11+
*/
412
const mapFor = /*:: <T> */ (
513
start /*: number */,
614
end /*: number */,
@@ -13,6 +21,13 @@ const mapFor = /*:: <T> */ (
1321
return result;
1422
};
1523

24+
/**
25+
* @template T
26+
* @param {number} start
27+
* @param {number} end
28+
* @param {(i: number) => T} func
29+
* @returns {Array<T>}
30+
*/
1631
const mapReverseFor = /*:: <T> */ (
1732
start /*: number */,
1833
end /*: number */,
@@ -32,6 +47,17 @@ type CppVector<T> = {
3247
}
3348
*/
3449

50+
/**
51+
* @template T
52+
* @typedef {{size: () => number, at: (i: number) => T}} CppVector
53+
*/
54+
55+
/**
56+
* @template T, U
57+
* @param {CppVector<T>} start
58+
* @param {(item: T, i: number) => U} func
59+
* @returns {Array<U>}
60+
*/
3561
const mapVector = /*:: <T, U> */ (
3662
cppVector /*: CppVector<T> */,
3763
func /*: (T, number) => U */

0 commit comments

Comments
 (0)