mirror of
https://github.com/edwinb/Idris2-boot.git
synced 2024-12-25 22:06:33 +03:00
Deal with non-existent files more gracefully
So now you can start idris2 with a non-existent file and use :e to start editing it
This commit is contained in:
parent
ccc53813ca
commit
51c406ff7d
@ -57,15 +57,15 @@ readDataFile fname
|
||||
-- looking first in the build directory then in the extra_dirs
|
||||
export
|
||||
nsToPath : {auto c : Ref Ctxt Defs} ->
|
||||
FC -> List String -> Core String
|
||||
FC -> List String -> Core (Either Error String)
|
||||
nsToPath loc ns
|
||||
= do d <- getDirs
|
||||
let fnameBase = showSep (cast sep) (reverse ns)
|
||||
let fs = map (\p => p ++ cast sep ++ fnameBase ++ ".ttc")
|
||||
(build_dir d :: extra_dirs d)
|
||||
Just f <- firstAvailable fs
|
||||
| Nothing => throw (ModuleNotFound loc ns)
|
||||
pure f
|
||||
| Nothing => pure (Left (ModuleNotFound loc ns))
|
||||
pure (Right f)
|
||||
|
||||
-- Given a namespace, return the full path to the source module (if it
|
||||
-- exists in the working directory)
|
||||
|
@ -217,7 +217,7 @@ perror (BadRunElab _ env script)
|
||||
perror (GenericMsg _ str) = pure str
|
||||
perror (TTCError msg) = pure $ "Error in TTC file: " ++ show msg
|
||||
perror (FileErr fname err)
|
||||
= pure $ "File error in " ++ show fname ++ ": " ++ show err
|
||||
= pure $ "File error in " ++ fname ++ ": " ++ show err
|
||||
perror (ParseFail _ err)
|
||||
= pure $ show err
|
||||
perror (ModuleNotFound _ ns)
|
||||
|
@ -145,7 +145,10 @@ buildMod loc num len mod
|
||||
= do clearCtxt; addPrimitives
|
||||
let src = buildFile mod
|
||||
mttc <- getTTCFileName src ".ttc"
|
||||
depFiles <- traverse (nsToPath loc) (imports mod)
|
||||
-- We'd expect any errors in nsToPath to have been caught by now
|
||||
-- since the imports have been built! But we still have to check.
|
||||
depFilesE <- traverse (nsToPath loc) (imports mod)
|
||||
let (ferrs, depFiles) = getEithers depFilesE
|
||||
ttcTime <- catch (do t <- fnameModified mttc
|
||||
pure (Just t))
|
||||
(\err => pure Nothing)
|
||||
@ -167,10 +170,22 @@ buildMod loc num len mod
|
||||
": Building " ++ showMod ++
|
||||
" (" ++ src ++ ")"
|
||||
[] <- process {u} {m} msg src
|
||||
| errs => do traverse emitError errs
|
||||
pure errs
|
||||
pure []
|
||||
else pure []
|
||||
| errs => do traverse emitError (ferrs ++ errs)
|
||||
pure (ferrs ++ errs)
|
||||
traverse_ emitError ferrs
|
||||
pure ferrs
|
||||
else do traverse_ emitError ferrs
|
||||
pure ferrs
|
||||
where
|
||||
getEithers : List (Either a b) -> (List a, List b)
|
||||
getEithers [] = ([], [])
|
||||
getEithers (Left x :: es)
|
||||
= let (ls, rs) = getEithers es in
|
||||
(x :: ls, rs)
|
||||
getEithers (Right y :: es)
|
||||
= let (ls, rs) = getEithers es in
|
||||
(ls, y :: rs)
|
||||
|
||||
|
||||
buildMods : {auto c : Ref Ctxt Defs} ->
|
||||
{auto s : Ref Syn SyntaxInfo} ->
|
||||
|
@ -58,7 +58,8 @@ readModule : {auto c : Ref Ctxt Defs} ->
|
||||
(as : List String) -> -- Namespace to import into
|
||||
Core ()
|
||||
readModule top loc vis reexp imp as
|
||||
= do fname <- nsToPath loc imp
|
||||
= do Right fname <- nsToPath loc imp
|
||||
| Left err => throw err
|
||||
Just (syn, hash, more) <- logTime ("Reading " ++ show imp) $
|
||||
readFromTTC {extra = SyntaxInfo}
|
||||
loc vis fname imp as
|
||||
@ -89,7 +90,8 @@ readHash : {auto c : Ref Ctxt Defs} ->
|
||||
{auto u : Ref UST UState} ->
|
||||
Import -> Core (List String, Int)
|
||||
readHash imp
|
||||
= do fname <- nsToPath (loc imp) (path imp)
|
||||
= do Right fname <- nsToPath (loc imp) (path imp)
|
||||
| Left err => throw err
|
||||
h <- readIFaceHash fname
|
||||
-- If the import is a 'public' import, then it forms part of
|
||||
-- our own interface so add its hash to our hash
|
||||
|
@ -373,9 +373,10 @@ loadMainFile : {auto c : Ref Ctxt Defs} ->
|
||||
String -> Core ()
|
||||
loadMainFile f
|
||||
= do resetContext
|
||||
updateErrorLine !(buildDeps f)
|
||||
Right res <- coreLift (readFile f)
|
||||
| Left err => setSource ""
|
||||
| Left err => do emitError (FileErr f err)
|
||||
setSource ""
|
||||
updateErrorLine !(buildDeps f)
|
||||
setSource res
|
||||
|
||||
-- Returns 'True' if the REPL should continue
|
||||
|
@ -30,7 +30,7 @@ idrisTests
|
||||
"basic021", "basic022", "basic023", "basic024",
|
||||
"coverage001", "coverage002", "coverage003", "coverage004",
|
||||
"error001", "error002", "error003", "error004", "error005",
|
||||
"error006", "error007",
|
||||
"error006", "error007", "error008", "error009",
|
||||
"import001", "import002",
|
||||
"interactive001", "interactive002", "interactive003", "interactive004",
|
||||
"interactive005", "interactive006", "interactive007", "interactive008",
|
||||
|
@ -1,3 +1,3 @@
|
||||
$1 --no-prelude Do.blod < input
|
||||
$1 --no-prelude Do.idr < input
|
||||
|
||||
rm -rf build
|
||||
|
@ -1,3 +1,3 @@
|
||||
$1 --check VIndex.blod
|
||||
$1 --check VIndex.idr
|
||||
|
||||
rm -rf build
|
||||
|
3
tests/idris2/error008/expected
Normal file
3
tests/idris2/error008/expected
Normal file
@ -0,0 +1,3 @@
|
||||
File error in DoesntExist.idr: File Not Found
|
||||
Welcome to Idris 2 version 0.0. Enjoy yourself!
|
||||
Main> Bye for now!
|
1
tests/idris2/error008/input
Normal file
1
tests/idris2/error008/input
Normal file
@ -0,0 +1 @@
|
||||
:q
|
3
tests/idris2/error008/run
Executable file
3
tests/idris2/error008/run
Executable file
@ -0,0 +1,3 @@
|
||||
$1 DoesntExist.idr < input
|
||||
|
||||
rm -rf build
|
4
tests/idris2/error009/Exists.idr
Normal file
4
tests/idris2/error009/Exists.idr
Normal file
@ -0,0 +1,4 @@
|
||||
import DoesntExist
|
||||
|
||||
foo : Int
|
||||
foo = 94
|
4
tests/idris2/error009/expected
Normal file
4
tests/idris2/error009/expected
Normal file
@ -0,0 +1,4 @@
|
||||
(toplevel):1:1--1:1:DoesntExist not found
|
||||
Exists.idr:1:1--3:1:DoesntExist not found
|
||||
Welcome to Idris 2 version 0.0. Enjoy yourself!
|
||||
Main> Bye for now!
|
1
tests/idris2/error009/input
Normal file
1
tests/idris2/error009/input
Normal file
@ -0,0 +1 @@
|
||||
:q
|
3
tests/idris2/error009/run
Executable file
3
tests/idris2/error009/run
Executable file
@ -0,0 +1,3 @@
|
||||
$1 Exists.idr < input
|
||||
|
||||
rm -rf build
|
@ -1,3 +1,3 @@
|
||||
$1 Do.blod < input
|
||||
$1 Do.idr < input
|
||||
|
||||
rm -rf build
|
||||
|
@ -1,3 +1,3 @@
|
||||
$1 --check PError.run
|
||||
$1 --check PError.idr
|
||||
|
||||
rm -rf build
|
||||
|
Loading…
Reference in New Issue
Block a user