From a0b79e1b16887371d5cd14d53a607772ca730fb5 Mon Sep 17 00:00:00 2001 From: Stefan Holdermans <stefan@holdermans.nl> Date: Mon, 20 Apr 2020 21:51:57 +0200 Subject: [PATCH] Allow GHCi :script file names in double quotes This patch updates the user interface of GHCi so that file names passed to the ':script' command can be wrapped in double quotes. For example: :script "foo bar.script" The implementation uses a modified version of 'words' that treats character sequences enclosed in double quotes as single words. Fixes #18027. --- ghc/GHCi/UI.hs | 7 +++++-- testsuite/tests/ghci/should_run/T18027.script | 1 + testsuite/tests/ghci/should_run/T18027.stdout | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ghc/GHCi/UI.hs b/ghc/GHCi/UI.hs index c1fce215c38..36e27dd5b46 100644 --- a/ghc/GHCi/UI.hs +++ b/ghc/GHCi/UI.hs @@ -2267,12 +2267,15 @@ scriptCmd ws = do [s] -> runScript s _ -> throwGhcException (CmdLineError "syntax: :script <filename>") --- | A version of 'words' that does not break on backslash-escaped spaces. --- E.g., 'words\' "lorem\\ ipsum dolor"' yields '["lorem ipsum", "dolor"]'. +-- | A version of 'words' that treats sequences enclosed in double quotes as +-- single words and that does not break on backslash-escaped spaces. +-- E.g., 'words\' "\"lorem ipsum\" dolor"' and 'words\' "lorem\\ ipsum dolor"' +-- yield '["lorem ipsum", "dolor"]'. -- Used to scan for file paths in 'scriptCmd'. words' :: String -> [String] words' s = case dropWhile isSpace s of "" -> [] + s'@('\"' : _) | [(w, s'')] <- reads s' -> w : words' s'' s' -> go id s' where go acc [] = [acc []] diff --git a/testsuite/tests/ghci/should_run/T18027.script b/testsuite/tests/ghci/should_run/T18027.script index fd839d23927..bb13844f817 100644 --- a/testsuite/tests/ghci/should_run/T18027.script +++ b/testsuite/tests/ghci/should_run/T18027.script @@ -1 +1,2 @@ :script T18027\ SPACE\ IN\ FILE\ NAME.script +:script "T18027 SPACE IN FILE NAME.script" diff --git a/testsuite/tests/ghci/should_run/T18027.stdout b/testsuite/tests/ghci/should_run/T18027.stdout index d81cc0710eb..daaac9e3030 100644 --- a/testsuite/tests/ghci/should_run/T18027.stdout +++ b/testsuite/tests/ghci/should_run/T18027.stdout @@ -1 +1,2 @@ 42 +42 -- GitLab