linol/thirdparty/lsp/ocaml-lsp-server/test/e2e-new/action_mark_remove.ml

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 |}]
;;