From 98f961b23f6551f1b9abd785e2aa0b21c4dc85da Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Sat, 14 Sep 2019 22:59:15 +0200 Subject: main: factor out basic fish completion commands --- .../profpatsch/dhallsh/Fish/Complete/default.dhall | 28 ++++++++ .../dhallsh/Fish/Complete/toCommand.dhall | 77 ++++++++++++++++++++++ pkgs/profpatsch/dhallsh/Fish/Complete/type.dhall | 27 ++++++++ 3 files changed, 132 insertions(+) create mode 100644 pkgs/profpatsch/dhallsh/Fish/Complete/default.dhall create mode 100644 pkgs/profpatsch/dhallsh/Fish/Complete/toCommand.dhall create mode 100644 pkgs/profpatsch/dhallsh/Fish/Complete/type.dhall (limited to 'pkgs/profpatsch/dhallsh/Fish/Complete') diff --git a/pkgs/profpatsch/dhallsh/Fish/Complete/default.dhall b/pkgs/profpatsch/dhallsh/Fish/Complete/default.dhall new file mode 100644 index 00000000..0405f921 --- /dev/null +++ b/pkgs/profpatsch/dhallsh/Fish/Complete/default.dhall @@ -0,0 +1,28 @@ +let Command = ../../Command/type.dhall + +let Argument = ../../Argument/type.dhall + +in λ(a : { cmd : Text, description : Text }) + → { cmd = + a.cmd + , description = + a.description + , condition = + None (Command Argument) + , short-option = + None Text + , long-option = + None Text + , long-option-old-style = + None Text + , argument = + None Text + , keep-order = + False + , no-files = + True + , require-parameter = + False + , wraps = + None Text + } diff --git a/pkgs/profpatsch/dhallsh/Fish/Complete/toCommand.dhall b/pkgs/profpatsch/dhallsh/Fish/Complete/toCommand.dhall new file mode 100644 index 00000000..f7453b65 --- /dev/null +++ b/pkgs/profpatsch/dhallsh/Fish/Complete/toCommand.dhall @@ -0,0 +1,77 @@ +let Prelude = ../../imports/Prelude.dhall + +let Command = ../../Command/type.dhall + +let Argument = ../../Argument/type.dhall + +let Option = ../../Option/type.dhall + +let OptionPrinter = ../../OptionPrinter/type.dhall + +let Complete = ./type.dhall + +in λ(conditionOptionPrinter : OptionPrinter) + → λ(c : Complete) + → let long = + λ(name : Text) + → Prelude.Optional.map + Text + Argument + ( λ(content : Text) + → Argument.Option { opt = Option.Long name, arg = content } + ) + + let flag = + λ(name : Text) + → λ(flag : Bool) + → if flag + + then Some (Argument.Flag (Option.Long name)) + + else None Argument + + let conditionToText = + λ(c : Command Argument) + → Prelude.Text.concatSep + " " + ( ../../Command/toList.dhall + Argument + (../../Argument/toArgList.dhall conditionOptionPrinter) + c + ) + : Text + + let args = + [ long "command" (Some c.cmd) + , long "description" (Some c.description) + , Prelude.Optional.map + (Command Argument) + Argument + ( λ(c : Command Argument) + → Argument.Option + { opt = Option.Long "condition", arg = conditionToText c } + ) + c.condition + , long "short-option" c.short-option + , long "long-option" c.long-option + , long "old-option" c.long-option-old-style + , long "arguments" c.argument + , long "wraps" c.wraps + , flag "keep-order" c.keep-order + , flag "no-files" c.no-files + , flag "require-parameter" c.require-parameter + ] + : List (Optional Argument) + + let id = λ(a : Optional Argument) → a + + in { cmd = + "complete" + , args = + ../../List/filterOptional.dhall + (Optional Argument) + Argument + id + args + : List Argument + } diff --git a/pkgs/profpatsch/dhallsh/Fish/Complete/type.dhall b/pkgs/profpatsch/dhallsh/Fish/Complete/type.dhall new file mode 100644 index 00000000..c208f67a --- /dev/null +++ b/pkgs/profpatsch/dhallsh/Fish/Complete/type.dhall @@ -0,0 +1,27 @@ +let Command = ../../Command/type.dhall + +let Argument = ../../Argument/type.dhall + +in { cmd : + Text + , description : + Text + , condition : + Optional (Command Argument) + , short-option : + Optional Text + , long-option : + Optional Text + , long-option-old-style : + Optional Text + , argument : + Optional Text + , keep-order : + Bool + , no-files : + Bool + , require-parameter : + Bool + , wraps : + Optional Text + } -- cgit 1.4.1