salt-mode icon indicating copy to clipboard operation
salt-mode copied to clipboard

Feature Request company-mode completion

Open ghost opened this issue 7 years ago • 8 comments

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

ghost avatar Nov 09 '17 15:11 ghost

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.

glynnforrest avatar Nov 10 '17 15:11 glynnforrest

I will do what I can.. I want to learn this, thanks for the feedback.

ghost avatar Nov 10 '17 15:11 ghost

With a little bit of python intronspection (for ideas see https://github.com/gtmanfred/salint) this could be very useful

max-arnold avatar Oct 08 '18 05:10 max-arnold

@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.

glynnforrest avatar Oct 08 '18 17:10 glynnforrest

I see four broad categories for possible autocompletion helpers:

  1. Salt state modules (module/function names, arguments)
  2. User state trees (state path/id autocompletion for include, extend, require, watch, onchanges etc)
  3. Yaml keywords which have special meaning in salt (name, include, extend, require, watch, onchanges, onfail, prereq, use, listen and their *_in and *_any counterparts, runas, runas_password, fire_event, reload_*, unless, onlyif, check_cmd, retry, order). Basically, everything defined in salt.state.STATE_INTERNAL_KEYWORDS.
  4. 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

max-arnold avatar Oct 10 '18 06:10 max-arnold

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/

max-arnold avatar May 29 '20 10:05 max-arnold

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)?

glynnforrest avatar May 29 '20 11:05 glynnforrest

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).

max-arnold avatar May 29 '20 11:05 max-arnold