Language Server Implementation for Luau

Overview

Luau Language Server

An implementation of a language server for the Luau programming language.

Getting Started

Install the extension from the marketplace: https://marketplace.visualstudio.com/items?itemName=JohnnyMorganz.luau-lsp

The extension will automatically populate the latest API types and documentation.

To resolve your instance tree and provide module resolution, the language server uses Rojo sourcemaps. The language server will automatically create a sourcemap.json in your workspace root on startup and whenever files are added/created/renamed.

It does this by running the rojo sourcemap command, hence Rojo 7.1.0+ must be available to execute in your workspace root. It is recommend to .gitignore the sourcemap.json file. In future, the language server will generate the file internally.

By default we generate a sourcemap for a default.project.json project file. The name can be changed in extension settings, as well as whether non-script instances are included in the sourcemap (included by default). Autogeneration of sourcemaps can also be toggled completely on/off in settings - the server will instead just listen to manual changes to sourcemap.json files.

Design Goals

The initial goal is to develop a language server supporting all common LSP functions. Module resolution and typing will initially revolve around Rojo.

The idea is to ensure module resolution is customisable, allowing the server to later be easily extended to support other environments where Luau may be used. We could also potentially take it a step forward, allowing the server to be used on an Lua 5.1 codebase through a translation layer (such as type comments through EmmyLua), allowing the language server to support general purpose Lua development powered by the Luau type inference engine.

If you use Luau in a different environment and are interested in using the language server, please get in touch!

Supported Features

  • Rojo Files Resolution
  • API Type Definitions
  • Diagnostics (incl. type errors)
  • Autocompletion
  • Hover
  • Signature Help
  • Go To Definition
  • Go To Type Definition
  • Find References
  • Document Highlight
  • Document Link
  • Document Symbol
  • Color Provider
  • Rename
  • Folding Range
  • Selection Range
  • Call Hierarchy
  • Type Hierarchy
  • Semantic Tokens
  • Inlay Hints
  • Workspace Symbols

The following are extra features defined in the LSP specification, but most likely do not apply to Luau or are not necessary. They can be investigated at a later time:

  • Go To Declaration (do not apply)
  • Go To Implementation (do not apply)
  • Code Actions (not necessary - could potentially add "fixers" for lints)
  • Code Lens (not necessary)
  • Inline Value (applies for debuggers only)
  • Moniker
  • Formatting (see stylua)

Build From Source

mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --target luau-lsp --config Release
Comments
  • Integration with SublimeLSP stopped working

    Integration with SublimeLSP stopped working

    This used to work just fine, but after updating to a more recent version of luau-lsp (apologies, I haven't noted the last version that worked) I'm getting this:

    Traceback (most recent call last):
      File "/home/zeux/.config/sublime-text/Installed Packages/LSP.sublime-package/plugin/core/transports.py", line 149, in invoke
      File "/home/zeux/.config/sublime-text/Installed Packages/LSP.sublime-package/plugin/core/sessions.py", line 1964, in on_payload
      File "/home/zeux/.config/sublime-text/Installed Packages/LSP.sublime-package/plugin/core/sessions.py", line 1952, in deduce_payload
    TypeError: int() argument must be a string or a number, not 'NoneType'
    

    The Python code that errors is

            elif "id" in payload:
                response_id = int(payload["id"])
    

    I'm assuming that "id" is set to null in the JSON response... I'm going to try to bisect this but I wanted to file this first in case it's something obvious.

    bug 
    opened by zeux 13
  • Support Studio plugin to infer instance hierarchy

    Support Studio plugin to infer instance hierarchy

    Luau-lsp does not recognize required modules defined in rbxms. However, the instance of the ModuleScript is still recognized by luau-lsp. I expect requires of ModuleScripts defined in .rbxms to work with luau-lsp, but I get type errors instead, shown below.

    I have two reasons for keeping certain modules inside the .rbxl. The first reason is that I do not want to see several hundred modules from Roblox in my VSCode project. The second reason is to easily allow non-coders in my team create projects to edit particular module scripts without Rojo overwriting their work.

    Here is an example project already setup with rbxm files: lsp_bug.zip The included .rbxl shows that the code is valid and works with Rojo.

    image

    enhancement 
    opened by ArchLand64 7
  • Enum can't be indexed as a table

    Enum can't be indexed as a table

    Problem I can't index Enum like this:

    Enum["UserInputType"]["Keyboard"]
    

    Error TypeError: Expected type table, got 't1 where t1 = {| AccessoryType: Enum.AccessoryType, ActionType: Enum.ActionType, ActuatorRelativeTo: Enum.ActuatorRelativeTo, ActuatorType: Enum.ActuatorType, AdPortalStatus: Enum.AdPortalStatus, AdPortalType: Enum.AdPortalType, AdShape: Enum.AdShape, AdornCullingMode: Enum.AdornCullingMode, AlignType: Enum.AlignType, AlphaMode: Enum.AlphaMode, AnalyticsEconomyAction: Enum.AnalyticsEconomyAction, AnalyticsLogLevel: Enum.AnalyticsLogLevel, AnalyticsProgressionStatus: Enum.AnalyticsProgressionStatus, AnimationPriority... TRUNCATED' instead

    blocked/external 
    opened by TheHackerPuppy 5
  • Types a and Player cannot be compared because they do not have the same metatable

    Types a and Player cannot be compared because they do not have the same metatable

    No warnings occur in Studio.

    --!strict
    local event = game:GetService("ReplicatedStorage"):FindFirstChild("RemoteEvent")
    assert(event:IsA("RemoteEvent"), "") -- LSP does now recognize `event` as a `RemoteEvent`.
    
    -- Won't warn if `player` is typed explicitly, but `Player` type is inferred anyway.
    event.OnServerEvent:Connect(function(player, target: Player)
    	print(player == target) -- Warning.
    end)
    
    local working_event: RemoteEvent = game:GetService("ReplicatedStorage"):FindFirstChild("RemoteEvent")
    working_event.OnServerEvent:Connect(function(player, target: Player)
    	print(player == target) -- No warning.
    end)
    
    TypeError: Types a and Player cannot be compared with == because they do not have the same metatable
    
    bug 
    opened by Qualadore 5
  • `Instance:FindFirstChild()` and `Instance:FindFirstAncestor()` can't always be compared with `nil`

    `Instance:FindFirstChild()` and `Instance:FindFirstAncestor()` can't always be compared with `nil`

    --!strict
    local model = Instance.new("Model")
    assert(model:FindFirstChild("does_not_exist") ~= nil) -- This warns.
    assert(workspace:FindFirstChild("does_not_exist") ~= nil) -- This is fine.
    
    TypeError: Types Instance and nil cannot be compared with ~= because they do not have the same metatable
    
    bug 
    opened by Qualadore 5
  • Instance.GetChildren returns

    Instance.GetChildren returns "Objects"

    Instead of returning an array of Instances, luau-lsp says workspace:GetChildren() returns Objects. This happens for any other instance as well. image

    This is what Roblox Studio shows for workspace:GetChildren() image

    bug 
    opened by ArchLand64 5
  • Adding the extension to Open VSX Registry

    Adding the extension to Open VSX Registry

    Right now, the extension is only available on the Microsoft's VSCode extension marketplace, this makes the extension inaccessible to users using a different version of VSCode such as code-server or VSCodium. Right now the only workaround I could find was to download the extension package and then installing them manually.

    Perhaps add the extension to the Open VSX Registry?

    enhancement 
    opened by RealEthanPlayzDev 4
  • Some types are `any` in definitions depending on ordering

    Some types are `any` in definitions depending on ordering

    WorldRoot.Raycast should return RaycastResult? as documented here: https://create.roblox.com/docs/reference/engine/classes/WorldRoot#Raycast But luau-lsp shows the return type as just RaycastResult image

    RaycastParams.FilterDescendantsInstances should be typed as {Instance} instead of {any}. image

    OverlapParams does not have property IgnoreWater as documented here: https://create.roblox.com/docs/reference/engine/classes/WorldRoot#Raycast But luau-lsp suggests and accepts OverlapParams.IgnoreWater image

    The types for CFrame.Position and CFrame.p are also wrong. They should be Vector3. image image

    bug blocked/external 
    opened by ArchLand64 4
  • UTF-8 error within globalTypes.d.lua causes invalid typechecking

    UTF-8 error within globalTypes.d.lua causes invalid typechecking

    Freshly installed this extension with no conflicting extensions (eg. RobloxLSP), getting a strange error that causes substantial typechecking inaccuracy and general bugs

    Failed to read definitions file c:/Users/Snowdust/AppData/Roaming/Code/User/globalStorage/johnnymorganz.luau-lsp/globalTypes.d.lua. Extended types will not be provided

    image

    SyntaxError: Expected identifier when parsing expression, got invalid UTF-8 sequence

    image

    bug 
    opened by SnowdustDev 4
  • Path for luau-lsp.types.definitionFiles doesn't work on Windows

    Path for luau-lsp.types.definitionFiles doesn't work on Windows

    I'm successfully using luau-lsp.types.definitionFiles on macOS to define my own types with an absolute path to a definition file. Unfortunately I can't get the same definitions to work on Windows though. On reload, luau-lsp simply says the definitions file does not exist.

    I'm pretty sure I've tried all combinations and permutations of forward slashes, backward slashes, double slashes, double quotes, etc. I've also tried both using the VSCode Settings UI and editing the json manually.

    I'm also sure the file exists at the path I'm providing! Not sure what else it could be.

    bug 
    opened by mikejohnstn 4
  • Diagnostics do not cleared for ignored files

    Diagnostics do not cleared for ignored files

    I would like Luau-LSP to copy Roblox Studio's "Type Inference Modes" behavior documented here: https://luau-lang.org/typecheck#type-inference-modes

    This makes it easier to use other people's code that also uses these annotations without finding and changing ignore globs in vscode. I think this feature should be an optional setting in vscode to respect type inference modes annotation.

    bug blocked/external 
    opened by ArchLand64 4
  • Doc comment support in type definitions

    Doc comment support in type definitions

    export type Roact = {
    	--[=[
    		Creates a roact element.
    
    		...
    	]=]
    	createElement: () -> (),
    }
    

    This could be a potential solution to older libraries not having moonwave-style doc comments. A user could then make a wrapper package that exports proper types and documentation comments pulled from the original package.

    This is also a potential solution to classes that are difficult to add types to using the idiomatic export class Class = typeof(Class.new()) and that need a full type definitions to work well.

    Possibly related to #236 considering the above remarks

    opened by filiptibell 0
  • Typechecker reports false positives when defining a user-defined type in the project

    Typechecker reports false positives when defining a user-defined type in the project

    Defining function return type will raise type-related errors.

    For example, adding a user-defined return type (such as Roact.Element) will raise an error of unknown type. Screenshot 2022-12-21 at 14 13 43

    opened by JBai34 0
  • Ignored error returning error code 1.

    Ignored error returning error code 1.

    I may have found a bug on Luau LSP analyze... if you try to use --ignore on a file that throws an error, it will return the error code 1. here is a mini repo with the problem, if you try to run luau-lsp analyze --ignore=example.lua it won't print nothing because it ignored the error - but an error code was returned. image

    luauerror.zip

    bug 
    opened by ohimesan 1
  • Doc comments do not attach to certain kinds of function declarations

    Doc comments do not attach to certain kinds of function declarations

    Functions declared like this do not get doc comments attached:

    --[=[
    	Doc comment
    ]=]
    local func = function()
    
    end
    

    EDIT: I realized now that this may count as a doc comment on a variable and not on a function declaration, let me know if this is just that feature missing and not actually a bug.

    enhancement 
    opened by filiptibell 1
  • Autocomplete anonymous functions when passing as argument

    Autocomplete anonymous functions when passing as argument

    If we need to pass an argument as a function (e.g. a callback), it would be nice if it there is a snippet option to autocomplete the parameters and go directly into the function body

    enhancement 
    opened by JohnnyMorganz 0
  • Don't enable all FFlags (related to recent crashing)

    Don't enable all FFlags (related to recent crashing)

    Currently the Language Server is heavily crashing due to a problem upstream in Luau (https://github.com/Roblox/luau/issues/780)

    The bug is gated behind the LuauUninhabitedSubAnything, but currently we enable all FFlags by default.

    To temporarily alleviate this bug, you can set the above FFlag to False, or disable the "Enable all FFlags" setting.

    We should in general make "Enable all FFlags" no longer on by default, as it is not necessary anymore with the FFlag syncing with Studio. There may be cases where this is disadvantageous though, so we will need to look into this further.

    enhancement 
    opened by JohnnyMorganz 0
Releases(1.14.3)
  • 1.14.3(Dec 10, 2022)

  • 1.14.2(Dec 4, 2022)

    [1.14.2] - 2022-12-04

    Changed

    • Sync to upstream Luau 0.555 (in particular, this has improvements to class definitions)

    What's Changed

    • Update to latest types dump by @github-actions in https://github.com/JohnnyMorganz/luau-lsp/pull/235
    • add parent argument to Instance.new by @Uncontained0 in https://github.com/JohnnyMorganz/luau-lsp/pull/238

    New Contributors

    • @Uncontained0 made their first contribution in https://github.com/JohnnyMorganz/luau-lsp/pull/238

    Full Changelog: https://github.com/JohnnyMorganz/luau-lsp/compare/1.14.1...1.14.2

    Source code(tar.gz)
    Source code(zip)
    luau-lsp-linux.zip(1.74 MB)
    luau-lsp-macos.zip(2.76 MB)
    luau-lsp-win64.zip(1.01 MB)
    Luau.rbxm(3.11 KB)
  • 1.14.1(Nov 23, 2022)

  • 1.14.0(Nov 13, 2022)

  • 1.13.1(Oct 29, 2022)

  • 1.13.0(Oct 28, 2022)

    [1.13.0] - 2022-10-28

    Added

    • Show documentation for overloaded functions in completion and hover. We show the documentation string of the first overload, and how many other overloads are present.
    • Show documentation for builtin class methods in signature help, including for the correct overload
    • Show documentation for parameters in signature help
    • Added luau-lsp.completion.addParentheses and luau-lsp.completion.addTabstopAfterParentheses to configure whether parentheses are added when completing a function call, and whether we include a tab stop after the parentheses respectively.
    • Automatically fill function call arguments using parameter names. This can be disabled using luau-lsp.completion.fillCallArguments.

    Changed

    • Sync to upstream Luau 0.551
    • Hide parameter name and variable inlay hint if the name is just _

    Fixed

    • Fixed string-based requires to use a fully-qualified file path, fixing Document Link (Follow Link) support for requires
    • Fixed reverse dependencies not being marked as dirty when using string requries due to unnormalised file paths
    • Fixed incorrect highlighting of unnamed parameters in signature help when multiple parameters present of same type
    • Fixed documentation not provided for some built-ins on hover
    • Fixed signature help highlighting of parameters named _
    • Fixed documentation comments of parent function being attached to a nested function
    • Use location to determine which parameter is active in signature help
    • Correctly handle highlighting variadic arguments in signature help
    • [Sublime Text] Fixed push diagnostics not being recomputed when sourcemap or .luaurc changes
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-linux.zip(1.67 MB)
    luau-lsp-macos.zip(2.69 MB)
    luau-lsp-win64.zip(1012.98 KB)
    Luau.rbxm(3.11 KB)
  • 1.12.1(Oct 18, 2022)

  • 1.12.0(Oct 18, 2022)

    [1.12.0] - 2022-10-18

    Added

    • Added support for moonwave-style documentation comments! Currently only supports comments attached to functions directly. See https://eryn.io/moonwave for how to write doc comments
    • Provide autocomplete for class names in Instance:IsA("ClassName") and errors when ClassName is unknown
    • Provide autocomplete for properties in Instance:GetPropertyChangedSignal("Property") and errors when Property is unknown
    • Provide autocomplete for enums in EnumItem:IsA("enum") and errors when Enum is unknown
    • Added command line flag --ignore=GLOB to luau-lsp analyze allowing you to provide glob patterns to ignore diagnostics, similar to luau-lsp.ignoreGlobs. Repeat the flag multiple times for multiple patterns

    Changed

    • Sync to upstream Luau 0.549
    • Deprioritise metamethods (__index etc.) in autocomplete

    Fixed

    • Fixed inlay hints not showing for variable types when hover.strictDataModelTypes is disabled
    • Fixed Internal Errors for workspace diagnostics when a type error was being displayed backed by the incorrect text document causing string errors
    • Fixed Internal Errors for goto definitions as incorrect document used for string conversions
    • Fixed overloaded functions not being highlighted as functions in autocomplete
    • Potential fix to Request Failed errors
    • Fixed self incorrectly showing up in Inlay Hints and Signature Help
    • Fixed Studio Plugin syncing causing server crashes
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-linux.zip(1.63 MB)
    luau-lsp-macos.zip(2.63 MB)
    luau-lsp-win64.zip(989.96 KB)
    Luau.rbxm(3.11 KB)
  • 1.11.2(Oct 8, 2022)

    [1.11.2] - 2022-10-08

    Changed

    • Sync to upstream Luau 0.548

    Fixed

    • Fixed inlay hints no longer showing up
    • Fixed inlay hints not showing up in first load of file until a dummy change is made
    • Fixed DM types not generated for script nodes. Improved autocomplete will now be provided for non-DataModel projects (e.g. Tool as Root)

    Full Changelog: https://github.com/JohnnyMorganz/luau-lsp/compare/1.11.1...1.11.2

    Source code(tar.gz)
    Source code(zip)
    luau-lsp-linux.zip(1.62 MB)
    luau-lsp-macos.zip(2.60 MB)
    luau-lsp-win64.zip(977.37 KB)
    Luau.rbxm(3.11 KB)
  • 1.11.1(Oct 1, 2022)

  • 1.11.0(Sep 28, 2022)

    [1.11.0] - 2022-09-28

    Added

    • Added support for Semantic Tokens

    Changed

    • Improved autocomplete items ordering by applying heuristics to sort items
    • Table keys are prioritised when autocompleting inside of a table

    Fixed

    • Fixed .meta.json file being picked as a script's file path instead of the actual Luau file
    • Fixed diagnostics not clearing for files when workspace diagnostics is not enabled
    • Fixed metatable name not being used when hovering over the function of a metatable
    • Manually increased some internal limits to reduce likelihood of type errors
    • Fixed diagnostics (and other global configuration) not loading when not inside of a workspace
    • Fixed server erroring when configuration is not sent by the client
    • Fixed diagnostics not showing on initial startup in push diagnostics mode (Sublime Text)
    • Fixed "insert inlay hint" incorrectly enabled for error types
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-linux.zip(1.57 MB)
    luau-lsp-macos.zip(2.48 MB)
    luau-lsp-win64.zip(941.80 KB)
  • 1.10.1(Sep 24, 2022)

    [1.10.1] - 2022-09-24

    Changed

    • Further improvements to instance type creation
    • Sync to upstream Luau 0.546

    Fixed

    • Children of game will now correctly show in autocomplete
    • Fix autocomplete of non-identifier properties: [email protected] -> Packages._Index["[email protected]"]
    • Fixed mapping of requires from game.Players.LocalPlayer.PlayerScripts to game.StarterPlayer.StarterPlayerScripts (and PlayerGui + StarterGear)
    • Fixed type errors being reported twice in luau-lsp analyze
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-linux.zip(1.54 MB)
    luau-lsp-macos.zip(2.44 MB)
    luau-lsp-win64.zip(928.31 KB)
  • 1.10.0(Sep 17, 2022)

    This release introduces support for a Studio Plugin to allow the language server to infer instance trees: #136 We also start creating nightly releases available at https://github.com/JohnnyMorganz/luau-lsp/actions/workflows/nightly.yml which builds and packages current main branch every day at midnight UTC. To use a nightly release, visit the nightly actions section and select an action run. You should find artifacts available to download - unpackage the relevant artifact then use Extensions: Install from VSIX... from vscode. We also build a binary which can be used.


    [1.10.0] - 2022-09-17

    Added

    • Introduced a Studio plugin to infer instance trees for partially managed projects. This works alongside Rojo sourcemaps, where instance information retrieved from Studio is merged into the sourcemap. Starting the plugin can be configured using luau-lsp.plugin.enabled. Install the plugin from the Plugin Marketplace

    Changed

    • Sync to upstream Luau 0.545
    • Inlay hints for variables will no longer show if the type hint string is the same as the variable name (i.e., local tbl = {}, the hint : tbl will no longer show) (#137)
    • Restructured instance types system to reduce memory and type creation footprint

    Fixed

    • Fixed false document diagnostics showing up for opened tabs when VSCode is first started (#132)
    • Various type definition improvements
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-linux.zip(1.57 MB)
    luau-lsp-macos.zip(2.46 MB)
    luau-lsp-win64.zip(934.06 KB)
  • 1.9.2(Sep 6, 2022)

    [1.9.2] - 2022-09-06

    Changed

    • Sync to upstream Luau 0.543

    Fixed

    • Fixed diagnostics for ignored files not clearing when workspace diagnostics is enabled (#77)
    • Fixed luau-lsp analyze would not exit with non-zero error code when definitions failed to load
    • Fixed luau-lsp analyze would not exit with non-zero error code when file path provided was not found
    • Fixed crash when Suggest Imports is enabled and you have a local variable defined with no assigned value (e.g. local name)
    • Improve RequestAsync type by @JohnnyMorganz in https://github.com/JohnnyMorganz/luau-lsp/pull/121
    • Correct types for HumanoidDescription and TeleportService methods by @fewkz in https://github.com/JohnnyMorganz/luau-lsp/pull/125

    New Contributors

    • @fewkz made their first contribution in https://github.com/JohnnyMorganz/luau-lsp/pull/125

    Full Changelog: https://github.com/JohnnyMorganz/luau-lsp/compare/1.9.1...1.9.2

    Source code(tar.gz)
    Source code(zip)
    luau-lsp-linux.zip(1.53 MB)
    luau-lsp-macos.zip(2.39 MB)
    luau-lsp-win64.zip(910.95 KB)
  • 1.9.1(Aug 29, 2022)

  • 1.9.0(Aug 16, 2022)

    [1.9.0] - 2022-08-16

    Added

    • Added configuration options to enable certain Language Server features. By default, they are all enabled:

      • luau-lsp.completion.enabled: Autocomplete
      • luau-lsp.hover.enabled: Hover
      • luau-lsp.signatureHelp.enabled: Signature Help
    • Added configuration option luau-lsp.hover.showTableKinds (default: off) to indicate whether kinds ({+ ... +}, {| ... |}) are shown in hover information

    • Added configuration option luau-lsp.hover.multilineFunctionDefinitions (default: off) to spread function definitions in hover panel across multiple lines

    • Added configuration option luau-lsp.hover.strictDatamodelTypes (default: on) to use strict DataModel type information in hover panel (equivalent to autocomplete). When disabled, the same type information that the diagnostic type checker uses is displayed

    • Added support for automatic service importing. When using a service which has not yet been defined, it will be added (alphabetically) to the top of the file. Config setting: luau-lsp.completion.suggestImports

    Changed

    • Sync to upstream Luau 0.540

    Fixed

    • The types of :FindFirstChild, :FindFirstAncestor and :FindFirstDescendant have been changed to return Instance?
    • :GetActor is fixed to return Actor?
    • Fixed bug when using --definitions= when calling luau-lsp analyze

    Full Changelog: https://github.com/JohnnyMorganz/luau-lsp/compare/1.8.1...1.9.0

    Source code(tar.gz)
    Source code(zip)
    luau-lsp-linux.zip(1.49 MB)
    luau-lsp-macos.zip(2.33 MB)
    luau-lsp-win64.zip(881.22 KB)
  • 1.8.1(Aug 1, 2022)

  • 1.8.0(Jul 30, 2022)

    [1.8.0] - 2022-07-30

    Added

    • Added support for cross-file go to definition of functions
    • Added support for go-to definition of properties defined on a metatable with __index
    • Added support for inlay hints. It can be enabled by configuring luau-lsp.inlayHints.parameterNames, luau-lsp.inlayHints.parameterTypes, luau-lsp.inlayHints.variableTypes, luau-lsp.inlayHints.functionReturnTypes.

    Changed

    • Sync to upstream Luau 0.538
    • Improved completion detail function param information with better representative types, and include a trailing type pack if present

    Fixed

    • Fixed crash when hovering over local in incomplete syntax tree
    • Fixed language server not working for newly created files not yet stored on disk
    • Luau LSP will now activate if you run an LSP command
    • Fixed finding the incorrect workspace folder to analyze with in a multi-workspace environment
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-linux.zip(1.43 MB)
    luau-lsp-macos.zip(2.24 MB)
    luau-lsp-win64.zip(848.62 KB)
  • 1.7.1(Jul 17, 2022)

  • 1.7.0(Jul 17, 2022)

    [1.7.0] - 2022-07-16

    Added

    • Reintroduced support for workspace diagnostics, with proper streaming support. Enable luau-lsp.diagnostics.workspace for project wide diagnostics.
    • You can now hover over a type node to get type information. In particular, this works for properties inside type tables, and hovering over typeof(), allowing you to determine what typeof resolved to.
    • Added Go To Definition for type references
    • Added Luau: Regenerate Rojo Sourcemap command to force regeneration of a Rojo sourcemap
    • Improved case where project file default.project.json was not found. We search for other project files, and prompt a user to configure

    Changed

    • Sync to upstream Luau 0.536
    • Improved extension error message when Rojo version present does not have sourcemap support
    • Document links will now resolve for requires in all locations of a file, not just the top level block

    Fixed

    • A diagnostic refresh will now be requested once sourcemap contents change
    • With the introduction of workspace diagnostics, ignored files should now only show diagnostics when specifically opened
    • Document symbols for method definitions now correctly use a colon instead of a dot operator.
    • Fixed crash when hovering over a type node
    • Fixed go to definition on a global just going to the top of the file. It will now not accept go to definition requests
    • Fixed using absolute file paths to point to definition files not working on Windows
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-linux.zip(1.41 MB)
    luau-lsp-macos.zip(2.21 MB)
    luau-lsp-win64.zip(837.39 KB)
  • 1.6.0(Jul 2, 2022)

    [1.6.0] - 2022-07-02

    Added

    • Added luau-lsp.sourcemap.enabled option which dictates whether sourcemap-related features are enabled
    • Diagnostics will now be provided for definitions files which errored
    • Added luau-lsp.sourcemap.rojoPath to explicitly specify the path to a Rojo executable instead of relying on it being available from the workspace directory
    • Added hover information when hovering over a type definition

    Changed

    • Moved definitions file loading to post-initialization
    • Sync to upstream Luau 0.534
    • A _ will no longer show when we can't determine a function name / a function isn't named.

    Fixed

    • Fixed regression where diagnostics are not cleared when you close an ignored file
    • Fixed errors sometimes occuring when you index script/workspace/game for children
    • Fixed internal error caused by :Clone() calls when called on an expression which isn't an Lvalue (e.g., inst:FindFirstChild(name):Clone())
    • Fixed bug where _: would not be removed as the name of function arguments. function foo(_: number, _: number) will now show as function foo(number, number)
    • Fixed analyze mode not exiting with a non-zero exit code when there are errors
    • Fixed excessive whitespace in document symbols for expr-named function defintions
    • Fixed hover for global functions and local variables
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-linux.zip(1.37 MB)
    luau-lsp-macos.zip(2.16 MB)
    luau-lsp-win64.zip(823.65 KB)
  • 1.5.2(Jun 22, 2022)

  • 1.5.1(Jun 21, 2022)

  • 1.5.0(Jun 20, 2022)

    [1.5.0] - 2022-06-20

    Added

    • Added predicate logic to EnumItem:IsA("Type") so it will now narrow the type of an EnumItem when used as a predicate
    • Added setting to configure whether all Luau FFlags are enabled by default. This can be configured using luau-lsp.fflags.enableByDefault or --no-flags-enabled command line option. Currently, all FFlags are enabled by default, but you can manually sync/override them.
    • Added support for adding extra definition files to load using luau-lsp.types.definitionFiles
    • Roblox definitions can now be disabled using luau-lsp.types.roblox
    • Added label details to completion items

    Changed

    • Sync to upstream Luau 0.532
    • Updated to improve table type stringification, with an appropriate newline placed in between braces. This should result in better readable table types when hovering
    • Upgraded vscode language client to 8.0, with support for LSP Specification 3.17
    • VSCode Client now makes use of diagnostics pull model

    Fixed

    • Fixed equality comparison between enum items raising a type error
    • Fixed autocompletion of properties with spaces not correctly being converted into a ["property"] index leading to a type error
    • Fixed function stringification when using an expression index call such as data["property"]()
    • Fixed workspace diagnostics not respecting ignore globs for dependent files
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-linux.zip(1.34 MB)
    luau-lsp-macos.zip(2.11 MB)
    luau-lsp-win64.zip(805.00 KB)
  • 1.4.0(Jun 12, 2022)

    [1.4.0] - 2022-06-12

    Added

    • Added Document Symbols support
    • Merged luau-analyze-rojo into the project to simplify maintenance. To run a standalone analysis tool, run luau-lsp analyze
    • Added links to Luau Documentation for lint warnings
    • Added documentation to Enum types
    • Diagnostics of dependents (i.e., files which require a changed file) will now refresh to display type errors when the file changes
    • Added support for workspace-wide diagnostics to report in all files. You can enable this using luau-lsp.diagnostics.workspace. It is disabled by default

    Changed

    • Sync to upstream Luau 0.531
    • Unused lints will are now tagged appropriately so they render faded out

    Fixed

    • Fixed the equality comparison between two Instance types causing a type error
    • Fixed false positive type errors occuring when using DataModel instance types. Unfortunately, for this fix we had to temporarily type all DataModel instances as any. You should still get proper autocomplete and intellisense, however type errors will no longer throw for unknown children.
    • Fixed enum types to be under the "Enum" library, so the types are referenced using Enum.Font instead of EnumFont
    • HTML Tags have been stripped from documentation so they should render better in IntelliSense
    • Fixed "Text Document not loaded locally" error occuring when you start typing in a newly created file (as the sourcemap is not yet up-to-date)
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-darwin-arm64(6.26 MB)
    luau-lsp-darwin-arm64.vsix(2.14 MB)
    luau-lsp-darwin-x64(6.26 MB)
    luau-lsp-darwin-x64.vsix(2.14 MB)
    luau-lsp-linux-x64(3.51 MB)
    luau-lsp-linux-x64.vsix(1.39 MB)
    luau-lsp-win32-x64.exe(1.76 MB)
    luau-lsp-win32-x64.vsix(903.78 KB)
  • 1.3.0(Jun 10, 2022)

    [1.3.0] - 2022-06-10

    Added

    • Added support for configuring enabled Luau FFlags
    • Added support for pulling in the currently enabled FFlags in Studio, in order to replicate behaviour

    Changed

    • The "Updating API" message will now only show on the status bar instead of a popup notification.
    • Instance types will now be named by the Class Name rather than the Instance name
    • File system watchers for .luaurc and sourcemap.json are now registered on the server side

    Fixed

    • Fixed requiring modules when using :FindFirstAncestor("Ancestor")
    • Fixed requiring modules in LocalPlayer.PlayerGui / LocalPlayer.PlayerScripts / LocalPlayer.StarterGear
    • Changing .luaurc configuration will now refresh the config cache and update internally
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-darwin-arm64(6.03 MB)
    luau-lsp-darwin-arm64.vsix(2.04 MB)
    luau-lsp-darwin-x64(6.03 MB)
    luau-lsp-darwin-x64.vsix(2.04 MB)
    luau-lsp-linux-x64(3.33 MB)
    luau-lsp-linux-x64.vsix(1.32 MB)
    luau-lsp-win32-x64.exe(1.68 MB)
    luau-lsp-win32-x64.vsix(864.29 KB)
  • 1.2.0(Jun 4, 2022)

    [1.2.0] - 2022-06-04

    Added

    • Player will now have PlayerGui, Backpack, StarterGear and PlayerScripts children, with the relevant Starter instances copied into it (StarterGui, StarterPack, PlayerScripts)
    • Instance:FindFirstChild("name") and Instance:FindFirstAncestor("name") will now correctly resolve to the relevant instance type if found. This allows the type checker to correctly resolve children/parents etc.

    Changed

    • Sync to upstream Luau 0.530

    Fixed

    • Fixed extension repeatedly downloading latest API information when it is already up to date
    • Fixed self: Type showing up in hover information/autocomplete when it is unnecessary at it has been inferred by the : operator
    • Fixed extension not displaying error if calling out to Rojo command fails
    • Fixed reverse dependencies not updating when types of required modules change (causing the type system to be incorrect). i.e., if you required script B in script A, and change script B, now the change will propagate to script A
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-darwin-arm64(5.96 MB)
    luau-lsp-darwin-arm64.vsix(2.02 MB)
    luau-lsp-darwin-x64(5.96 MB)
    luau-lsp-darwin-x64.vsix(2.02 MB)
    luau-lsp-linux-x64(3.29 MB)
    luau-lsp-linux-x64.vsix(1.31 MB)
    luau-lsp-win32-x64.exe(1.66 MB)
    luau-lsp-win32-x64.vsix(854.49 KB)
  • 1.1.0(May 20, 2022)

    [1.1.0] - 2022-05-20

    Added

    • Can disable automatic sourcemap generation in extension settings.
    • Can change the project file used to generate sourcemap in extension settings (defaults to default.project.json).
    • Can toggle whether non-script instances are included in the generated sourcemap (included by default).
    • Added support for "Find References"
      • Currently only works for finding all references of a local variable in the current document. Cross-file references will come in future.
    • Added support for "Rename"
      • Currently only works for local variables in the current document. Cross-file references will come in future.

    Changed

    • Sync to upstream Luau 0.528
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-darwin-arm64(5.82 MB)
    luau-lsp-darwin-arm64.vsix(1.98 MB)
    luau-lsp-darwin-x64(5.82 MB)
    luau-lsp-darwin-x64.vsix(1.98 MB)
    luau-lsp-linux-x64(3.22 MB)
    luau-lsp-linux-x64.vsix(1.27 MB)
    luau-lsp-win32-x64.exe(1.64 MB)
    luau-lsp-win32-x64.vsix(843.23 KB)
  • 1.0.0(May 19, 2022)

    [1.0.0] - 2022-05-19

    Added

    • Added hover information for type references
    • Added end autocompletion functionality, as done in Studio. Can be enabled through luau-lsp.autocompleteEnd
    • Added automatic sourcemap regeneration when files change. This relies on rojo being available to execute in the workspace folder (i.e., on the PATH), with rojo sourcemap command support

    Changed

    • Improved Go To Type Definition support
    • Improved overall Go To Definition support
      • Can now handle function definitions in tables
      • Can handle cross-file definitions
      • Can handle deeply nested tables - multiple properties (incl. cross file support)
    • Hovering over a property inside a table will now give you type information about the assigned expression, rather than just "string"

    Fixed

    • Fixed syntax highlighting of generic type packs in function definitions
    Source code(tar.gz)
    Source code(zip)
    luau-lsp-darwin-arm64(5.85 MB)
    luau-lsp-darwin-arm64.vsix(1.99 MB)
    luau-lsp-darwin-x64(5.85 MB)
    luau-lsp-darwin-x64.vsix(1.99 MB)
    luau-lsp-linux-x64(3.22 MB)
    luau-lsp-linux-x64.vsix(1.27 MB)
    luau-lsp-win32-x64.exe(1.64 MB)
    luau-lsp-win32-x64.vsix(843.83 KB)
Owner
A CS Student interested in tooling, game development, and cyber security
null
C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting

ccls ccls, which originates from cquery, is a C/C++/Objective-C language server. code completion (with both signature help and snippets) definition/re

Fangrui Song 3.3k Jan 6, 2023
A concatenative functional language to be used as a sidekick for the mlatu language

gerku _, | | __ _, ___ ,_ __ | | __ _, _, /\___ / _` | / _ \| '__)| |

Remo Dentato 9 Jan 14, 2022
exp2swift translator which translates STEP schema files described in ISO 10303-11 STEP EXPRESS language to the Swift programing language.

STEPswiftcode/ exp2swift exp2swift translator which translates STEP schema files described in ISO 10303-11 STEP EXPRESS language to the Swift programi

Tsutomu Yoshida 1 Jan 3, 2022
StarkScript - or the Stark programming language - is a compiled C-based programming language that aims to offer the same usability as that of JavaScript's and TypeScript's

StarkScript StarkScript - or the Stark programming language - is a compiled C-based programming language that aims to offer the same usability as that

EnderCommunity 5 May 10, 2022
The Wren Programming Language. Wren is a small, fast, class-based concurrent scripting language.

Wren is a small, fast, class-based concurrent scripting language Think Smalltalk in a Lua-sized package with a dash of Erlang and wrapped up in a fami

Wren 6.1k Dec 30, 2022
C implementation of the Monkey programming language.

Development of this interpreter continues here: dannyvankooten/pepper-lang C implementation of the Monkey programming language. Bytecode compiler and

Danny van Kooten 24 Dec 30, 2022
Simple String_View implementation for C programming language.

Simple String_View implementation for C programming language.

Tsoding 46 Dec 21, 2022
A C++ implementation of the Forth programming language

onward A C++ implementation of the Forth programming language Build # Clone repository git clone https://github.com/tetsuo-cpp/onward.git cd onward/

Alex Cameron 3 Mar 6, 2022
In DFS-BFS Implementation In One Program Using Switch Case I am Using an Simple And Efficient Code of DFS-BFS Implementation.

DFS-BFS Implementation-In-One-Program-Using-Switch-Case-in-C Keywords : Depth First Search(DFS), Breadth First Search(BFS) In Depth First Search(DFS),

Rudra_deep 1 Nov 17, 2021
Web Server based on the Raspberry Pico using an ESP8266 with AT firmware for WiFi

PicoWebServer This program runs on a Raspberry Pico RP2040 to provide a web server when connected to an Espressif ESP8266. This allows the Pico to be

null 52 Jan 7, 2023
OpenTibiaBR - Canary Project is a free and open-source MMORPG server emulator written in C++.

OpenTibiaBR - Canary Project is a free and open-source MMORPG server emulator written in C++. It is a fork of the OTServBR-Global project. To connect to the server and to take a stable experience, you can use our own client or tibia client and if you want to edit something, check our customized tools.

OpenTibiaBR 104 Dec 28, 2022
Crashser - open source dump/crash server for different programming languages

Crashser - open source dump/crash server for different programming languages (used for crash analysis in various applications). This library is crossplatfrom (now only Windows, Linux, OSX) implementation C++ client for Crasher dump/crash server.

Balun Vladimir 16 Oct 15, 2022
The Cycle: Frontier server emulation

Prospect Also known as "The Cycle: Frontier". This repository is just something I work on when bored, do not expect much at this stage. Features Conne

AeonLucid 18 Nov 29, 2022
Remastered MW3 Server Freezer for the 1.4:382 version of the game (client)

MW3ServerFreezer Remastered MW3 Server Freezer for the 1.4:382 version of the game (client). Disclaimer This software has been created purely for the

Edo 3 Oct 31, 2022
OneFlow Backend For Triton Inference Server

Triton Inference Server OneFlow Backend

ZeKai Zhou 3 Jan 6, 2022
Passive scriptable LED server for Raspberry Pi

Passive LED server Scriptable LED server that you can just keep running all the time on a Raspberry Pi. Requirements Raspberry Pi 4 or newer (older mi

Melissa 4 Dec 1, 2021
Plex media server local privilige escalation poc - CVE-2021-42835

Local Privilege PlEXcalasion - CVE-2021-42835 Plex Media Server for Windows prior to version 1.25.0.5282, vulnerable to Time Of Check Time Of Use (TOC

null 6 May 24, 2022
The main repository for the Darkflame Universe Server Emulator project.

Darkflame Universe Introduction Darkflame Universe (DLU) is a server emulator for LEGO® Universe. Development started in 2013 and has gone through mul

null 492 Jan 7, 2023