helpers: Add mkLua,mkLuaFn (defaultNullOpts or not) (#866)

This makes it such that defaultNullOpts.mkStr never represents a lua
string, easing documenting where a string is a lua string vs lua code.
This commit is contained in:
traxys 2024-01-01 20:28:55 +01:00 committed by GitHub
parent f2e808a519
commit abd1c4007a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 70 additions and 45 deletions

View file

@ -119,6 +119,27 @@ with lib; rec {
mkCompositeOption = desc: options: mkCompositeOption = desc: options:
mkNullOrOption (types.submodule {inherit options;}) desc; mkNullOrOption (types.submodule {inherit options;}) desc;
mkNullOrLua = desc:
lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = desc;
apply = mkRaw;
};
mkNullOrLuaFn = desc: let
fnDesc = "(lua function)";
in
mkNullOrLua (
if desc == ""
then fnDesc
else ''
${desc}
${fnDesc}
''
);
defaultNullOpts = let defaultNullOpts = let
maybeRaw = t: lib.types.either t rawType; maybeRaw = t: lib.types.either t rawType;
in rec { in rec {
@ -140,33 +161,38 @@ with lib; rec {
# documentation # documentation
mkNullableWithRaw = type: mkNullable (maybeRaw type); mkNullableWithRaw = type: mkNullable (maybeRaw type);
mkLuaFn = default: desc: mkLua = default: desc: let
lib.mkOption { defaultDesc = "default: `${default}`";
type = lib.types.nullOr lib.types.str;
default = null;
description = let
defaultDesc = ''
default:
```lua
${default}
```
'';
in in
if desc == "" mkNullOrLua
then '' (
(lua function) (optionalString (desc != "") ''
${desc}
'')
+ ''
default: `${default}`
''
);
${defaultDesc} ${defaultDesc}
'' ''
);
mkLuaFn = default: desc: let
defaultDesc = "default: `${default}`";
in
mkNullOrLuaFn
(
if desc == ""
then defaultDesc
else '' else ''
${desc} ${desc}
(lua function)
${defaultDesc} ${defaultDesc}
''; ''
apply = mkRaw; );
};
mkNum = default: mkNullable (maybeRaw lib.types.number) (toString default); mkNum = default: mkNullable (maybeRaw lib.types.number) (toString default);
mkInt = default: mkNullable (maybeRaw lib.types.int) (toString default); mkInt = default: mkNullable (maybeRaw lib.types.int) (toString default);
# Positive: >0 # Positive: >0
@ -179,7 +205,7 @@ with lib; rec {
then "true" then "true"
else "false" else "false"
); );
mkStr = default: mkNullable lib.types.str ''${builtins.toString default}''; mkStr = default: mkNullable (maybeRaw lib.types.str) ''${builtins.toString default}'';
mkAttributeSet = default: mkNullable lib.types.attrs ''${default}''; mkAttributeSet = default: mkNullable lib.types.attrs ''${default}'';
# Note that this function is _not_ to be used with submodule elements, as it may obstruct the # Note that this function is _not_ to be used with submodule elements, as it may obstruct the
# documentation # documentation

View file

@ -69,7 +69,7 @@ in {
''; '';
inlayHints = { inlayHints = {
inline = helpers.defaultNullOpts.mkStr ''vim.fn.has("nvim-0.10") == 1'' '' inline = helpers.defaultNullOpts.mkLua ''vim.fn.has("nvim-0.10") == 1'' ''
Show hints inline. Show hints inline.
''; '';
@ -159,7 +159,7 @@ in {
setupOptions = with cfg; setupOptions = with cfg;
{ {
inlay_hints = with inlayHints; { inlay_hints = with inlayHints; {
inline = helpers.mkRaw inline; inherit inline;
only_current_line = onlyCurrentLine; only_current_line = onlyCurrentLine;
only_current_line_autocmd = onlyCurrentLineAutocmd; only_current_line_autocmd = onlyCurrentLineAutocmd;
show_parameter_hints = showParameterHints; show_parameter_hints = showParameterHints;

View file

@ -200,7 +200,7 @@ in {
''; '';
notificationGroup = notificationGroup =
helpers.defaultNullOpts.mkStr helpers.defaultNullOpts.mkLuaFn
"function(msg) return msg.lsp_name end" "function(msg) return msg.lsp_name end"
'' ''
How to get a progress message's notification group key How to get a progress message's notification group key
@ -321,7 +321,7 @@ in {
''; '';
formatMessage = formatMessage =
helpers.defaultNullOpts.mkStr helpers.defaultNullOpts.mkLua
"require('fidget.progress.display').default_format_message" "require('fidget.progress.display').default_format_message"
'' ''
How to format a progress message. How to format a progress message.
@ -341,12 +341,12 @@ in {
''; '';
formatAnnote = formatAnnote =
helpers.defaultNullOpts.mkStr helpers.defaultNullOpts.mkLuaFn
"function(msg) return msg.title end" "function(msg) return msg.title end"
"How to format a progress annotation."; "How to format a progress annotation.";
formatGroupName = formatGroupName =
helpers.defaultNullOpts.mkStr helpers.defaultNullOpts.mkLuaFn
"function(group) return tostring(group) end" "function(group) return tostring(group) end"
"How to format a progress notification group's name."; "How to format a progress notification group's name.";
@ -653,7 +653,7 @@ in {
suppress_on_insert = suppressOnInsert; suppress_on_insert = suppressOnInsert;
ignore_done_already = ignoreDoneAlready; ignore_done_already = ignoreDoneAlready;
ignore_empty_message = ignoreEmptyMessage; ignore_empty_message = ignoreEmptyMessage;
notification_group = helpers.mkRaw notificationGroup; notification_group = notificationGroup;
clear_on_detach = clear_on_detach =
if isString clearOnDetach if isString clearOnDetach
then helpers.mkRaw clearOnDetach then helpers.mkRaw clearOnDetach
@ -677,9 +677,9 @@ in {
icon_style = iconStyle; icon_style = iconStyle;
inherit priority; inherit priority;
skip_history = skipHistory; skip_history = skipHistory;
format_message = helpers.mkRaw formatMessage; format_message = formatMessage;
format_annote = helpers.mkRaw formatAnnote; format_annote = formatAnnote;
format_group_name = helpers.mkRaw formatGroupName; format_group_name = formatGroupName;
overrides = overrides =
helpers.ifNonNull' overrides helpers.ifNonNull' overrides
( (

View file

@ -100,7 +100,7 @@ in {
mapAttrs mapAttrs
( (
name: desc: name: desc:
helpers.mkNullOrOption types.str "The code of the function that runs ${desc}." helpers.mkNullOrLuaFn "The code of the function that runs ${desc}."
) )
{ {
enabling = "when enabling auto-save"; enabling = "when enabling auto-save";
@ -123,8 +123,7 @@ in {
inherit (cfg) condition; inherit (cfg) condition;
write_all_buffers = cfg.writeAllBuffers; write_all_buffers = cfg.writeAllBuffers;
debounce_delay = cfg.debounceDelay; debounce_delay = cfg.debounceDelay;
callbacks = with cfg.callbacks; callbacks = with cfg.callbacks; {
mapAttrs (_: helpers.mkRaw) {
inherit enabling disabling; inherit enabling disabling;
before_asserting_save = beforeAssertingSave; before_asserting_save = beforeAssertingSave;
before_saving = beforeSaving; before_saving = beforeSaving;

View file

@ -33,7 +33,7 @@ in {
disableInReplaceMode = helpers.defaultNullOpts.mkBool true "Disable in replace mode."; disableInReplaceMode = helpers.defaultNullOpts.mkBool true "Disable in replace mode.";
ignoredNextChar = helpers.defaultNullOpts.mkStr "[=[[%w%%%'%[%\"%.%`%$]]=]" '' ignoredNextChar = helpers.defaultNullOpts.mkLua "[=[[%w%%%'%[%\"%.%`%$]]=]" ''
Regexp to ignore if it matches the next character. Regexp to ignore if it matches the next character.
''; '';
@ -81,7 +81,7 @@ in {
disable_in_macro = cfg.disableInMacro; disable_in_macro = cfg.disableInMacro;
disable_in_visualblock = cfg.disableInVisualblock; disable_in_visualblock = cfg.disableInVisualblock;
disable_in_replace_mode = cfg.disableInReplaceMode; disable_in_replace_mode = cfg.disableInReplaceMode;
ignored_next_char = helpers.mkRaw cfg.ignoredNextChar; ignored_next_char = cfg.ignoredNextChar;
enable_moveright = cfg.enableMoveright; enable_moveright = cfg.enableMoveright;
enable_afterquote = cfg.enableAfterQuote; enable_afterquote = cfg.enableAfterQuote;
enable_check_bracket_line = cfg.enableCheckBracketLine; enable_check_bracket_line = cfg.enableCheckBracketLine;