love-api-experiments

This is an experimental fork of love-api.

It has a similar structure to the original with the following changes:

extra.lua returns a function that the API table can be passed to.

api = require('extra')(require('love_api'))

It makes the following changes:

serialize.lua takes the “extra” table and saves the original table files to disk.

require('serialize')(require('extra')(require('love_api')))

Example: function synopsis list

api = require('extra')(require('love-api.love-api'))

table.sort(api.variants, function(a, b) return a.function_.fullname < b.function_.fullname end)

local s = ''

for _, variant in ipairs(api.variants) do
    local function getList(t)
        local s = ''

        for i, a in ipairs(t) do
            s = s..a.name

            if a.default then
                s = s..' ['..a.default..']'
            end

            if i ~= #t then
                s = s..', '
            end
        end

        return s
    end

    if #variant.returns > 0 then
        s = s..getList(variant.returns)..' = '
    end

    s = s..variant.function_.fullname..'('

    if #variant.arguments > 0 then
        s = s..getList(variant.arguments)
    end

    s = s..')\n'
end

print(s)

Table structure

--[[
return {
    version = '0.10.2',
    modules = {
        {
            name = 'modulename',
            fullname = 'love.modulename', -- or 'love'
            prefix = 'love.' -- or '' for 'love'

            description = 'Description.',
            descriptiont = {},
            minidescription = 'Description.',
            minidescriptiont = {},

            types = {},
            functions = {},
            enums = {},

            what = 'module',
            id = 'love_modulename',
        }
    },

    byfullname = {}, -- Indexed by 'fullname' key
    byid = {}, -- Index by 'id' key
    everything = {}, -- Every table with a 'what' key
    allfullnames = {}, -- modules, functions, methods, callbacks, types, enums
    allfunctions = {}, -- functions, methods, callbacks
    noncallbackfunctions = {}, -- functions, methods
    functions = {},
    methods = {},
    callbacks = {},
    types = {},
    enums = {},
    arguments = {},
    returns = {},
    tables = {},
}

enums = {
    {
        name = 'EnumName',
        fullname = name,

        description = 'Description.',
        descriptiont = {},
        minidescription = 'Description.',
        minidescriptiont = {},

        constants = {
            {
                name = 'constantname',
                description = 'Description.',
                descriptiont = {}
                minidescription = 'Description.',
                minidescriptiont = {}

                what = 'constant'
                id = 'EnumName1',
                module = moduleTable,
                enum = enumTable,
            }
        }

        what = 'enum',
        id = 'EnumName',
        module = moduleTable,
    }
}

types = {
    {
        name = 'TypeName',
        fullname = name,

        description = 'Description.',
        descriptiont = {},
        minidescription = 'Description.',
        minidescriptiont = {},

        functions = {},

        parenttype = 'Parenttype' -- Optional
        supertypes = {
            SupertypeTable,
        },
        subtypes = {
            SubtypeTable,
        }
        constructors = {
            newTypeNameTable,
        },

        what = 'type',
        id = 'TypeName',
        module = moduleTable,
    }
}

functions = {
    {
        name = 'functionName',
        fullname = 'love.module.functionName',
        prefix = 'love.module.',

        description = 'Description.',
        descriptiont = {},
        minidescription = 'Description.',
        minidescriptiont = {},

        setter = setterTable, -- Optional
        getter = getterTable, -- Optional
        constructs = typeTable, -- Optional

        variants = {
            {
                description = 'Description.', -- Optional
                descriptiont = {},

                returns = {},
                arguments = {},

                what = 'variant',
                id = 'love_module_functionName_rb_ast',
                module = moduleTable,
                function_ = functionTable,
                type_ = typeTable,
            }
        }

        what = 'function', -- or 'method' or 'callback'
        id = 'love_module_functionName',
        module = moduleTable,
        type_ = typeTable,
    }
}

returns = { -- or arguments
    {
        type = 'type',
        name = 'name',
        default = 'default argument', -- If argument and not return

        description = 'Description.',
        descriptiont = {},

        table = { -- If type is 'table'
            {
                type = 'string',
                name = 'name',
                default = 'default argument', -- If argument and not return

                description = 'Description.',
                descriptiont = {},

                what = 'returntable', -- or 'argumenttable'
                id = 'love_module_functionName_rb_ast_a2_t1',
                module = moduleTable,
                type_ = typeTable,
                function_ = functionTable,
                variant = variantTable,
                value = returnTable, -- or argumentTable
            },
        }

        what = 'return', -- or 'argument'
        id = 'love_module_functionName_rb_ast_r1',
        module = moduleTable,
        type_ = typeTable,
        function_ = functionTable,
        variant = variantTable,
    }
}