cyan
cyan copied to clipboard
cyan attempts to compile lua files as if they were teal files.
See repro: cyan-lua-compilation-repro.zip
When I have a following file structure:
And
tlconfg.lua set to:
return {
build_dir = "build",
include_dir = {"src"},
source_dir = "src"
}
Then cyan build fails:
$ cyan build
Error 2 type errors in src/test.lua
... src/test.lua 3:7
... 3 | local a
... | ^
... | variable 'a' has no type or initial value
...
... src/test.lua 4:7
... 4 | local b
... | ^
... | variable 'b' has no type or initial value
Info Type checked src/main.tl
It looks like cyan tries to typecheck a lua file as if it was a teal file (even though there is a corresponding .d.tl file!).
Cyan doesn't currently handle this use case too well. An awkward solution would be to move the lua file into the build directory and use the dont_prune config.
return {
build_dir = "build",
include_dir = {"src"},
source_dir = "src",
dont_prune = { "build/test.lua" },
}
Or keep your lua sources in a different directory and use a build script to copy them over.
But this use case seems reasonable enough to be supported by default.
@euclidianAce I think I'm hitting the same issue when trying to use Cyan with the teal branch of LuaRocks.
Right now I have two kinds of Lua files under src, and I want to ignore both:
- generated
.luafiles from the.tlfiles (I'm still keeping them undersrc/to keep the build scripts compatible). I managed to get Cyan to ignore this by addingexclude = { "**/*.lua" }in mytlconfig.luafile - vendored Lua modules such as
src/luarocks/vendor/argparse.lua, for which I have asrc/luarocks/vendor/argparse.d.tlfile. Looks like Cyan is still checking the.luafile (and thus outputting lots of errors) because these are referenced by other files as dependencies.
I just realized there is this 'lax' setting in teal, and it seems like it is supposed to be set as true when type checking lua files. If so we maybe could do that instead of just skipping lua files like in my PR above