diff options
author | GHC GitLab CI <ghc-ci@gitlab-haskell.org> | 2021-03-18 09:55:46 -0400 |
---|---|---|
committer | GHC GitLab CI <ghc-ci@gitlab-haskell.org> | 2021-03-18 20:17:59 +0000 |
commit | 3c9a022320146c35ff0811f5eed33fc164e80f0c (patch) | |
tree | 62aaf9f6f61f516c7ef0b8b950d30933f7e09e4c | |
parent | d1e62fe5ebed7b7f378bdfa4157481a09f282518 (diff) | |
download | haskell-3c9a022320146c35ff0811f5eed33fc164e80f0c.tar.gz |
check-ppr,check-exact: Write out result as binary
Previously we would use `writeFile` to write the intermediate files to
check for round-tripping. However, this will open the output handle as a
text handle, which on Windows will change line endings. Avoid this by
opening as binary.
Explicitly use utf8 encoding.
This is for tests only, do not need to worry about user compatibility.
-rw-r--r-- | utils/check-exact/Main.hs | 14 | ||||
-rw-r--r-- | utils/check-ppr/Main.hs | 13 |
2 files changed, 19 insertions, 8 deletions
diff --git a/utils/check-exact/Main.hs b/utils/check-exact/Main.hs index 80c1908ce0..d5583c6f23 100644 --- a/utils/check-exact/Main.hs +++ b/utils/check-exact/Main.hs @@ -13,6 +13,7 @@ import GHC.Hs.Dump import System.Environment( getArgs ) import System.Exit import System.FilePath +import System.IO import ExactPrint -- exactPrint = undefined -- showPprUnsafe = undefined @@ -61,7 +62,7 @@ _tt = testOneFile "/home/alanz/mysrc/git.haskell.org/worktree/exactprint/_build/ -- "../../testsuite/tests/printer/Ppr033.hs" -- "../../testsuite/tests/printer/Ppr034.hs" -- "../../testsuite/tests/printer/Ppr035.hs" - -- "../../testsuite/tests/printer/Ppr036.hs" + "../../testsuite/tests/printer/Ppr036.hs" -- "../../testsuite/tests/printer/Ppr037.hs" -- "../../testsuite/tests/printer/Ppr038.hs" -- "../../testsuite/tests/printer/Ppr039.hs" @@ -126,7 +127,7 @@ _tt = testOneFile "/home/alanz/mysrc/git.haskell.org/worktree/exactprint/_build/ -- "../../testsuite/tests/printer/PprRecordDotSyntax2.hs" -- "../../testsuite/tests/printer/PprRecordDotSyntax3.hs" -- "../../testsuite/tests/printer/PprRecordDotSyntax4.hs" - "../../testsuite/tests/printer/PprRecordDotSyntaxA.hs" + -- "../../testsuite/tests/printer/PprRecordDotSyntaxA.hs" -- "./cases/Windows.hs" -- exact = ppr @@ -148,6 +149,9 @@ main = do [libdir,fileName] -> testOneFile libdir fileName _ -> putStrLn usage +writeBinFile :: FilePath -> String -> IO() +writeBinFile fpath x = withBinaryFile fpath WriteMode (\h -> hSetEncoding h utf8 >> hPutStr h x) + testOneFile :: FilePath -> String -> IO () testOneFile libdir fileName = do p <- parseOneFile libdir fileName @@ -166,9 +170,9 @@ testOneFile libdir fileName = do newAstFile = fileName <.> "ast.new" -- putStrLn $ "\n\nabout to writeFile" - writeFile astFile origAst + writeBinFile astFile origAst -- putStrLn $ "\n\nabout to pp" - writeFile newFile pped + writeBinFile newFile pped -- putStrLn $ "anns':" ++ showPprUnsafe (apiAnnRogueComments anns') @@ -178,7 +182,7 @@ testOneFile libdir fileName = do newAstStr = showSDocUnsafe $ showAstData BlankSrcSpanFile NoBlankApiAnnotations (pm_parsed_source p') - writeFile newAstFile newAstStr + writeBinFile newAstFile newAstStr -- putStrLn $ "\n\nanns':" ++ showPprUnsafe (apiAnnRogueComments anns') diff --git a/utils/check-ppr/Main.hs b/utils/check-ppr/Main.hs index 0559e20f10..f537a0085c 100644 --- a/utils/check-ppr/Main.hs +++ b/utils/check-ppr/Main.hs @@ -14,6 +14,7 @@ import GHC.Utils.Outputable hiding (space) import System.Environment( getArgs ) import System.Exit import System.FilePath +import System.IO usage :: String usage = unlines @@ -30,6 +31,12 @@ main = do [libdir,fileName] -> testOneFile libdir fileName _ -> putStrLn usage +-- | N.B. It's important that we write our output as binary lest Windows will +-- change our LF line endings to CRLF, which will show up in the AST when we +-- re-parse. +writeBinFile :: FilePath -> String -> IO() +writeBinFile fpath x = withBinaryFile fpath WriteMode (\h -> hSetEncoding h utf8 >> hPutStr h x) + testOneFile :: FilePath -> String -> IO () testOneFile libdir fileName = do p <- parseOneFile libdir fileName @@ -45,8 +52,8 @@ testOneFile libdir fileName = do astFile = fileName <.> "ast" newAstFile = fileName <.> "ast.new" - writeFile astFile origAst - writeFile newFile pped + writeBinFile astFile origAst + writeBinFile newFile pped p' <- parseOneFile libdir newFile @@ -54,7 +61,7 @@ testOneFile libdir fileName = do newAstStr = showPprUnsafe $ showAstData BlankSrcSpan BlankApiAnnotations $ eraseLayoutInfo (pm_parsed_source p') - writeFile newAstFile newAstStr + writeBinFile newAstFile newAstStr if origAst == newAstStr then do |