-
-
Couldn't load subscription status.
- Fork 133
nfnl Conversion Guide
Last update: 09/07/2024
This work was merged into the nfnl-migration branch and renamed to the main branch. See Discussion #605.
These guidelines (as suggested by @Olical) should be useful when converting Conjure source files from Aniseed to nfnl on the nfnl-migration branch.
See the nfnl API docs for the equivalent Aniseed functions.
- Keep the use of Aniseed modules in the code for now.
- Optionally, migrate to nfnl versions of the modules like str and core. If there are any issues then just
stick with Aniseed for now.
- Can replace
conjure.aniseed.corewithnfnl.core(see nfnl.core functions). - Can replace
conjure.aniseed.stringwithnfnl.string(see nfnl.string functions).
- Can replace
- This first pass aims to remove Aniseed for compiling Fennel into Lua. Completely dropping Aniseed will take more time to complete.
- Dropping Aniseed will require migrating to Neovim's built-in functions that were integrated from nvim.lua in 2019.
aniseed.nvimprovides thenvim.luafunctions by being a wrapper over them.
- Dropping Aniseed will require migrating to Neovim's built-in functions that were integrated from nvim.lua in 2019.
- Beware that
bustedtests may blow up without any helpful error messages. This can be triggered by not returningnilin the tail position of your test function. This is caused by the assertion returning a non-nil value.- Here's an example of the test output:
║Success || conjure.dynamic type-guard ║Fail || conjure.dynamic type-guard ║ error in error handling ║ ║Success: 13 ║Failed : 1 ║Errors : 0- Here's an example of returning
nilfrom a test function:
(describe "current-client-module-name" (fn [] (describe "with-filetype" (fn [] (it "returns the fennel module when we're in a fennel file" (fn [] ;; Error in error handling? (assert.same {:filetype "fennel" :module-name "conjure.client.fennel.aniseed"} (client.with-filetype "fennel" #(client.current-client-module-name))) nil))))))
-
Replace
modulewith calls to nfnl's autoload to load deps.Legacy | Busted -------------------------------------------+------------------------------------------------ (module conjure.buffer | (local {: autoload} (require :nfnl.module)) {autoload {nvim conjure.aniseed.nvim | (local nvim (autoload :conjure.aniseed.nvim)) a conjure.aniseed.core | (local a (autoload :nfnl.core)) str conjure.aniseed.string | (local str (autoload :nfnl.string)) text conjure.text}}) | (local text (autoload :conjure.text)) -
Remove
import-macrosstatements.(import-macros {: module : def : defn : defonce : def- : defn- : defonce- : wrap-last-expr : wrap-module-body : deftest} :nfnl.macros.aniseed) -
Replace
defnwithfn.Legacy | Busted -------------------------------------------+------------------------------------------------ (defn form [opts] | (fn form [opts] -
Replace
defn-withfn(private function; don't export).Legacy | Busted -------------------------------------------+------------------------------------------------ (defn- getpos [expr] | (fn getpos [expr] -
Replace
defoncewithlocal. -
Replace
def-withlocal(private name; don't export).Legacy | Busted -------------------------------------------+------------------------------------------------ (defonce conjure-source-directory | (local conjure-source-directory (def- cats-and-dogs | (local cats-and-dogs -
Optional: Replace
if-letwith aletand anif.nfnl.macrosprovides the equivalent.Legacy | Busted -------------------------------------------+------------------------------------------------ (if-let [node (ts.get-leaf)] | (let [node (ts.get-leaf)] | (if node {:range (ts.range node) | {:range (ts.range node) :content (ts.node->str node)} | :content (ts.node->str node)} {:range nil | {:range nil :content nil}) | :content nil})) -
Remove
*module*at bottom of the file.Legacy | Busted -------------------------------------------+------------------------------------------------ *module* | -
Add a table at the bottom of the file to export anything public. NOTE: As recommended by https://fennel-lang.org/style.
Legacy | Busted -------------------------------------------+------------------------------------------------ | {: form | : prompt | : prompt-char}
-
Create the equivalent of tests for
aniseed-legacy-tests/infnl/conjure-spec/. However, don't convert the legacy tests.Legacy | Busted -------------------------------------------+------------------------------------------------ `<module>-test.fnl` | `<module>_spec.fnl` -
Remove
moduleand replace withrequires forplenaryandbusted.Legacy | Busted ------------------------------------------------+------------------------------------------------ | (local {: describe : it} (require :plenary.busted)) | (local assert (require :luassert.assert)) | (module conjure.fs-test | (describe "fs" | (fn [] | (describe ...) ;; a test {require {fs conjure.fs | (local fs (require :conjure.fs)) nvim conjure.aniseed.nvim}}) | (local nvim (require :conjure.aniseed.nvim)) -
Replace
deftestwithdescribe. -
Replace
t.=withassert.are.equals. -
Replace
t.pr=withassert.same. -
Replace
t.ok?withassert.is_true. You may need to look closely at what the legacy test is trying to do to determine if this is appropriate.Legacy | Busted ---------------------------------------------------------+------------------------------------------------ (deftest config-dir | (describe "config-dir" (t.= "/home/conjure/.config/conjure" (fs.config-dir)) | (assert.are.equals "/home/conjure/.config/conjure" | (fs.config-dir)) (t.pr= [] (fs.split-path "")) | (assert.same [] (fs.split-path "")))
-
Run
scripts/setup-test-depsto set up a hidden directory,.test-config/which acts as the test environment. -
Run
scripts/testto execute the new tests under thelua/conjure-spec/directory. -
If your Neovim is set up with Conjure, Plenary, Aniseed, and nfnl, you can run the busted tests from the Neovim command line with:
:PlenaryBustedDirectory lua/conjure-specOr run a single test file with:
:PlenaryBustedFile lua/conjure-spec/fs_spec.lua -
If you're dog-fooding (using the
nfnl-migrationbranch with your working Neovim config), be sure to restart your Neovim or start a new one in another terminal or command window. This ensures that the newly compiled Lua files will be used when running thebustedtests.