From 7bb981bca6c1fabb7bdfe367a6b19042ca36afd7 Mon Sep 17 00:00:00 2001 From: Profpatsch Date: Mon, 16 Sep 2019 00:56:37 +0200 Subject: Mostly implement nice completion for dhall A few bugs are still remainaing, but it can recognize when files should be completed for example. --- .../dhallsh/Completion/Command/Arguments.dhall | 1 + .../dhallsh/Completion/Command/package.dhall | 1 + .../dhallsh/Completion/Command/type.dhall | 4 +- .../dhallsh/Completion/Option/type.dhall | 10 +- .../profpatsch/dhallsh/Completion/completion.dhall | 168 +++++++++++---------- pkgs/profpatsch/dhallsh/Completion/package.dhall | 1 + 6 files changed, 96 insertions(+), 89 deletions(-) create mode 100644 pkgs/profpatsch/dhallsh/Completion/Command/Arguments.dhall create mode 100644 pkgs/profpatsch/dhallsh/Completion/Command/package.dhall create mode 100644 pkgs/profpatsch/dhallsh/Completion/package.dhall (limited to 'pkgs/profpatsch/dhallsh/Completion') diff --git a/pkgs/profpatsch/dhallsh/Completion/Command/Arguments.dhall b/pkgs/profpatsch/dhallsh/Completion/Command/Arguments.dhall new file mode 100644 index 00000000..e9ec3663 --- /dev/null +++ b/pkgs/profpatsch/dhallsh/Completion/Command/Arguments.dhall @@ -0,0 +1 @@ +λ(a : Type) → < Subcommands : List a | Files > diff --git a/pkgs/profpatsch/dhallsh/Completion/Command/package.dhall b/pkgs/profpatsch/dhallsh/Completion/Command/package.dhall new file mode 100644 index 00000000..6475acf9 --- /dev/null +++ b/pkgs/profpatsch/dhallsh/Completion/Command/package.dhall @@ -0,0 +1 @@ +{ Type = ./type.dhall, Arguments = ./Arguments.dhall } diff --git a/pkgs/profpatsch/dhallsh/Completion/Command/type.dhall b/pkgs/profpatsch/dhallsh/Completion/Command/type.dhall index a0fd4e98..ffbcd2bf 100644 --- a/pkgs/profpatsch/dhallsh/Completion/Command/type.dhall +++ b/pkgs/profpatsch/dhallsh/Completion/Command/type.dhall @@ -5,6 +5,6 @@ Text , options : List ../Option/type.dhall - , subcommands : - List a + , arguments : + ./Arguments.dhall a } diff --git a/pkgs/profpatsch/dhallsh/Completion/Option/type.dhall b/pkgs/profpatsch/dhallsh/Completion/Option/type.dhall index 44f62d2e..9f5d14f1 100644 --- a/pkgs/profpatsch/dhallsh/Completion/Option/type.dhall +++ b/pkgs/profpatsch/dhallsh/Completion/Option/type.dhall @@ -1,9 +1 @@ -{ short : - Optional Text -, long : - Text -, description : - Text -, argument : - Optional Text -} +{ short : Optional Text, long : Text, description : Text, takes-files : Bool } diff --git a/pkgs/profpatsch/dhallsh/Completion/completion.dhall b/pkgs/profpatsch/dhallsh/Completion/completion.dhall index e5b849a7..4b5bdad0 100644 --- a/pkgs/profpatsch/dhallsh/Completion/completion.dhall +++ b/pkgs/profpatsch/dhallsh/Completion/completion.dhall @@ -2,30 +2,30 @@ let Void = ../imports/Void.dhall let Option = ./Option/type.dhall -let Command = ./Command/type.dhall +let Command = ./Command/package.dhall let opt = λ(long : Text) → λ(description : Text) → { long = long - , description = - description - , argument = - None Text , short = None Text + , description = + description + , takes-files = + False } let fileOpt = opt "file" "Read expression from a file instead of standard input" - ⫽ { argument = Some "FILE" } + ⫽ { takes-files = True } let alphaOpt = opt "alpha" "α-normalize expression" let inplaceOpt = opt "inplace" "Modify the specified file in-place" - ⫽ { argument = Some "FILE" } + ⫽ { takes-files = True } let jsonOpt = opt "json" "Use JSON representation of CBOR" @@ -34,81 +34,93 @@ let leafCommand = → λ(description : Text) → { options = [] : List Option - , subcommands = - [] : List Void + , arguments = + (Command.Arguments Void).Subcommands ([] : List Void) , name = name , description = description } -in { name = - "dhall" - , description = - "Interpreter for the Dhall language" - , options = - [ opt "annotate" "Add a type annotation to the output" - , alphaOpt - , opt "explain" "Explain error messages in more detail" - , opt "plain" "Disable syntax highlighting" - , opt "ascii" "Format code using only ASCII syntax" - , opt "standard-version" "The standard version to use" - ⫽ { argument = Some "X.Y.Z" } - ] - , subcommands = - [ leafCommand - "version" - "Display version" - , leafCommand "resolve" "Resolve an expression's imports" - ⫽ { options = - [ fileOpt - , opt "dot" "Output import dependency graph in dot format" - , opt - "immediate-dependencies" - "List immediate import dependencies" - , opt - "transitive-dependencies" - "List transitive import dependencies" - ] - } - , leafCommand "type" "Infer an expression's type" - ⫽ { options = [ fileOpt ] } - , leafCommand "normalize" "Normalize an expression" - ⫽ { options = [ fileOpt, alphaOpt ] } - , leafCommand "repl" "Interpret expressions in a REPL" - , leafCommand - "diff" - "Render the difference between the normal form of two expressions" - , leafCommand "hash" "Compute semantic hashes for Dhall expressions" - , leafCommand "lint" "Improve Dhall code" - ⫽ { options = [ inplaceOpt ] } - , leafCommand "format" "Formatter for the Dhall language" - ⫽ { options = - [ opt "check" "Only check if the input is formatted" - , inplaceOpt - ] - } - , leafCommand - "freeze" - "Add integrity checks to remote import statements of an expression" - ⫽ { options = - [ inplaceOpt - , opt - "all" - "Add integrity checks to all imports (not just remote imports)" - , opt - "cache" - "Add fallback unprotected imports when using integrity checks purely for caching purposes" - ] - } - , leafCommand "encode" "Encode a Dhall expression to binary" - ⫽ { options = [ fileOpt, jsonOpt ] } - , leafCommand "decode" "Decode a Dhall expression from binary" - ⫽ { options = [ fileOpt, jsonOpt ] } - , leafCommand - "text" - "Render a Dhall expression that evaluates to a Text literal" - ⫽ { options = [ fileOpt ] } - ] +in { toplevelCommandIsSubcommand = + True + , command = + { name = + "dhall" + , description = + "Interpreter for the Dhall language" + , options = + [ fileOpt + , opt "annotate" "Add a type annotation to the output" + , alphaOpt + , opt "explain" "Explain error messages in more detail" + , opt "plain" "Disable syntax highlighting" + , opt "ascii" "Format code using only ASCII syntax" + , opt "standard-version" "The standard version to use" + ] + , arguments = + ( Command.Arguments + (Command.Type Void) + ).Subcommands + [ leafCommand "version" "Display version" + , leafCommand "resolve" "Resolve an expression's imports" + ⫽ { options = + [ fileOpt + , opt "dot" "Output import dependency graph in dot format" + , opt + "immediate-dependencies" + "List immediate import dependencies" + , opt + "transitive-dependencies" + "List transitive import dependencies" + ] + } + , leafCommand "type" "Infer an expression's type" + ⫽ { options = [ fileOpt ] } + , leafCommand "normalize" "Normalize an expression" + ⫽ { options = [ fileOpt, alphaOpt ] } + , leafCommand "repl" "Interpret expressions in a REPL" + , leafCommand + "diff" + "Render the difference between the normal form of two expressions" + ⫽ { arguments = (Command.Arguments Void).Files } + , leafCommand + "hash" + "Compute semantic hashes for Dhall expressions" + , leafCommand "lint" "Improve Dhall code" + ⫽ { options = [ inplaceOpt ] } + , leafCommand "format" "Formatter for the Dhall language" + ⫽ { options = + [ opt "check" "Only check if the input is formatted" + , inplaceOpt + ] + } + , leafCommand + "freeze" + "Add integrity checks to remote import statements of an expression" + ⫽ { options = + [ inplaceOpt + , opt + "all" + "Add integrity checks to all imports (not just remote imports)" + , opt + "cache" + "Add fallback unprotected imports when using integrity checks purely for caching purposes" + ] + } + , leafCommand "encode" "Encode a Dhall expression to binary" + ⫽ { options = [ fileOpt, jsonOpt ] } + , leafCommand "decode" "Decode a Dhall expression from binary" + ⫽ { options = [ fileOpt, jsonOpt ] } + , leafCommand + "text" + "Render a Dhall expression that evaluates to a Text literal" + ⫽ { options = [ fileOpt ] } + ] + } + } + : { command : + Command.Type (Command.Type Void) + , toplevelCommandIsSubcommand : + Bool } - : Command (Command Void) diff --git a/pkgs/profpatsch/dhallsh/Completion/package.dhall b/pkgs/profpatsch/dhallsh/Completion/package.dhall new file mode 100644 index 00000000..01044c54 --- /dev/null +++ b/pkgs/profpatsch/dhallsh/Completion/package.dhall @@ -0,0 +1 @@ +{ Option = ./Option/type.dhall, Command = ./Command/package.dhall } -- cgit 1.4.1