Skip to main content

VS Code Snippets

VS Code snippets allow you to quickly scaffold services, controllers, and other common Knit patterns. No extensions or plugins are required.

Snippets

Setup

  1. In VS Code, navigate to File > Preferences > User Snippets.
  2. Type and select lua.json.
  3. Add any of the snippets below inside the {} braces.
  4. Save the file.
  5. In your source files, type a prefix (e.g., knit) and select the autocomplete suggestion.

Snippets

Knit Require

Inserts a require statement for Knit.

Snippet
"Knit": {
"prefix": ["knit"],
"body": ["local Knit = require(ReplicatedStorage.Packages.Knit)"],
"description": "Require the Knit module"
}
Output
local Knit = require(ReplicatedStorage.Packages.Knit)

Roblox Service

References a Roblox engine service.

Snippet
"Service": {
"prefix": ["service"],
"body": ["local ${0:Name}Service = game:GetService(\"${0:Name}Service\")"],
"description": "Roblox Service"
}
Output
local HttpService = game:GetService("HttpService")

Knit Service

Creates a complete service template.

Snippet
"Knit Service": {
"prefix": ["knitservice"],
"body": [
"local Knit = require(ReplicatedStorage.Packages.Knit)",
"",
"local ${0:$TM_FILENAME_BASE} = {",
"\tName = \"${0:$TM_FILENAME_BASE}\",",
"\tClient = {},",
"}",
"",
"",
"function ${0:$TM_FILENAME_BASE}:KnitStart()",
"\t",
"end",
"",
"",
"function ${0:$TM_FILENAME_BASE}:KnitInit()",
"\t",
"end",
"",
"",
"return ${0:$TM_FILENAME_BASE}",
""
],
"description": "Knit Service template"
}
Output
local Knit = require(ReplicatedStorage.Packages.Knit)

local MyService = {
Name = "MyService",
Client = {},
}

function MyService:KnitStart()
end

function MyService:KnitInit()
end

return MyService

Knit Controller

Creates a complete controller template.

Snippet
"Knit Controller": {
"prefix": ["knitcontroller"],
"body": [
"local Knit = require(ReplicatedStorage.Packages.Knit)",
"",
"local ${0:$TM_FILENAME_BASE} = { Name = \"${0:$TM_FILENAME_BASE}\" }",
"",
"",
"function ${0:$TM_FILENAME_BASE}:KnitStart()",
"\t",
"end",
"",
"",
"function ${0:$TM_FILENAME_BASE}:KnitInit()",
"\t",
"end",
"",
"",
"return ${0:$TM_FILENAME_BASE}",
""
],
"description": "Knit Controller template"
}
Output
local Knit = require(ReplicatedStorage.Packages.Knit)

local MyController = {
Name = "MyController",
}

function MyController:KnitStart()
end

function MyController:KnitInit()
end

return MyController

Knit Module Require

Requires a module from within Knit's utility folder.

Snippet
"Knit Require": {
"prefix": ["knitrequire"],
"body": ["local ${1:Name} = require(Knit.${2:Util}.${1:Name})"],
"description": "Knit Require template"
}
Output
local Signal = require(Knit.Util.Signal)

Lua Class

A standard Lua class template (not Knit-specific).

Snippet
"Class": {
"prefix": ["class"],
"body": [
"local ${0:$TM_FILENAME_BASE} = {}",
"${0:$TM_FILENAME_BASE}.__index = ${0:$TM_FILENAME_BASE}",
"",
"",
"function ${0:$TM_FILENAME_BASE}.new()",
"\tlocal self = setmetatable({}, ${0:$TM_FILENAME_BASE})",
"\treturn self",
"end",
"",
"",
"function ${0:$TM_FILENAME_BASE}:Destroy()",
"\t",
"end",
"",
"",
"return ${0:$TM_FILENAME_BASE}",
""
],
"description": "Lua Class"
}
Output
local MyClass = {}
MyClass.__index = MyClass

function MyClass.new()
local self = setmetatable({}, MyClass)
return self
end

function MyClass:Destroy()

end

return MyClass

All Snippets Combined

Complete lua.json
{

"Service": {
"prefix": ["service"],
"body": ["local ${0:Name}Service = game:GetService(\"${0:Name}Service\")"],
"description": "Roblox Service"
},

"Class": {
"prefix": ["class"],
"body": [
"local ${0:$TM_FILENAME_BASE} = {}",
"${0:$TM_FILENAME_BASE}.__index = ${0:$TM_FILENAME_BASE}",
"",
"",
"function ${0:$TM_FILENAME_BASE}.new()",
"\tlocal self = setmetatable({}, ${0:$TM_FILENAME_BASE})",
"\treturn self",
"end",
"",
"",
"function ${0:$TM_FILENAME_BASE}:Destroy()",
"\t",
"end",
"",
"",
"return ${0:$TM_FILENAME_BASE}",
""
],
"description": "Lua Class"
},

"Knit": {
"prefix": ["knit"],
"body": ["local Knit = require(ReplicatedStorage.Packages.Knit)"],
"description": "Require the Knit module"
},

"Knit Service": {
"prefix": ["knitservice"],
"body": [
"local Knit = require(ReplicatedStorage.Packages.Knit)",
"",
"local ${0:$TM_FILENAME_BASE} = {",
"\tName = \"${0:$TM_FILENAME_BASE}\",",
"\tClient = {},",
"}",
"",
"",
"function ${0:$TM_FILENAME_BASE}:KnitStart()",
"\t",
"end",
"",
"",
"function ${0:$TM_FILENAME_BASE}:KnitInit()",
"\t",
"end",
"",
"",
"return ${0:$TM_FILENAME_BASE}",
""
],
"description": "Knit Service template"
},

"Knit Controller": {
"prefix": ["knitcontroller"],
"body": [
"local Knit = require(ReplicatedStorage.Packages.Knit)",
"",
"local ${0:$TM_FILENAME_BASE} = { Name = \"${0:$TM_FILENAME_BASE}\" }",
"",
"",
"function ${0:$TM_FILENAME_BASE}:KnitStart()",
"\t",
"end",
"",
"",
"function ${0:$TM_FILENAME_BASE}:KnitInit()",
"\t",
"end",
"",
"",
"return ${0:$TM_FILENAME_BASE}",
""
],
"description": "Knit Controller template"
},

"Knit Require": {
"prefix": ["knitrequire"],
"body": ["local ${1:Name} = require(Knit.${2:Util}.${1:Name})"],
"description": "Knit Require template"
}

}