diff --git a/lib/default.nix b/lib/default.nix index d50b266a..7100f996 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -92,6 +92,7 @@ lib.fix ( hasContent ifNonNull' listToUnkeyedAttrs + literalLua mkIfNonNull mkIfNonNull' mkRaw diff --git a/lib/utils.nix b/lib/utils.nix index 00d06d85..1a88843d 100644 --- a/lib/utils.nix +++ b/lib/utils.nix @@ -124,6 +124,37 @@ rec { else throw "mkRaw: invalid input: ${lib.generators.toPretty { multiline = false; } r}"; + /** + Convert the given string into a literalExpression mkRaw. + + For use in option documentation, such as examples and defaults. + + # Example + + ```nix + literalLua "print('hi')" + => literalExpression ''lib.nixvim.mkRaw "print('hi')"'' + => { + _type = "literalExpression"; + text = ''lib.nixvim.mkRaw "print('hi')"''; + } + ``` + + # Type + ``` + literalLua :: String -> AttrSet + ``` + */ + literalLua = + r: + let + # Pass the value through mkRaw for validation + raw = mkRaw r; + # TODO: consider switching to lib.generators.mkLuaInline ? + exp = "lib.nixvim.mkRaw " + builtins.toJSON raw.__raw; + in + lib.literalExpression exp; + wrapDo = string: '' do ${string} diff --git a/tests/lib-tests.nix b/tests/lib-tests.nix index b09cec18..fed0ab47 100644 --- a/tests/lib-tests.nix +++ b/tests/lib-tests.nix @@ -318,6 +318,19 @@ let }; }; + testLiteralLua = { + expr = builtins.mapAttrs (_: helpers.literalLua) { + print = "print('hi')"; + nil = "nil"; + table = "{}"; + }; + expected = builtins.mapAttrs (_: lib.literalExpression) { + print = ''lib.nixvim.mkRaw "print('hi')"''; + nil = ''lib.nixvim.mkRaw "nil"''; + table = ''lib.nixvim.mkRaw "{}"''; + }; + }; + testUpperFirstChar = { expr = map helpers.upperFirstChar [ "foo"