lib/utils: add literalLua for use in option docs

Creates a `literalExpression` equivalent to using `lib.nixvim.mkRaw`.
This commit is contained in:
Matt Sturgeon 2024-11-15 12:55:07 +00:00
parent de99f2938f
commit eb76e62a9b
No known key found for this signature in database
GPG key ID: 4F91844CED1A8299
3 changed files with 45 additions and 0 deletions

View file

@ -92,6 +92,7 @@ lib.fix (
hasContent
ifNonNull'
listToUnkeyedAttrs
literalLua
mkIfNonNull
mkIfNonNull'
mkRaw

View file

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

View file

@ -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"