File tree Expand file tree Collapse file tree 3 files changed +29
-8
lines changed Expand file tree Collapse file tree 3 files changed +29
-8
lines changed Original file line number Diff line number Diff line change @@ -112,10 +112,7 @@ module Poll =
112
112
| s -> Ok (`Mtime s.st_mtime)
113
113
;;
114
114
115
- let read_file s =
116
- Fiber. of_thunk (fun () ->
117
- Fiber. return (Result. try_with (fun () -> Io.String_path. read_file s)))
118
- ;;
115
+ let read_file s = Fiber. of_thunk (fun () -> Fiber. return (Io. read_file s))
119
116
end )
120
117
121
118
type config =
Original file line number Diff line number Diff line change @@ -9,7 +9,6 @@ include struct
9
9
module Table = Table
10
10
module Tuple = Tuple
11
11
module Unix_env = Env
12
- module Io = Io
13
12
module Map = Map
14
13
module Monoid = Monoid
15
14
module Pid = Pid
@@ -18,6 +17,31 @@ include struct
18
17
let sprintf = sprintf
19
18
end
20
19
20
+ module Io = struct
21
+ open Base
22
+
23
+ let read_file f =
24
+ Base.Result. try_with (fun () ->
25
+ let fd = Unix. openfile f [ O_CLOEXEC ; O_RDONLY ] 0 in
26
+ Exn. protect
27
+ ~finally: (fun () -> Unix. close fd)
28
+ ~f: (fun () ->
29
+ match Unix. fstat fd with
30
+ | { Unix. st_size; _ } ->
31
+ let buf = Bytes. create st_size in
32
+ let rec loop pos remains =
33
+ if remains > 0
34
+ then (
35
+ let read = Unix. read fd buf pos remains in
36
+ if read = 0
37
+ then failwith (sprintf " unable to read all of %s" f)
38
+ else loop (pos + read) (remains - read))
39
+ in
40
+ loop 0 st_size;
41
+ Stdlib.Bytes. unsafe_to_string buf))
42
+ ;;
43
+ end
44
+
21
45
include struct
22
46
open Base
23
47
module Queue = Queue
Original file line number Diff line number Diff line change @@ -79,12 +79,12 @@ let language_id_of_fname s =
79
79
let open_document_from_file (state : State.t ) uri =
80
80
let filename = Uri. to_path uri in
81
81
Fiber. of_thunk (fun () ->
82
- match Io.String_path. read_file filename with
83
- | exception Sys_error _ ->
82
+ match Io. read_file filename with
83
+ | Error _ ->
84
84
Log. log ~section: " debug" (fun () ->
85
85
Log. msg " Unable to open file" [ " filename" , `String filename ]);
86
86
Fiber. return None
87
- | text ->
87
+ | Ok text ->
88
88
let languageId = language_id_of_fname filename in
89
89
let text_document = TextDocumentItem. create ~uri ~language Id ~version: 0 ~text in
90
90
let params = DidOpenTextDocumentParams. create ~text Document:text_document in
You can’t perform that action at this time.
0 commit comments