1
1
mirror of https://github.com/oxalica/nil.git synced 2024-11-22 02:55:39 +03:00
nil/docs/code_actions.md
2023-08-06 22:31:06 +08:00

2.4 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 reformatted 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 reformatted well.

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

=>

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

quote_attr and unquote_attr

Rewrite between attribute names and double quoted strings

{ foo = bar; }

<=>

{ "foo" = bar; }

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

rewrite_string_to_indented and rewrite_indented_to_string

Rewrite between double quoted strings and indented strings

"foo\nbar\n"

=>

''
  foo
  bar
''

rewrite_uri_to_string

Rewrite URI literals to double quoted strings

https://nixos.org

=>

"https://nixos.org"