salt-mode
salt-mode copied to clipboard
Feature Request company-mode completion
I really like where this is headed.. I would like to have the completion using company-mode in spacemacs. I will dive in and help if I can.. I'm new to lisp elisp.. I'm going to dig into getting this working.. If you have any tips or pointers that would help, it would be appreciated ..
Marty
I agree @MBuchaus, company-mode completion would be a great addition. I've been hoping to get started with this for a while but haven't had the time. Please, go ahead if you feel so inclined!
See this wiki page for some tips on writing a company-mode backend. Alternatively, you may want to consider creating a completion-at-point function instead and using company's built-in CAPF backend too.
It would be awesome if you could add some tests for the backend. Don't worry if you're not sure, I can help you 👍
Let me know if you have any questions or need any help.
I will do what I can.. I want to learn this, thanks for the feedback.
With a little bit of python intronspection (for ideas see https://github.com/gtmanfred/salint) this could be very useful
@max-arnold what's the first thing you'd like to have completion for?
I think adding something small will be more achievable to begin with.
I see four broad categories for possible autocompletion helpers:
- Salt state modules (module/function names, arguments)
- User state trees (state path/id autocompletion for
include,extend,require,watch,onchangesetc) - Yaml keywords which have special meaning in salt (
name,include,extend,require,watch,onchanges,onfail,prereq,use,listenand their*_inand*_anycounterparts,runas,runas_password,fire_event,reload_*,unless,onlyif,check_cmd,retry,order). Basically, everything defined insalt.state.STATE_INTERNAL_KEYWORDS. - Basic Jinja syntax, plus maybe the helpers defined in
salt.utils.jinja.py
So far the (3) seems to be easiest to start with, and (1) looks most useful.
As a side note, the Salt plugin for Sublime partially covers (1) and (4): https://github.com/saltstack/sublime-text/tree/master/Snippets
The new baredoc module in the upcoming Salt 3001 Sodium release can dump all the state/execution module functions. VSCode SaltStack plugin already uses it to provide the most comprehensive state autocompletion feature:
https://github.com/korekontrol/vscode-saltstack/pull/6/ https://github.com/korekontrol/vscode-saltstack/pull/8/
Interesting, thanks @max-arnold!
Do you have an opinion on the VSCode approach (generating and storing json files) vs the salt-mode approach (calling a python script and loading the definitions into memory)?
VSCode approach pros:
- Easier to setup (just install the plugin, no need to fiddle with salt)
- Works with any Salt version (not just the upcoming 3001)
- Probably faster
Cons:
- JSON files need to be updated when a new Salt version is released
- Can't work with custom modules that are not bundled with Salt
- Potential version mismatch (json files vs a particular Salt version)
I guess it is easier to keep the existing approach in salt-mode and call the baredoc module directly (it can parse any salt module even if it doesn't have all the necessary dependencies installed).