Here's my current Elixir VSCode snippets elixir.json
file.
You can add it to VSCode by Ctrl/Cmd+Shift+P
and choosing Preferences : Configure User Snippets
, then opening elixir.json
. If you don't have one yet, you can create a new snippet file in the same place.
Supported snippets:
- gs: GenServer
- gscast: GenServer Cast Function
- gscall: GenServer Call Function
- lv: Phoenix LiveView
- lvc: Phoenix LiveComponent
- lvhe: Phoenix LiveView Handle Event Function
- lvhi: Phoenix LiveView Handle Info Function
Hope that's useful, here's the file:
{ "My GenServer": { "prefix": "gs", "body": [ "defmodule ${4:package}.${1:name} do", "\tuse GenServer", "\trequire Logger", "", "\t@me __MODULE__", "", "\tdef start_link(${2:opts}) do", "\t\t{:ok, pid} = result = GenServer.start_link(@me, ${2:opts}, name: @me)", "\t\tLogger.debug(\"#{@me} GenServer started with# #{inspect(pid)}.\")", "\t\tresult", "\tend", "", "\tdef init(${3:initial_state}) do", "\t\t{:ok, ${3:initial_state}}", "\tend", "", "\t$0", "end" ], "description": "My GenServer" }, "GenServer Cast": { "prefix": "gscast", "body": [ "def ${1:function}() do", "\tGenServer.cast(@me, :${1:function})", "end", "", "${0}" ], "description": "GenServer cast function" }, "GenServer Call": { "prefix": "gscall", "body": [ "def ${1:function}() do", "\tGenServer.call(@me, :${1:function})", "end", "", "${0}" ], "description": "GenServer call function" }, "LiveViewLiveComponent": { "prefix": "lvc", "body": [ "defmodule ${1:module} do", "\t@moduledoc \"\"\"", "\t${2:module_doc}", "\t\"\"\"", "\tuse Phoenix.LiveComponent", "", "\t@impl true", "\tdef update(_assigns, socket) do", "\t\t{:ok, socket}", "\tend", "", "\t@impl true", "\tdef render(assigns) do", "\t\t~L\"\"\"", "\t\t${0}", "\t\t\"\"\"", "\tend", "end", ] }, "LiveView": { "prefix": "lv", "body": [ "defmodule ${1:module} do", "\t@moduledoc \"\"\"", "\t${2:module_doc}", "\t\"\"\"", "\tuse Phoenix.LiveView", "", "\t@impl true", "\tdef mount(_params, _session, socket) do", "\t\t{:ok, socket}", "\tend", "", "\t@impl true", "\tdef handle_params(_params, _url, socket) do", "\t\t{:noreply, socket}", "\tend", "", "\t@impl true", "\tdef render(assigns) do", "\t\t~L\"\"\"", "\t\t${0}", "\t\t\"\"\"", "\tend", "end", ] }, "LiveViewHandleEvent": { "prefix": "lvhe", "body": [ "@impl true", "def handle_event(\"${1:event}\", %{\"${2:var}\" => ${2:var}} = _event, socket) do", "\t${0}", "\t{:noreply, socket}", "end" ] }, "LiveViewHandleInfo": { "prefix": "lvhi", "body": [ "@impl true", "def handle_info(${1:event}, socket) do", "\t${0}", "\t{:noreply, socket}", "end" ] } }
Happy Elixir'ing