Skip to content
Open
17 changes: 14 additions & 3 deletions docs/manual/release-notes/rl-0.9.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,14 @@
];
}
```
- `languages.{terraform,hcl}`: LSP servers now default to `tofu-ls`. While this
is unlikely to cause any noticeable change in behavior or breakage, it's
mentioned just in case.

Some other settings and commands are now deprecated but are still supported.
Some other settings and commands are now deprecated but are still supported.

- The `setupOpts.mappings` options were also removed. Use the built-in Neovim
settings (nvf's {option}`vim.keymaps`)
- The `setupOpts.mappings` options were also removed. Use the built-in Neovim
settings (nvf's {option}`vim.keymaps`)

[Snoweuph](https://github.com/snoweuph)

Expand Down Expand Up @@ -94,6 +97,14 @@

- `toggleterm` open map now also works when in terminal mode

[ppenguin](https://github.com/ppenguin):

- Improved/harmonized for `terraform` and `hcl`:
- formatting (use `terraform fmt` or `tofu fmt` for `tf` files)
- LSP config
- Added `tofu` and `tofu-ls` as (free) alternative to `terrraform` and
`terraform-ls`

[jtliang24](https://github.com/jtliang24):

- Updated nix language plugin to use pkgs.nixfmt instead of
Expand Down
41 changes: 26 additions & 15 deletions modules/plugins/languages/hcl.nix
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,39 @@
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.meta) getExe;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) bool enum listOf;
inherit (lib.types) enum listOf;
inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf;
inherit (lib.nvim.attrsets) mapListToAttrs;

cfg = config.vim.languages.hcl;

defaultServers = ["terraform-ls"];
defaultServers = ["tofuls-hcl"];
servers = {
terraform-ls = {
terraformls-hcl = {
enable = true;
cmd = [(getExe pkgs.terraform-ls) "serve"];
filetypes = ["terraform" "terraform-vars"];
filetypes = ["hcl"];
root_markers = [".git"];
};
tofuls-hcl = {
enable = true;
cmd = [(getExe pkgs.tofu-ls) "serve"];
filetypes = ["hcl"];
root_markers = [".terraform" ".git"];
};
# TODO: package nomad-lsp and offer as an option here too
};

defaultFormat = ["hclfmt"];
formats = {
hclfmt = {
command = getExe pkgs.hclfmt;
};
nomad-fmt = {
command = getExe pkgs.nomad;
args = ["fmt" "$FILENAME"];
stdin = false;
};
};
in {
options.vim.languages.hcl = {
Expand All @@ -49,11 +61,7 @@ in {
};

format = {
enable = mkOption {
type = bool;
default = config.vim.languages.enableFormat;
description = "Enable HCL formatting";
};
enable = mkEnableOption "Enable HCL formatting" // {default = config.vim.languages.enableFormat;};
type = mkOption {
type = deprecatedSingleOrListOf "vim.language.hcl.format.type" (enum (attrNames formats));
default = defaultFormat;
Expand Down Expand Up @@ -86,18 +94,21 @@ in {
}
'';
}

(mkIf cfg.treesitter.enable {
vim.treesitter.enable = true;
vim.treesitter.grammars = [cfg.treesitter.package];
})

(mkIf cfg.lsp.enable {
vim.lsp.servers =
mapListToAttrs (n: {
name = n;
value = servers.${n};
})
cfg.lsp.servers;
vim = {
lsp.servers =
mapListToAttrs (n: {
name = n;
value = servers.${n};
})
cfg.lsp.servers;
};
})

(mkIf cfg.format.enable {
Expand Down
70 changes: 58 additions & 12 deletions modules/plugins/languages/terraform.nix
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,43 @@
inherit (lib.modules) mkIf mkMerge;
inherit (lib.meta) getExe;
inherit (lib.types) enum listOf;
inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf;
inherit (lib.nvim.attrsets) mapListToAttrs;

cfg = config.vim.languages.terraform;

defaultServers = ["terraformls"];
defaultServers = ["tofuls-tf"];
servers = {
terraformls = {
terraformls-tf = {
enable = true;
cmd = [(getExe pkgs.terraform-ls) "serve"];
filetypes = ["terraform" "terraform-vars"];
filetypes = ["terraform" "terraform-vars" "tf"];
root_markers = [".terraform" ".git"];
};
tofuls-tf = {
enable = true;
cmd = [(getExe pkgs.tofu-ls) "serve"];
filetypes = ["terraform" "terraform-vars" "tf"];
root_markers = [".terraform" ".git"];
};
};

defaultFormat = ["tofu-fmt"];
formats = {
tofu-fmt = {
command = "${getExe pkgs.opentofu}";
args = ["fmt" "$FILENAME"];
stdin = false;
};
terraform-fmt = {
command = "${getExe pkgs.terraform}";
args = ["fmt" "$FILENAME"];
stdin = false;
};
};
in {
options.vim.languages.terraform = {
enable = mkEnableOption "Terraform/HCL support";
enable = mkEnableOption "Terraform support";

treesitter = {
enable = mkEnableOption "Terraform treesitter" // {default = config.vim.languages.enableTreesitter;};
Expand All @@ -34,27 +54,53 @@ in {

lsp = {
enable = mkEnableOption "Terraform LSP support (terraform-ls)" // {default = config.vim.lsp.enable;};

servers = mkOption {
type = listOf (enum (attrNames servers));
default = defaultServers;
description = "Terraform LSP server to use";
};
};

format = {
enable = mkEnableOption "Enable Terraform formatting" // {default = config.vim.languages.enableFormat;};
type = mkOption {
type = deprecatedSingleOrListOf "vim.language.terraform.format.type" (enum (attrNames formats));
default = defaultFormat;
description = "Terraform formatter to use";
};
};
};

config = mkIf cfg.enable (mkMerge [
(mkIf cfg.treesitter.enable {
vim.treesitter.enable = true;
vim.treesitter.grammars = [cfg.treesitter.package];
})

(mkIf cfg.lsp.enable {
vim.lsp.servers =
mapListToAttrs (n: {
name = n;
value = servers.${n};
})
cfg.lsp.servers;
vim = {
lsp.servers =
mapListToAttrs (n: {
name = n;
value = servers.${n};
})
cfg.lsp.servers;
};
})

(mkIf cfg.format.enable {
vim.formatter.conform-nvim = {
enable = true;
setupOpts = {
formatters_by_ft.terraform = cfg.format.type;
formatters =
mapListToAttrs (name: {
inherit name;
value = formats.${name};
})
cfg.format.type;
};
};
})
]);
}