Cfn Lsp Extra
Project description
Cfn Lsp Extra
An experimental cloudformation lsp server (with support for SAM templates) built on top of cfn-lint aiming to provide hovering, completion, etc. YAML and JSON are supported, though YAML has more features currently implemented (for example snippets) and will give a better experience. Trust me.
Features
Method | Status |
---|---|
textDocument/hover |
Done for resources, resource properties, subproperties and !Ref s. TODO !GetAtt s, intrinsic functions. |
textDocument/completion |
Done for resources, resource properties, subproperties, refs, !GetAtts and intrinsic functions. TODO Fn::GetAtt . |
textDocument/definition |
Done for !Ref s. TODO mappings. |
textDocument/publishDiagnostics |
Done through cfnlint . |
Installation
First install the executable, pipx
is recommended, but you can use pip
instead if you like to live dangerously:
pipx install cfn-lsp-extra
Or get the bleeding edge from source:
pipx install git+https://github.com/laurencewarne/cfn-lsp-extra.git@$(git ls-remote git@github.com:laurencewarne/cfn-lsp-extra.git | head -1 | cut -f1)
Updating:
pipx upgrade cfn-lsp-extra
Emacs
Install the lsp-cfn.el package.
Neovim
Make sure you're running at least 0.8
, then add the following in ~/.config/nvim/filetype.lua
:
vim.filetype.add {
pattern = {
['.*'] = {
priority = math.huge,
function(path, bufnr)
local line1 = vim.filetype.getlines(bufnr, 1)
local line2 = vim.filetype.getlines(bufnr, 2)
if vim.filetype.matchregex(line1, [[^AWSTemplateFormatVersion]] ) then
return 'yaml.cloudformation'
elseif vim.filetype.matchregex(line1, [[["']AWSTemplateFormatVersion]] ) or
vim.filetype.matchregex(line2, [[["']AWSTemplateFormatVersion]] ) then
return 'json.cloudformation'
end
end,
},
},
}
Then you can use LanguageClient-neovim to start the server on those file types:
let g:LanguageClient_serverCommands = {
\ 'yaml.cloudformation': ['~/.local/bin/cfn-lsp-extra'],
\ 'json.cloudformation': ['~/.local/bin/cfn-lsp-extra']
\ }
Patches documenting integration for other editors are very welcome!
Alternatives
vscode-cfn-lint
cfn-lint
Note this is used by cfn-lsp-extra
under the hood to generate diagnostics. One difference with cfn-lsp-extra
is that diagnostics will be refreshed every time you make a change to the document, in other words you don't need to save the file.
yamlls
You can use yamlls
in conjunction with the Cloudformation schema at https://www.schemastore.org/json/ as an alternative. For Emacs, lsp-mode
can install yamlls
for you, from there you could do something like:
(defun my-yamlls-cloudformation-setup ()
;; There's also one for serverless
(lsp-yaml-set-buffer-schema "https://raw.githubusercontent.com/awslabs/goformation/master/schema/cloudformation.schema.json")
(setq-local
lsp-yaml-custom-tags
["!And"
"!Base64"
"!Cidr"
"!Equals"
"!FindInMap sequence"
"!GetAZs"
"!GetAtt"
"!If"
"!ImportValue"
"!Join sequence"
"!Not"
"!Or"
"!Ref Scalar"
"!Ref"
"!Select"
"!Split"
"!Sub"
"!fn"]))
;; Using the mode defined by https://www.emacswiki.org/emacs/CfnLint
(add-hook 'cfn-yaml-mode-hook #'my-yamlls-cloudformation-setup)
(add-hook 'cfn-yaml-mode-hook #'lsp-deferred)
This will give you completions (and some support for value completions?), though no hover documentation.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for cfn_lsp_extra-0.4.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e2f6bd26b654a8915a6e5d479f812136785b814b0bd2b47465f9d9060ae921b1 |
|
MD5 | 07377b875e0ff1c7007552b6012eb097 |
|
BLAKE2b-256 | a9307c9c554dae291a6b8a0d6b00ba50b95b3fd12eb3af93bd4da725ba6fb209 |