Add documentation

This commit is contained in:
Michael Howell 2022-06-27 11:07:16 -07:00
parent 5deb396630
commit 8081096a7f
2 changed files with 87 additions and 1 deletions

View file

@ -81,3 +81,56 @@ let ResultsTable;
* }}
*/
let Results;
/**
* A pair of [inputs, outputs], or 0 for null. This is gets stored in the search index.
* The JavaScript deserializes this into FunctionSearchType.
*
* An input or output can be encoded as just a number if there is only one of them, AND
* it has no generics. The no generics rule exists to avoid ambiguity: imagine if you had
* a function with a single output, and that output had a single generic:
*
* fn something() -> Result<usize, usize>
*
* If output was allowed to be any RawFunctionType, it would look like this
*
* [[], [50, [3, 3]]]
*
* The problem is that the above output could be interpreted as either a type with ID 50 and two
* generics, or it could be interpreted as a pair of types, the first one with ID 50 and the second
* with ID 3 and a single generic parameter that is also ID 3. We avoid this ambiguity by choosing
* in favor of the pair of types interpretation. This is why the `(number|Array<RawFunctionType>)`
* is used instead of `(RawFunctionType|Array<RawFunctionType>)`.
*
* @typedef {(
* 0 |
* [(number|Array<RawFunctionType>)] |
* [(number|Array<RawFunctionType>), (number|Array<RawFunctionType>)]
* )}
*/
let RawFunctionSearchType;
/**
* A single function input or output type. This is either a single path ID, or a pair of
* [path ID, generics].
*
* @typedef {number | [number, Array<RawFunctionType>]}
*/
let RawFunctionType;
/**
* @typedef {{
* inputs: Array<FunctionType>,
* outputs: Array<FunctionType>,
* }}
*/
let FunctionSearchType;
/**
* @typedef {{
* name: (null|string),
* ty: (null|number),
* generics: Array<FunctionType>,
* }}
*/
let FunctionType;