cyan icon indicating copy to clipboard operation
cyan copied to clipboard

cyan attempts to compile lua files as if they were teal files.

Open vlaaad opened this issue 1 year ago • 3 comments

See repro: cyan-lua-compilation-repro.zip

When I have a following file structure: Screenshot 2024-07-15 at 15 29 51 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!).

vlaaad avatar Jul 15 '24 13:07 vlaaad

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 avatar Jul 23 '24 00:07 euclidianAce

@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 .lua files from the .tl files (I'm still keeping them under src/ to keep the build scripts compatible). I managed to get Cyan to ignore this by adding exclude = { "**/*.lua" } in my tlconfig.lua file
  • vendored Lua modules such as src/luarocks/vendor/argparse.lua, for which I have a src/luarocks/vendor/argparse.d.tl file. Looks like Cyan is still checking the .lua file (and thus outputting lots of errors) because these are referenced by other files as dependencies.

hishamhm avatar Sep 02 '24 17:09 hishamhm

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

svermeulen avatar Oct 10 '25 04:10 svermeulen