mirror of
https://github.com/c-cube/linol.git
synced 2025-12-09 12:45:53 -05:00
241 lines
3.7 KiB
OCaml
241 lines
3.7 KiB
OCaml
open Test.Import
|
|
|
|
let run_test ~title ~message source =
|
|
let src, range = Code_actions.parse_selection source in
|
|
Option.iter
|
|
(Code_actions.apply_code_action
|
|
~diagnostics:[ Diagnostic.create ~message:(`String message) ~range () ]
|
|
title
|
|
src
|
|
range)
|
|
~f:print_string
|
|
;;
|
|
|
|
let mark_test = function
|
|
| `Value -> run_test ~title:"Mark as unused" ~message:"unused value"
|
|
| `Open -> run_test ~title:"Replace with open!" ~message:"unused open"
|
|
| `For_loop_index ->
|
|
run_test ~title:"Mark for-loop index as unused" ~message:"unused for-loop index"
|
|
;;
|
|
|
|
let remove_test = function
|
|
| `Value -> run_test ~title:"Remove unused" ~message:"unused value"
|
|
| `Open -> run_test ~title:"Remove unused open" ~message:"unused open"
|
|
| `Open_bang -> run_test ~title:"Remove unused open!" ~message:"unused open!"
|
|
| `Type -> run_test ~title:"Remove unused type" ~message:"unused type"
|
|
| `Module -> run_test ~title:"Remove unused module" ~message:"unused module"
|
|
| `Case -> run_test ~title:"Remove unused case" ~message:"this match case is unused"
|
|
| `Rec -> run_test ~title:"Remove unused rec" ~message:"unused rec flag"
|
|
| `Constructor ->
|
|
run_test ~title:"Remove unused constructor" ~message:"unused constructor"
|
|
;;
|
|
|
|
let%expect_test "mark value in let" =
|
|
mark_test
|
|
`Value
|
|
{|
|
|
let f =
|
|
let $x$ = 1 in
|
|
0
|
|
|};
|
|
[%expect
|
|
{|
|
|
let f =
|
|
let _x = 1 in
|
|
0 |}]
|
|
;;
|
|
|
|
(* todo *)
|
|
let%expect_test "mark value in top level let" =
|
|
mark_test
|
|
`Value
|
|
{|
|
|
let $f$ =
|
|
let x = 1 in
|
|
0
|
|
|};
|
|
[%expect
|
|
{|
|
|
let _f =
|
|
let x = 1 in
|
|
0 |}]
|
|
;;
|
|
|
|
let%expect_test "mark value in match" =
|
|
mark_test
|
|
`Value
|
|
{|
|
|
let f = function
|
|
| $x$ -> 0
|
|
|};
|
|
[%expect
|
|
{|
|
|
let f = function
|
|
| _x -> 0 |}]
|
|
;;
|
|
|
|
let%expect_test "remove value in let" =
|
|
remove_test
|
|
`Value
|
|
{|
|
|
let f =
|
|
let $x$ = 1 in
|
|
0
|
|
|};
|
|
[%expect
|
|
{|
|
|
let f =
|
|
0 |}]
|
|
;;
|
|
|
|
(* todo *)
|
|
let%expect_test "remove value in top level let" =
|
|
remove_test
|
|
`Value
|
|
{|
|
|
let $f$ =
|
|
let x = 1 in
|
|
0
|
|
|}
|
|
;;
|
|
|
|
let%expect_test "mark open" =
|
|
mark_test
|
|
`Open
|
|
{|
|
|
$open M$
|
|
|};
|
|
[%expect {| open! M |}]
|
|
;;
|
|
|
|
let%expect_test "mark for loop index" =
|
|
mark_test
|
|
`For_loop_index
|
|
{|
|
|
let () =
|
|
for $i$ = 0 to 10 do
|
|
()
|
|
done
|
|
|};
|
|
[%expect
|
|
{|
|
|
let () =
|
|
for _i = 0 to 10 do
|
|
()
|
|
done |}]
|
|
;;
|
|
|
|
let%expect_test "remove open" =
|
|
remove_test
|
|
`Open
|
|
{|
|
|
open A
|
|
$open B$
|
|
|};
|
|
[%expect {| open A |}]
|
|
;;
|
|
|
|
let%expect_test "remove open!" =
|
|
remove_test
|
|
`Open_bang
|
|
{|
|
|
open A
|
|
$open! B$
|
|
|}
|
|
;;
|
|
|
|
let%expect_test "remove type" =
|
|
remove_test
|
|
`Type
|
|
{|
|
|
$type t = int$
|
|
type s = bool
|
|
|};
|
|
[%expect {| type s = bool |}]
|
|
;;
|
|
|
|
let%expect_test "remove module" =
|
|
remove_test
|
|
`Module
|
|
{|
|
|
$module A = struct end$
|
|
module B = struct end
|
|
|};
|
|
[%expect {| module B = struct end |}]
|
|
;;
|
|
|
|
let%expect_test "remove case" =
|
|
remove_test
|
|
`Case
|
|
{|
|
|
let f = function
|
|
| 0 -> 0
|
|
| $0 -> 1$
|
|
|};
|
|
[%expect
|
|
{|
|
|
let f = function
|
|
| 0 -> 0 |}]
|
|
;;
|
|
|
|
let%expect_test "remove rec flag" =
|
|
remove_test
|
|
`Rec
|
|
{|
|
|
let rec $f$ = 0
|
|
|};
|
|
[%expect {| let f = 0 |}]
|
|
;;
|
|
|
|
let%expect_test "remove constructor" =
|
|
remove_test
|
|
`Constructor
|
|
{|
|
|
type t = A $| B$
|
|
|};
|
|
[%expect {| type t = A |}]
|
|
;;
|
|
|
|
let%expect_test "remove constructor" =
|
|
remove_test
|
|
`Constructor
|
|
{|
|
|
type t =
|
|
| A
|
|
$| B$
|
|
|};
|
|
[%expect
|
|
{|
|
|
type t =
|
|
| A |}]
|
|
;;
|
|
|
|
let%expect_test "remove constructor" =
|
|
remove_test
|
|
`Constructor
|
|
{|
|
|
type t =
|
|
$| A$
|
|
| B
|
|
|};
|
|
[%expect
|
|
{|
|
|
type t =
|
|
|
|
| B |}]
|
|
;;
|
|
|
|
let%expect_test "remove constructor" =
|
|
remove_test
|
|
`Constructor
|
|
{|
|
|
type t =
|
|
$A$
|
|
| B
|
|
|};
|
|
[%expect
|
|
{|
|
|
type t =
|
|
|
|
| B |}]
|
|
;;
|