hotpot.nvim
hotpot.nvim copied to clipboard
Enable useBitLib option by default?
Lua 5.3 added bitwise operators (<<
, >>
, &
, |
, ~
).
LuaJIT has the bit
module.
Fennel has the functions lshift
, rshift
, band
, bor
, bxor
, bnot
.
By default, these compile to be Lua 5.3 operators. You can pass the option useBitLib
to the Fennel compiler to make it use the bit
module. This is not mentioned in the API reference so it may not be considered "stable" but it's what the Fennel CLI uses for the --use-bit-lib
argument.
Given that hotpot targets Neovim specifically I think this should always be done.
I don't disagree that it could be enabled by default, but I am hesitant to do it because it isn't a complete compatibility layer: "The integer division operator (//) is only available in Lua 5.3+" and they "cannot be used as higher-order functions".
I think that puts some onus on the user to know what they want to use and how they can use it so it should probably be opt in.
I was just reading the Fennel reference and saw that passage. I guess useBitLib
is documented after all.
cannot be used as higher-order functions
That's always true though, LuaJIT or not.
The integer division operator (//) is only available in Lua 5.3+
There is, indeed, nothing that can be done in this case.
Still, not using the option is definitely the less correct solution for Neovim (at least so long as LuaJIT is the only supported implementation).
Hello!
Seeing this issue and fennel's supports for bitlib, how do I enable it within hotpot?
fennel.compile
doesn't seem to take any related options and passing any of "--use-bit-lib"
, "use-bit-lib"
to hotpotConfig.compiler
table doesn't provide support for it
require("hotpot").setup {
provide_require_fennel = true,
enable_hotpot_diagnostics = true,
compiler = {
["--use-bit-lib"] = true,
["use-bit-lib"] = true,
"--use-bit-lib",
"use-bit-lib",
modules = {
correlate = true,
},
},
}
It needs to go in the modules
(and optionally macros
) table, the option name is useBitLib
per https://fennel-lang.org/reference.
These all work as you would expect, with a few caveats. The bitwise operators are only available in Lua 5.3+, unless you use the --use-bit-lib flag or the useBitLib flag in the options table, which lets them be used in LuaJIT. The integer division operator (//) is only available in Lua 5.3+.
modules = {
correlate = true,
useBitLib = true,
},
You might have to touch
/save/edit files that you want to use the bit operators in to trigger a recompile with the new options.
Many thanks