1
1
mirror of https://github.com/oxalica/nil.git synced 2024-11-23 03:57:06 +03:00
nil/docs/code_actions.md
2023-03-05 06:19:17 +08:00

1.9 KiB

Code actions

Code actions are applicable code transformations.

  • In coc.nvim, they can be triggered on cursor position via <Plug>(coc-codeaction-cursor), which by default binds to <leader>ac.
  • In VSCode, they can be triggered by clicking the lightbulb 💡 icon at the beginning of the cursor line.

Here is the list of all implemented code actions, sorted by their mod name in code crates/ide/src/ide/assists. Currently documentations below are simply copied from doc-comments of their mods.

add_to_top_level_lambda_param

Add an undefined name to the top-level lambda.

{ foo }: foo + bar

=>

{ foo, bar }: foo + bar

convert_to_inherit

Convert path = value; into inherit key;.

This covers,

  • prefix.key = key; => prefix = { inherit key; }; Here the prefix set mut not be rec. The code before is actually an infinite recursion while the code after is not.
  • prefix.key = from.key; => prefix = [rec] { inherit (from) key; }; Since the from is resolved in the prefix scope thus it is allowed to have recursive references (but may not be infinite recursion).

flatten_attrset

Flatten binding with Attrset RHS into multiple bindings of outer level. FIXME: Indentations are not reformated well.

{
foo = {
    bar = 1;
    baz = 2;
};
}

=>

{
foo.bar = 1;
foo.baz = 2;
}

pack_bindings

Pack multiple bindings with the same prefix into nested one. FIXME: Indentations are not reformated well.

{
foo.bar = 1;
foo.baz = 2;
}

=>

{
foo = {
    bar = 1;
    baz = 2;
};
}

remove_empty_inherit

Remove empty inherit; or inherit (...);.

{ foo = "bar"; inherit; }

=>

{ foo = "bar"; }

remove_empty_let_in

Remove empty let in ....

let in { foo = "bar"; }

=>

{ foo = "bar"; }