64 lines
1.7 KiB
Markdown
64 lines
1.7 KiB
Markdown
---
|
||
tags: maturity/beta
|
||
references:
|
||
- client/space_lua/parse.ts
|
||
- client/space_lua/runtime.ts
|
||
---
|
||
|
||
Some coding conventions for [[Space Lua]]. Work in progress.
|
||
|
||
# Indentation
|
||
Use 2 spaces for indentation.
|
||
|
||
# Variable naming
|
||
For variables and methods alike use camelCasing as opposed to snake_case. That is: `myVariable` and `myFunction` instead of `my_variable` and `my_function`.
|
||
|
||
# Name spacing
|
||
Since Space Lua has a single global namespace across your entire space, it is good practice to manually namespace functions using the following pattern:
|
||
|
||
```lua
|
||
-- This initializes the stuff variable with an empty table if it's not already defined
|
||
stuff = stuff or {}
|
||
|
||
function stuff.adder(a, b)
|
||
return a + b
|
||
end
|
||
```
|
||
|
||
And to use `local` if you don’t need to access outside your code block:
|
||
|
||
```lua
|
||
local myVariable
|
||
|
||
local function myFunction()
|
||
|
||
end
|
||
```
|
||
|
||
## Use singular top-level namespaces for APIs
|
||
Such as [[API/widget]], [[API/tag]].
|
||
|
||
## Use plural namespaces for collections
|
||
Such as [[^Library/Std/Widgets/Widgets|widgets]].
|
||
|
||
# API naming conventions
|
||
## *.define
|
||
This is a common Space Lua API naming convention used to define new entities of some type globally. Such APIs typically take a single table with arguments as an argument.
|
||
|
||
Internally, these APIs typically update the [[API/config]] as a side effect, which is then read elsewhere.
|
||
|
||
Examples:
|
||
* [[API/tag#tag.define(spec)]]
|
||
* [[API/taskState#taskState.define(def)]]
|
||
* [[API/config#config.define(key, schema)]]
|
||
* [[API/slashCommand#slashCommand.define(spec)]]
|
||
* [[^Library/Std/APIs/Command#command.define(commandDef)]]
|
||
|
||
## *.new
|
||
These like constructors for objects and do not have side effects.
|
||
|
||
Examples:
|
||
|
||
[[API/widget#widget.new(spec)]]
|
||
|