hotpot.nvim icon indicating copy to clipboard operation
hotpot.nvim copied to clipboard

Enable useBitLib option by default?

Open otommod opened this issue 2 years ago • 5 comments

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.

otommod avatar Apr 23 '22 20:04 otommod

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.

rktjmp avatar Apr 24 '22 00:04 rktjmp

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).

otommod avatar Apr 24 '22 00:04 otommod

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,
    },
  },
}

reptee avatar Mar 07 '23 15:03 reptee

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.

rktjmp avatar Mar 07 '23 16:03 rktjmp

Many thanks

reptee avatar Mar 07 '23 20:03 reptee