8000 GitHub - jasonjmcghee/livelove: Love2D LSP (VS Code / Neovim / Zed / etc.) extension for live coding and live variable tracking
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

jasonjmcghee/livelove

Repository files navigation

livelove

Please feel free to file any issues you have.

A LÖVE 2D VSCode extension in the form of an LSP server, and a few files to add to your project to enable live coding, and live feedback.

Note: I also added a neovim plugin and a zed plugin, if you'd prefer them over vs code. They do not support the live number slider and live color palette features, but do support live coding and live feedback.

"Live coding" here means, when you change the code, you'll see the changes reflected instantly / as you type them. If there are errors, it'll use the last valid code.

"Live feedback" here means, you'll see every value of variables you created, updated live, next to any reference to it (as an inlay hint). Any variable prefixed with _ like _foo will not be tracked. You can disable this entirely with live_vars = false at the top of livelove.lua.

Getting Started

  1. Install the vs code extension. (You can build it yourself, or download the one I built here.) or install the neovim plugin (cd into the folder and run npm run install) (similar for zed).
  2. Add the .lua files other than main.lua to your project (color.lua is optional).
  3. As soon as you open a file like main.lua after installing the extension, it will automatically start the LSP. Then, just run the project / main.lua, and you should see inlay hints in the editor. Edit your file and see the changes instantly (glsl shaders work too)!

image

There are a few additional features included. You can select a hex color string or a number, then click once on it. It'll pop up a slider / color palette (click to modify) you can use to edit the values using a good UX, live.

Neovim Demo

Screen.Recording.2025-04-07.at.9.56.20.PM.mov

Example

I've included main.lua to provide an example of how to use it.

But, here's a template:

if not IMAIN then
    livelove = require("livelove")
    -- Add state that you want to persist across hot reload here (probably most everything)
    -- You'll want something like this in every file, but choose a unique variable each time.
    IMAIN = true
end

local function hotreload()
    -- (optional) whatever you want here (fires any time there's a hot reload)
end

livelove.postswap = function(f)
    hotreload()
end

function love.update(dt)
    livelove.instantupdate()
    -- whatever you want here
end

function love.draw()
    -- whatever you want here
    livelove.postdraw()
end
0