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 mod
s.
Add an undefined name to the top-level lambda.
{ foo }: foo + bar
=>
{ foo, bar }: foo + bar
Convert path = value;
into inherit key;
.
This covers,
prefix.key = key;
=>prefix = { inherit key; };
Here theprefix
set mut not berec
. The code before is actually an infinite recursion while the code after is not.prefix.key = from.key;
=>prefix = [rec] { inherit (from) key; };
Since thefrom
is resolved in theprefix
scope thus it is allowed to have recursive references (but may not be infinite recursion).
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 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;
};
}
Rewrite between attribute names and double quoted strings
{ foo = bar; }
<=>
{ "foo" = bar; }
Remove empty inherit;
or inherit (...);
.
{ foo = "bar"; inherit; }
=>
{ foo = "bar"; }
Remove empty let in ...
.
let in { foo = "bar"; }
=>
{ foo = "bar"; }
Rewrite between double quoted strings and indented strings
"foo\nbar\n"
=>
''
foo
bar
''
Rewrite URI literals to double quoted strings
https://nixos.org
=>
"https://nixos.org"