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 --- pkgs/profpatsch/dhallsh/main.dhall | 193 +++++++++---------------------------- 1 file changed, 44 insertions(+), 149 deletions(-) (limited to 'pkgs/profpatsch/dhallsh/main.dhall') diff --git a/pkgs/profpatsch/dhallsh/main.dhall b/pkgs/profpatsch/dhallsh/main.dhall index 86300b79..abf53032 100644 --- a/pkgs/profpatsch/dhallsh/main.dhall +++ b/pkgs/profpatsch/dhallsh/main.dhall @@ -1,161 +1,56 @@ -let Prelude = ./imports/Prelude.dhall - -let List/filterOptional = ./List/filterOptional.dhall - let Command = ./Command/type.dhall -let Option = ./Option/type.dhall - let Argument = ./Argument/type.dhall -let Complete = - { 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 - } +let Complete = ./Fish/Complete/type.dhall let argCommandToList - : Command Argument → List Text - = ./Command/toList.dhall - Argument - (./Argument/toArgList.dhall ./OptionPrinter/newStyle.dhall) + : Command Argument → List Text + = ./Command/toList.dhall + Argument + (./Argument/toArgList.dhall ./OptionPrinter/newStyle.dhall) -let complete = - λ(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 - } +let complete = ./Fish/Complete/default.dhall let completeToCommand - : Complete → Command Argument - = λ(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 " " (argCommandToList c) - - 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 (Optional Argument) Argument id args - : List Argument - } + : Complete → Command Argument + = ./Fish/Complete/toCommand.dhall ./OptionPrinter/newStyle.dhall in let fishSeenSubcommandFn = "__fish_seen_subcommand_from" - let fishUseSubcommandFn = "__fish_use_subcommand" - - let fooSubcommand - : Command Argument - = completeToCommand - ( complete { cmd = "abc", description = "this is foo option" } - ⫽ { condition = - Some { cmd = fishUseSubcommandFn, args = [] : List Argument } - , argument = - Some "foo" - } - ) - - let fooSubcommandBarOption - : Command Argument - = completeToCommand - ( complete { cmd = "abc", description = "will bar the baz" } - ⫽ { condition = - Some - { cmd = - fishSeenSubcommandFn - , args = - [ Argument.Plain "foo" ] - } - , long-option = - Some "bar" - , short-option = - Some "b" - } - ) - - in [ argCommandToList fooSubcommand - , argCommandToList fooSubcommandBarOption - , [ "complete", "--do-complete=abc foo -" ] - ] - : List (List Text) + let fishUseSubcommandFn = "__fish_use_subcommand" + + let fooSubcommand + : Command Argument + = completeToCommand + ( complete { cmd = "abc", description = "this is foo option" } + ⫽ { condition = + Some { cmd = fishUseSubcommandFn, args = [] : List Argument } + , argument = + Some "foo" + } + ) + + let fooSubcommandBarOption + : Command Argument + = completeToCommand + ( complete { cmd = "abc", description = "will bar the baz" } + ⫽ { condition = + Some + { cmd = + fishSeenSubcommandFn + , args = + [ Argument.Plain "foo" ] + } + , long-option = + Some "bar" + , short-option = + Some "b" + } + ) + + in [ argCommandToList fooSubcommand + , argCommandToList fooSubcommandBarOption + , [ "complete", "--do-complete=abc foo -" ] + ] + : List (List Text) -- cgit 1.4.1