lloyAlloy on GitHub
TypeError
Docs

TypeError

Updated

The rule behind this error is on the alloy flux page.

Flux is the whole analysis in one run, what clippy is to cargo. It compiles every source, runs luau-lsp over the check artifact and maps the type errors onto the Alloy lines, and runs every lint at its [lint] level: Flux's own eight groups, and the checker's lints under the luau group. It also sees what one file cannot: circular_import reports two files that import each other.

alloy flux                 the project of the nearest alloy.toml
alloy flux src/game.aly    one file: the compile, the lints, and the type check
alloy flux --fix           apply the rewrites that keep the program the same
alloy flux -D correctness  deny a group for this run; -W warns, -A allows
alloy flux --explain manual_floor_div
alloy flux --no-typecheck  skip luau-lsp
alloy flux --watch         run again after every change
alloy flux --list          every lint with its group and default level

One file named on the command line still compiles the whole project, since the type check needs every module the file imports, and the report then covers that file alone. A file outside [build] in gets the compile and the lints, and the run says the type check did not run.

The check artifact keeps the source's lines, so a type error on line 12 of the output is on line 12 of the source; the column maps through the span map. The artifacts go into a mirror of the project under the temp directory, with the root's Luau configuration and a link to every other folder, so requires resolve as they do in the editor.

The [flux] table:

alloy.tomlalloy.toml
[flux]
typecheck = true                  # run luau-lsp over the check artifact
definitions = []                  # extra .d.luau or .d.aly files; the project's .d.aly join on their own
roblox_types = true               # load the Roblox globals
security_level = "PluginSecurity" # LocalUserSecurity, RobloxScriptSecurity, None
new_solver = true                 # false runs the old solver, which evaluates no type function
# luau_lsp = "/path/to/luau-lsp"  # unset: the PATH, then ~/.alloy/bin and ~/.ember/bin
too_many_arguments = 7
too_many_lines = 100
max_nesting = 5
cognitive_complexity = 25

The Roblox globals come from the luau-lsp extension's storage when the editor has them, and download once into ~/.alloy/types otherwise. A --@alloy-ignore line silences the checker's report on that line, as it does in the editor.