Fixed
- Iterating a method that returns a list gave no completions at all —
for _, w in ipairs(ply:GetWeapons())leftwuntyped, as didEntity:GetChildren,Entity:GetMaterialsandPanel:GetChildren. The library forms likeplayer.GetAll()were unaffected. glua --versionreported0.1.0whatever version it was. Both the CLI and the language server now take their version from the manifest at build time.
Changed
glua-cliis now published on npm, with the formatter and linter available directly in the terminal.
Added
- Entity and weapon class awareness.
ents.Create("my_turret")is typed as that class, so its ownENTmethods and generated accessors complete on the result instead of only onself. Class names complete inside the string, and go-to-definition on one opens the class. Also coversents.FindByClass,ents.CreateClientside,weapons.GetandPlayer:Give. Engine classes likeprop_physicsstay a plainEntity.
- The extension is listed as GLua for Garry’s Mod. The old name was too close to other language servers already on the Marketplace. The extension id is unchanged, so existing installs and settings keep working.
- A failed Marketplace publish no longer fails the release workflow. The GitHub release is already out by the time that step runs, so the job summary reports the failure instead of leaving a half-finished release behind.
Changed
pnpm run releasenow rolls theUnreleasedsection into the new version and opens a fresh one, so a shipped release is never still described as unreleased.
Fixed
- CI ran the tests before the build, so the CLI’s tests failed on a clean checkout. Both workflows now build first.
- The light-mode code block theme was set to a dark Catppuccin variant.
- Release notes list each change as
subject by @author in #PR, and open with an install command for every supported editor.
Added
- Formatter. Reprints from the syntax tree. Refuses to touch a file that
does not parse, never drops a comment, and leaves idiomatic one-liners like
if not IsValid(ent) then return endalone. Set it with"[glua]": { "editor.defaultFormatter": "bluejutzu.glua-lsp" }. - Config files.
.glua.jsonfor rules and declared globals,.gluafmtrc.jsonfor formatting, both with JSON schemas so they get completion and validation while you edit them..editorconfigand.prettierrcare read too. - Inline suppressions.
-- glua-ignore <rule>,-- glua-disable/-- glua-enable,-- glua-disable-file. - Generated accessors.
self:NetworkVar("Int", 0, "Ammo")andAccessorFuncnow produce workingGetAmmo/SetAmmocompletions, carried across an entity’s directory. - Duplicate registrations. Two
hook.Addcalls sharing an event and identifier, or twotimer.Createcalls sharing a name, are reported. Realms are taken into account, so a client and a server hook never clash. - Code lens. Sender and handler counts above net messages, call sites above custom hooks, reference counts above globals.
- Workspace-wide diagnostics.
glua.diagnostics.scope: workspacereports every indexed file, not only the ones you have open. - Annotations.
---@param,---@return,---@type,---@class,---@field,---@deprecated, in the Lua Language Server dialect. Parameters without annotations are typed from the methods called on them. - A command line interface, published separately as
glua-cli, for running the same linter and formatter in CI.
- Parentheses are recorded rather than discarded, so reprinting cannot change
(a + b) * cintoa + b * c. - Operator precedence for left-associative operators.
- A UTF-8 BOM no longer produces a syntax error.
- Vector and Angle arithmetic infers as the class, not
number. - Function overloads (
surface.SetDrawColor(r, g, b, a)andsurface.SetDrawColor(color)) are both recognised. - Argument checks are skipped for the Lua standard library, whose documented signatures are not precise enough to check against.
First release.
- IntelliSense driven by an error-tolerant parser and a type model, so completion keeps working mid-keystroke
- 5,586 API entries scraped from the Garry’s Mod wiki
- Realm awareness from file paths and
if SERVER thenblocks - Net message analysis across files, including payload mismatches
- Hook name completion, typo detection, and typed callback parameters
- Cross-file go-to-definition, find references and rename